[Mesa-dev] [PATCH 4/6] glsl: Convert uniform_block in lower_ubo_reference to ir_rvalue.
Chris Forbes
chrisf at ijw.co.nz
Sat Jul 12 18:51:59 PDT 2014
Previously this was a block index with special semantics for -1.
With ARB_gpu_shader5, this need not be a compile-time constant, so
allow any rvalue here and convert the -1 to a NULL pointer.
Signed-off-by: Chris Forbes <chrisf at ijw.co.nz>
---
src/glsl/lower_ubo_reference.cpp | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/src/glsl/lower_ubo_reference.cpp b/src/glsl/lower_ubo_reference.cpp
index 85e9c7d..c49ae34 100644
--- a/src/glsl/lower_ubo_reference.cpp
+++ b/src/glsl/lower_ubo_reference.cpp
@@ -57,7 +57,7 @@ public:
void *mem_ctx;
struct gl_shader *shader;
struct gl_uniform_buffer_variable *ubo_var;
- unsigned uniform_block;
+ ir_rvalue *uniform_block;
bool progress;
};
@@ -145,10 +145,10 @@ lower_ubo_reference_visitor::handle_rvalue(ir_rvalue **rvalue)
interface_field_name(mem_ctx, (char *) var->get_interface_type()->name,
deref);
- this->uniform_block = -1;
+ this->uniform_block = NULL;
for (unsigned i = 0; i < shader->NumUniformBlocks; i++) {
if (strcmp(field_name, shader->UniformBlocks[i].Name) == 0) {
- this->uniform_block = i;
+ this->uniform_block = new(mem_ctx) ir_constant(i);
struct gl_uniform_block *block = &shader->UniformBlocks[i];
@@ -159,7 +159,7 @@ lower_ubo_reference_visitor::handle_rvalue(ir_rvalue **rvalue)
}
}
- assert(this->uniform_block != (unsigned) -1);
+ assert(this->uniform_block);
ir_rvalue *offset = new(mem_ctx) ir_constant(0u);
unsigned const_offset = 0;
@@ -277,11 +277,12 @@ ir_expression *
lower_ubo_reference_visitor::ubo_load(const glsl_type *type,
ir_rvalue *offset)
{
+ ir_rvalue * block_ref = this->uniform_block->clone(mem_ctx, NULL);
return new(mem_ctx)
ir_expression(ir_binop_ubo_load,
- type,
- new(mem_ctx) ir_constant(this->uniform_block),
- offset);
+ type,
+ block_ref,
+ offset);
}
--
2.0.1
More information about the mesa-dev
mailing list