glsl: Generate unique names for each const array lowered to uniforms Uniform names (even for hidden uniforms) are required to be unique; some parts of the compiler assume they can be looked up by name. Fixes the piglit test: tests/spec/glsl-1.20/linker/array-initializers-1 Signed-off-by: Chris Forbes <chrisf@ijw.co.nz> Cc: "10.4" <mesa-stable@lists.freedesktop.org> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
diff --git a/src/glsl/lower_const_arrays_to_uniforms.cpp b/src/glsl/lower_const_arrays_to_uniforms.cpp index b3c0ee2..700e903 100644 --- a/src/glsl/lower_const_arrays_to_uniforms.cpp +++ b/src/glsl/lower_const_arrays_to_uniforms.cpp
@@ -49,6 +49,7 @@ { instructions = insts; progress = false; + index = 0; } bool run() @@ -62,6 +63,7 @@ private: exec_list *instructions; bool progress; + unsigned index; }; void @@ -76,8 +78,10 @@ void *mem_ctx = ralloc_parent(con); + char *uniform_name = ralloc_asprintf(mem_ctx, "constarray__%d", index++); + ir_variable *uni = - new(mem_ctx) ir_variable(con->type, "constarray", ir_var_uniform); + new(mem_ctx) ir_variable(con->type, uniform_name, ir_var_uniform); uni->constant_initializer = con; uni->constant_value = con; uni->data.has_initializer = true;