The spec requires unused uniform block to be set as active in the
program resource list. To support this we tell opt dead code not to
remove them. However we can mark them as unused internally and
avoid unnecessarily state changes.
This change is also required for the folowing clean-up patch.
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
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);
*/
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())