summaryrefslogtreecommitdiffstats
path: root/src/compiler/glsl/ast_to_hir.cpp
diff options
context:
space:
mode:
authorTobias Klausmann <[email protected]>2016-05-08 22:44:06 +0200
committerDave Airlie <[email protected]>2016-05-14 08:28:08 +1000
commitd656736bbf926c219b6bcbc0ad59132fc82a7382 (patch)
treea23cf6a705eec5b42acb4218ee9e7387e7b818a4 /src/compiler/glsl/ast_to_hir.cpp
parentad355652c20b245f5f2faa8622e71461e3121a7f (diff)
glsl: Add arb_cull_distance support (v3)
v2: make too large array a compile error v3: squash mesa/prog patch to avoid static compiler errors in bisect Signed-off-by: Tobias Klausmann <[email protected]> Signed-off-by: Dave Airlie <[email protected]> Reviewed-by: Kristian Høgsberg <[email protected]>
Diffstat (limited to 'src/compiler/glsl/ast_to_hir.cpp')
-rw-r--r--src/compiler/glsl/ast_to_hir.cpp46
1 files changed, 32 insertions, 14 deletions
diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp
index 5a1fc9f68ac..338edc86676 100644
--- a/src/compiler/glsl/ast_to_hir.cpp
+++ b/src/compiler/glsl/ast_to_hir.cpp
@@ -1196,20 +1196,38 @@ check_builtin_array_max_size(const char *name, unsigned size,
_mesa_glsl_error(&loc, state, "`gl_TexCoord' array size cannot "
"be larger than gl_MaxTextureCoords (%u)",
state->Const.MaxTextureCoords);
- } 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)",
- state->Const.MaxClipPlanes);
+ } else if (strcmp("gl_ClipDistance", name) == 0) {
+ state->clip_dist_size = size;
+ if (size + state->cull_dist_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)",
+ state->Const.MaxClipPlanes);
+ }
+ } else if (strcmp("gl_CullDistance", name) == 0) {
+ state->cull_dist_size = size;
+ if (size + state->clip_dist_size > state->Const.MaxClipPlanes) {
+ /* From the ARB_cull_distance spec:
+ *
+ * "The gl_CullDistance 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 determines the number and set of
+ * enabled cull distances and can be at most
+ * gl_MaxCullDistances."
+ */
+ _mesa_glsl_error(&loc, state, "`gl_CullDistance' array size cannot "
+ "be larger than gl_MaxCullDistances (%u)",
+ state->Const.MaxClipPlanes);
+ }
}
}