diff options
author | Paul Berry <[email protected]> | 2011-08-11 15:23:33 -0700 |
---|---|---|
committer | Paul Berry <[email protected]> | 2011-09-08 09:37:45 -0700 |
commit | 37bb1c4de2eb2fa80d09b6e8dc8f39814d790e09 (patch) | |
tree | dabb4d638b9989d610a909f74b5412bebc9cbac1 /src/glsl | |
parent | 93b9758d01e2542ec3c2b8672cca0ae19b257aac (diff) |
glsl: Check that gl_ClipDistance[] is not sized too large.
Fixes piglit tests
clip-distance-explicit-too-large-with-access.{frag,vert} and
clip-distance-explicit-too-large.{frag,vert}.
Reviewed-by: Kenneth Graunke <[email protected]>
Reviewed-by: Ian Romanick <[email protected]>
Diffstat (limited to 'src/glsl')
-rw-r--r-- | src/glsl/ast_to_hir.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp index fbb2c146140..a4eaf857058 100644 --- a/src/glsl/ast_to_hir.cpp +++ b/src/glsl/ast_to_hir.cpp @@ -912,6 +912,21 @@ check_builtin_array_max_size(const char *name, unsigned size, "be larger than gl_MaxTextureCoords (%u)\n", state->Const.MaxTextureCoords); return true; + } else if (strcmp("gl_ClipDistance", name) == 0 + && size > state->Const.MaxClipPlanes) { + /* From section 7.1 (Vertex Shader Special Variables) of the + * GLSL 1.30 spec: + * + * "The gl_ClipDistance array is predeclared as unsized and + * must be sized by the shader either redeclaring it with a + * size or indexing it only with integral constant + * expressions. ... The size can be at most + * gl_MaxClipDistances." + */ + _mesa_glsl_error(&loc, state, "`gl_ClipDistance' array size cannot " + "be larger than gl_MaxClipDistances (%u)\n", + state->Const.MaxClipPlanes); + return true; } return false; } |