diff options
author | Kenneth Graunke <[email protected]> | 2016-09-15 02:10:23 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2016-09-19 12:01:11 -0700 |
commit | 04026b43c89c6fdb794650f8c80e356707cc6d69 (patch) | |
tree | 25a725889994c3307a50b4373e4a6c11139cb5ed /src/compiler/glsl | |
parent | 6ed05fa4cb22de8ef21c044e5ba586acdad3883a (diff) |
glsl: Skip "unsized arrays aren't allowed" check for TCS/TES/GS vars.
Fixes ESEXT-CTS.draw_elements_base_vertex_tests.AEP_shader_stages and
ESEXT-CTS.texture_cube_map_array.texture_size_tesselation_con_sh.
Signed-off-by: Kenneth Graunke <[email protected]>
Reviewed-by: Ilia Mirkin <[email protected]>
Diffstat (limited to 'src/compiler/glsl')
-rw-r--r-- | src/compiler/glsl/ast_to_hir.cpp | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp index 0a23195a15f..9de8454f99e 100644 --- a/src/compiler/glsl/ast_to_hir.cpp +++ b/src/compiler/glsl/ast_to_hir.cpp @@ -5127,7 +5127,33 @@ ast_declarator_list::hir(exec_list *instructions, const glsl_type *const t = (earlier == NULL) ? var->type : earlier->type; - if (t->is_unsized_array()) + /* Skip the unsized array check for TCS/TES/GS inputs & TCS outputs. + * + * The GL_OES_tessellation_shader spec says about inputs: + * + * "Declaring an array size is optional. If no size is specified, + * it will be taken from the implementation-dependent maximum + * patch size (gl_MaxPatchVertices)." + * + * and about TCS outputs: + * + * "If no size is specified, it will be taken from output patch + * size declared in the shader." + * + * The GL_OES_geometry_shader spec says: + * + * "All geometry shader input unsized array declarations will be + * sized by an earlier input primitive layout qualifier, when + * present, as per the following table." + */ + const bool implicitly_sized = + (var->data.mode == ir_var_shader_in && + state->stage >= MESA_SHADER_TESS_CTRL && + state->stage <= MESA_SHADER_GEOMETRY) || + (var->data.mode == ir_var_shader_out && + state->stage == MESA_SHADER_TESS_CTRL); + + if (t->is_unsized_array() && !implicitly_sized) /* Section 10.17 of the GLSL ES 1.00 specification states that * unsized array declarations have been removed from the language. * Arrays that are sized using an initializer are still explicitly |