From 37bb1c4de2eb2fa80d09b6e8dc8f39814d790e09 Mon Sep 17 00:00:00 2001 From: Paul Berry Date: Thu, 11 Aug 2011 15:23:33 -0700 Subject: [PATCH] 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 Reviewed-by: Ian Romanick --- src/glsl/ast_to_hir.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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; } -- 2.30.2