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 <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
Paul Berry 2011-08-11 15:23:33 -07:00
parent 93b9758d01
commit 37bb1c4de2

View file

@ -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;
}