glsl: fix lowering of UBO references of named blocks
When a UBO reference has the form block_name.foo where block_name refers to a block where the first member has a non-zero offset, the base offset was incorrectly added to the reference. Fixes an assertion triggered in debug builds by GL45-CTS.enhanced_layouts.uniform_block_layout_qualifier_conflict. That test doesn't properly check for correct execution in this case, so I am also going to send out a piglit test. Cc: 13.0 <mesa-stable@lists.freedesktop.org> Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
This commit is contained in:
@@ -107,7 +107,6 @@ public:
|
||||
|
||||
struct gl_linked_shader *shader;
|
||||
bool clamp_block_indices;
|
||||
struct gl_uniform_buffer_variable *ubo_var;
|
||||
const struct glsl_struct_field *struct_field;
|
||||
ir_variable *variable;
|
||||
ir_rvalue *uniform_block;
|
||||
@@ -308,8 +307,11 @@ lower_ubo_reference_visitor::setup_for_load_or_store(void *mem_ctx,
|
||||
this->uniform_block = index;
|
||||
}
|
||||
|
||||
this->ubo_var = var->is_interface_instance()
|
||||
? &blocks[i]->Uniforms[0] : &blocks[i]->Uniforms[var->data.location];
|
||||
if (var->is_interface_instance()) {
|
||||
*const_offset = 0;
|
||||
} else {
|
||||
*const_offset = blocks[i]->Uniforms[var->data.location].Offset;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -317,8 +319,6 @@ lower_ubo_reference_visitor::setup_for_load_or_store(void *mem_ctx,
|
||||
|
||||
assert(this->uniform_block);
|
||||
|
||||
*const_offset = ubo_var->Offset;
|
||||
|
||||
this->struct_field = NULL;
|
||||
setup_buffer_access(mem_ctx, deref, offset, const_offset, row_major,
|
||||
matrix_columns, &this->struct_field, packing);
|
||||
|
Reference in New Issue
Block a user