From: Kenneth Graunke Date: Wed, 31 Aug 2016 07:16:24 +0000 (-0700) Subject: glsl: Reject TCS/TES input arrays not sized to gl_MaxPatchVertices. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=72b56e8b1ae34b4c10f822b704521ccd463270b3;p=mesa.git glsl: Reject TCS/TES input arrays not sized to gl_MaxPatchVertices. We handled the unsized case, implicitly sizing arrays to the value of gl_MaxPatchVertices. But if a size was present, we failed to raise a compile error if it wasn't the value of gl_MaxPatchVertices. Fixes CTS tests: *.tessellation_shader.compilation_and_linking_errors. {tc,te}_invalid_array_size_used_for_input_blocks Piglit's tcs-input-read-nonconst-* tests have recently been fixed. This patch will break older copies of those tests, but the latest should continue working. Update to Piglit 75819c13af2ed5. Signed-off-by: Kenneth Graunke Reviewed-by: Francisco Jerez --- diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp index 6e9c32ef4bd..a7f297e0644 100644 --- a/src/compiler/glsl/ast_to_hir.cpp +++ b/src/compiler/glsl/ast_to_hir.cpp @@ -4344,10 +4344,23 @@ handle_tess_shader_input_decl(struct _mesa_glsl_parse_state *state, if (var->data.patch) return; - /* Unsized arrays are implicitly sized to gl_MaxPatchVertices. */ + /* The ARB_tessellation_shader spec says: + * + * "Declaring an array size is optional. If no size is specified, it + * will be taken from the implementation-dependent maximum patch size + * (gl_MaxPatchVertices). If a size is specified, it must match the + * maximum patch size; otherwise, a compile or link error will occur." + * + * This text appears twice, once for TCS inputs, and again for TES inputs. + */ if (var->type->is_unsized_array()) { var->type = glsl_type::get_array_instance(var->type->fields.array, state->Const.MaxPatchVertices); + } else if (var->type->length != state->Const.MaxPatchVertices) { + _mesa_glsl_error(&loc, state, + "per-vertex tessellation shader input arrays must be " + "sized to gl_MaxPatchVertices (%d).", + state->Const.MaxPatchVertices); } }