[Mesa-dev] [PATCH 46/65] glsl: use reproducible name for lowered const arrays
Timothy Arceri
timothy.arceri at collabora.com
Fri Apr 29 13:33:45 UTC 2016
Otherwise we can end up with mismatching names between the cached
binary and the cached metadata.
---
src/compiler/glsl/ir_optimization.h | 2 +-
src/compiler/glsl/linker.cpp | 2 +-
src/compiler/glsl/lower_const_arrays_to_uniforms.cpp | 16 ++++++++++++----
3 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/src/compiler/glsl/ir_optimization.h b/src/compiler/glsl/ir_optimization.h
index f9599a3..3313128 100644
--- a/src/compiler/glsl/ir_optimization.h
+++ b/src/compiler/glsl/ir_optimization.h
@@ -116,7 +116,7 @@ bool lower_variable_index_to_cond_assign(gl_shader_stage stage,
exec_list *instructions, bool lower_input, bool lower_output,
bool lower_temp, bool lower_uniform);
bool lower_quadop_vector(exec_list *instructions, bool dont_lower_swz);
-bool lower_const_arrays_to_uniforms(exec_list *instructions);
+bool lower_const_arrays_to_uniforms(exec_list *instructions, unsigned stage);
bool lower_clip_distance(gl_shader *shader);
void lower_output_reads(unsigned stage, exec_list *instructions);
bool lower_packing_builtins(exec_list *instructions, int op_mask);
diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
index 979dbb5..c493de2 100644
--- a/src/compiler/glsl/linker.cpp
+++ b/src/compiler/glsl/linker.cpp
@@ -4601,7 +4601,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog,
ctx->Const.NativeIntegers))
;
- lower_const_arrays_to_uniforms(prog->_LinkedShaders[i]->ir);
+ lower_const_arrays_to_uniforms(prog->_LinkedShaders[i]->ir, i);
}
/* Validation for special cases where we allow sampler array indexing
diff --git a/src/compiler/glsl/lower_const_arrays_to_uniforms.cpp b/src/compiler/glsl/lower_const_arrays_to_uniforms.cpp
index 2d024d4..bd374e2 100644
--- a/src/compiler/glsl/lower_const_arrays_to_uniforms.cpp
+++ b/src/compiler/glsl/lower_const_arrays_to_uniforms.cpp
@@ -45,9 +45,11 @@
namespace {
class lower_const_array_visitor : public ir_rvalue_visitor {
public:
- lower_const_array_visitor(exec_list *insts)
+ lower_const_array_visitor(exec_list *insts, unsigned s)
{
instructions = insts;
+ stage = s;
+ const_count = 0;
progress = false;
}
@@ -61,6 +63,8 @@ public:
private:
exec_list *instructions;
+ unsigned stage;
+ unsigned const_count;
bool progress;
};
@@ -80,7 +84,11 @@ lower_const_array_visitor::handle_rvalue(ir_rvalue **rvalue)
void *mem_ctx = ralloc_parent(con);
- char *uniform_name = ralloc_asprintf(mem_ctx, "constarray__%p", dra);
+ char *uniform_name = ralloc_asprintf(mem_ctx, "constarray_%x_%u",
+ const_count, stage);
+ unsigned limit = ~0;
+ assert(const_count != limit);
+ const_count++;
ir_variable *uni =
new(mem_ctx) ir_variable(con->type, uniform_name, ir_var_uniform);
@@ -102,8 +110,8 @@ lower_const_array_visitor::handle_rvalue(ir_rvalue **rvalue)
} /* anonymous namespace */
bool
-lower_const_arrays_to_uniforms(exec_list *instructions)
+lower_const_arrays_to_uniforms(exec_list *instructions, unsigned stage)
{
- lower_const_array_visitor v(instructions);
+ lower_const_array_visitor v(instructions, stage);
return v.run();
}
--
2.5.5
More information about the mesa-dev
mailing list