aboutsummaryrefslogtreecommitdiffstats
path: root/src/compiler
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/glsl/link_uniforms.cpp3
-rw-r--r--src/compiler/glsl/opt_dead_code.cpp9
2 files changed, 10 insertions, 2 deletions
diff --git a/src/compiler/glsl/link_uniforms.cpp b/src/compiler/glsl/link_uniforms.cpp
index c7ca7034a51..6518ec10f34 100644
--- a/src/compiler/glsl/link_uniforms.cpp
+++ b/src/compiler/glsl/link_uniforms.cpp
@@ -1059,7 +1059,8 @@ private:
this->uniforms[id].opaque[shader_type].index = ~0;
this->uniforms[id].opaque[shader_type].active = false;
- this->uniforms[id].active_shader_mask |= 1 << shader_type;
+ if (current_var->data.used || base_type->is_subroutine())
+ this->uniforms[id].active_shader_mask |= 1 << shader_type;
/* This assigns uniform indices to sampler and image uniforms. */
handle_samplers(base_type, &this->uniforms[id], name);
diff --git a/src/compiler/glsl/opt_dead_code.cpp b/src/compiler/glsl/opt_dead_code.cpp
index 1eff3f2fd14..3e571fc7dd0 100644
--- a/src/compiler/glsl/opt_dead_code.cpp
+++ b/src/compiler/glsl/opt_dead_code.cpp
@@ -144,8 +144,15 @@ do_dead_code(exec_list *instructions, bool uniform_locations_assigned)
*/
if (entry->var->is_in_buffer_block()) {
if (entry->var->get_interface_type_packing() !=
- GLSL_INTERFACE_PACKING_PACKED)
+ GLSL_INTERFACE_PACKING_PACKED) {
+ /* Set used to false so it doesn't get set as referenced by
+ * the shader in the program resource list. This will also
+ * help avoid the state being unnecessarily flushed for the
+ * shader stage.
+ */
+ entry->var->data.used = false;
continue;
+ }
}
if (entry->var->type->is_subroutine())