From ece1c04e8e552813040d603f72637291991465c4 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Wed, 22 Mar 2017 18:34:23 +0100 Subject: glsl: reject bindless samplers/images frag inputs without 'flat' MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From section 4.3.4 of the ARB_bindless_texture spec "(modify last paragraph, p. 35, allowing samplers and images as fragment shader inputs) ... Fragment inputs can only be signed and unsigned integers and integer vectors, floating point scalars, floating-point vectors, matrices, sampler and image types, or arrays or structures of these. Fragment shader inputs that are signed or unsigned integers, integer vectors, or any double-precision floating- point type, or any sampler or image type must be qualified with the interpolation qualifier "flat"." v3: - update spec comment formatting Signed-off-by: Samuel Pitoiset Reviewed-by: Timothy Arceri Reviewed-by: Nicolai Hähnle --- src/compiler/glsl/ast_to_hir.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/compiler') diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp index 040314a3488..4c4c2a0be82 100644 --- a/src/compiler/glsl/ast_to_hir.cpp +++ b/src/compiler/glsl/ast_to_hir.cpp @@ -2996,6 +2996,26 @@ validate_fragment_flat_interpolation_input(struct _mesa_glsl_parse_state *state, _mesa_glsl_error(loc, state, "if a fragment input is (or contains) " "a double, then it must be qualified with 'flat'"); } + + /* Bindless sampler/image fragment inputs must be qualified with 'flat'. + * + * From section 4.3.4 of the ARB_bindless_texture spec: + * + * "(modify last paragraph, p. 35, allowing samplers and images as + * fragment shader inputs) ... Fragment inputs can only be signed and + * unsigned integers and integer vectors, floating point scalars, + * floating-point vectors, matrices, sampler and image types, or arrays + * or structures of these. Fragment shader inputs that are signed or + * unsigned integers, integer vectors, or any double-precision floating- + * point type, or any sampler or image type must be qualified with the + * interpolation qualifier "flat"." + */ + if (state->has_bindless() + && (var_type->contains_sampler() || var_type->contains_image())) { + _mesa_glsl_error(loc, state, "if a fragment input is (or contains) " + "a bindless sampler (or image), then it must be " + "qualified with 'flat'"); + } } static void -- cgit v1.2.3