glsl: report correct number of allowed vertex inputs and fragment outputs
authorIago Toral Quiroga <itoral@igalia.com>
Wed, 9 Mar 2016 10:48:25 +0000 (11:48 +0100)
committerIago Toral Quiroga <itoral@igalia.com>
Thu, 10 Mar 2016 07:48:53 +0000 (08:48 +0100)
Before we would always report 16 for both and we would only fail if either
one exceeded 16. Now we fail if the maximum for each is exceeded, even if
it is smaller than 16 and we report the correct maximum.

Also, expand the size of to_assign[] to 32. There is code at the top
of the function handling max_index up to 32, so this just makes the
code more consistent.

Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
src/compiler/glsl/linker.cpp

index 4cec1077025dd8c70b80b5f6f6f465f8889891d1..76b700d3451bcd5b24e78680db1cf9e29ef67e82 100644 (file)
@@ -2417,7 +2417,8 @@ assign_attribute_or_color_locations(gl_shader_program *prog,
         /* Reversed because we want a descending order sort below. */
         return r->slots - l->slots;
       }
-   } to_assign[16];
+   } to_assign[32];
+   assert(max_index <= 32);
 
    unsigned num_attr = 0;
 
@@ -2625,11 +2626,11 @@ assign_attribute_or_color_locations(gl_shader_program *prog,
         continue;
       }
 
-      if (num_attr >= ARRAY_SIZE(to_assign)) {
+      if (num_attr >= max_index) {
          linker_error(prog, "too many %s (max %u)",
                       target_index == MESA_SHADER_VERTEX ?
                       "vertex shader inputs" : "fragment shader outputs",
-                      (unsigned)ARRAY_SIZE(to_assign));
+                      max_index);
          return false;
       }
       to_assign[num_attr].slots = slots;