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;
unsigned num_blocks;
struct gl_uniform_block **blocks;
if (this->buffer_access_type != ubo_load_access) {
- num_blocks = shader->NumShaderStorageBlocks;
- blocks = shader->ShaderStorageBlocks;
+ num_blocks = shader->Program->info.num_ssbos;
+ blocks = shader->Program->sh.ShaderStorageBlocks;
} else {
- num_blocks = shader->NumUniformBlocks;
- blocks = shader->UniformBlocks;
+ num_blocks = shader->Program->info.num_ubos;
+ blocks = shader->Program->sh.UniformBlocks;
}
this->uniform_block = NULL;
for (unsigned i = 0; i < num_blocks; i++) {
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;
}
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);
ir_function_signature(glsl_type::void_type, shader_storage_buffer_object);
assert(sig);
sig->replace_parameters(&sig_params);
- sig->_is_intrinsic = true;
sig->intrinsic_id = ir_intrinsic_ssbo_store;
ir_function *f = new(mem_ctx) ir_function("__intrinsic_store_ssbo");
new(mem_ctx) ir_function_signature(type, shader_storage_buffer_object);
assert(sig);
sig->replace_parameters(&sig_params);
- sig->_is_intrinsic = true;
sig->intrinsic_id = ir_intrinsic_ssbo_load;
ir_function *f = new(mem_ctx) ir_function("__intrinsic_load_ssbo");
shader_storage_buffer_object);
assert(sig);
sig->replace_parameters(&sig_params);
- sig->_is_intrinsic = true;
assert(ir->callee->intrinsic_id >= ir_intrinsic_generic_load);
assert(ir->callee->intrinsic_id <= ir_intrinsic_generic_atomic_comp_swap);