summaryrefslogtreecommitdiffstats
path: root/src/glsl/ast_to_hir.cpp
diff options
context:
space:
mode:
authorPaul Berry <[email protected]>2013-08-12 06:39:23 -0700
committerPaul Berry <[email protected]>2013-08-13 20:02:54 -0700
commit91c8fea924c05801a1e05edcee00e53ea73e48b8 (patch)
treec87e621a2b462fad80f30a9bd338b5fa11f4db60 /src/glsl/ast_to_hir.cpp
parent336351e971d6232bbed11d9812ebf05341b6aa36 (diff)
glsl/ast: Fix assertion failure when GS input declared as non-array.
Previously, if a geometry shader input was declared as a non-array, we would flag the proper compiler error, but then before we got a chance to report it to the client, handle_geometry_shader_input_decl() would assertion fail. With this patch, handle_geometry_shader_input_decl() ignores non-arrays. Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/glsl/ast_to_hir.cpp')
-rw-r--r--src/glsl/ast_to_hir.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 3610014a00c..8e1e6e5008e 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -2546,9 +2546,8 @@ process_initializer(ir_variable *var, ast_declaration *decl,
/**
- * Do additional processing necessary for geometry shader input array
- * declarations (this covers both interface blocks arrays and input variable
- * arrays).
+ * Do additional processing necessary for geometry shader input declarations
+ * (this covers both interface blocks arrays and bare input variables).
*/
static void
handle_geometry_shader_input_decl(struct _mesa_glsl_parse_state *state,
@@ -2559,7 +2558,16 @@ handle_geometry_shader_input_decl(struct _mesa_glsl_parse_state *state,
num_vertices = vertices_per_prim(state->gs_input_prim_type);
}
- assert(var->type->is_array());
+ /* Geometry shader input variables must be arrays. Caller should have
+ * reported an error for this.
+ */
+ if (!var->type->is_array()) {
+ assert(state->error);
+
+ /* To avoid cascading failures, short circuit the checks below. */
+ return;
+ }
+
if (var->type->length == 0) {
/* Section 4.3.8.1 (Input Layout Qualifiers) of the GLSL 1.50 spec says:
*