OSDN Git Service

glsl: set stage flag for structs and arrays in resource list
authorTimothy Arceri <t_arceri@yahoo.com.au>
Sat, 4 Jul 2015 05:43:15 +0000 (15:43 +1000)
committerTimothy Arceri <t_arceri@yahoo.com.au>
Thu, 30 Jul 2015 09:33:33 +0000 (19:33 +1000)
This fixes the remaining failing tests in:
ES31-CTS.program_interface_query.uniform-types

Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
src/glsl/linker.cpp

index a781211..a16dab4 100644 (file)
@@ -3129,9 +3129,19 @@ build_stageref(struct gl_shader_program *shProg, const char *name)
        */
       foreach_in_list(ir_instruction, node, sh->ir) {
          ir_variable *var = node->as_variable();
-         if (var && strcmp(var->name, name) == 0) {
-            stages |= (1 << i);
-            break;
+         if (var) {
+            unsigned baselen = strlen(var->name);
+            if (strncmp(var->name, name, baselen) == 0) {
+               /* Check for exact name matches but also check for arrays and
+                * structs.
+                */
+               if (name[baselen] == '\0' ||
+                   name[baselen] == '[' ||
+                   name[baselen] == '.') {
+                  stages |= (1 << i);
+                  break;
+               }
+            }
          }
       }
    }