glsl: make use of active_shader_mask when building resource list
authorTimothy Arceri <tarceri@itsqueeze.com>
Tue, 3 Dec 2019 13:24:35 +0000 (00:24 +1100)
committerTimothy Arceri <tarceri@itsqueeze.com>
Thu, 5 Dec 2019 02:18:30 +0000 (13:18 +1100)
This allows us to avoid walking the entire IR looking for used
uniforms.

Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
src/compiler/glsl/linker.cpp

index f686fe96bfc8154c391b4aaa2126578e23ddf0b7..1b30a59d8fbb4f73845d0af1423bc22ea038cced 100644 (file)
@@ -4213,20 +4213,8 @@ build_program_resource_list(struct gl_context *ctx,
       if (shProg->data->UniformStorage[i].hidden)
          continue;
 
-      uint8_t stageref =
-         build_stageref(shProg, shProg->data->UniformStorage[i].name,
-                        ir_var_uniform);
-
-      /* Add stagereferences for uniforms in a uniform block. */
       bool is_shader_storage =
         shProg->data->UniformStorage[i].is_shader_storage;
-      int block_index = shProg->data->UniformStorage[i].block_index;
-      if (block_index != -1) {
-         stageref |= is_shader_storage ?
-            shProg->data->ShaderStorageBlocks[block_index].stageref :
-            shProg->data->UniformBlocks[block_index].stageref;
-      }
-
       GLenum type = is_shader_storage ? GL_BUFFER_VARIABLE : GL_UNIFORM;
       if (!link_util_should_add_buffer_variable(shProg,
                                                 &shProg->data->UniformStorage[i],
@@ -4269,6 +4257,7 @@ build_program_resource_list(struct gl_context *ctx,
          buffer_block_index = shProg->data->UniformStorage[i].block_index;
       }
 
+      uint8_t stageref = shProg->data->UniformStorage[i].active_shader_mask;
       if (!link_util_add_program_resource(shProg, resource_set, type,
                                           &shProg->data->UniformStorage[i], stageref))
          return;