glsl/ast: Fix assertion failure when GS input declared as non-array.
authorPaul Berry <stereotype441@gmail.com>
Mon, 12 Aug 2013 13:39:23 +0000 (06:39 -0700)
committerPaul Berry <stereotype441@gmail.com>
Wed, 14 Aug 2013 03:02:54 +0000 (20:02 -0700)
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 <kenneth@whitecape.org>
src/glsl/ast_to_hir.cpp

index 3610014a00cc3cdf7cf86dcef35b31264f1266bb..8e1e6e5008ef4183f8b0b266615e76c30114f17e 100644 (file)
@@ -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:
        *