Patch adds a counter around the lowering pass so that arrays from different stages cannot end up having same name for uniform.
Signed-off-by: Tapani Pälli <tapani.pa...@intel.com> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89590 Cc: 10.5 10.4 <mesa-sta...@lists.freedesktop.org> --- src/glsl/ir_optimization.h | 2 +- src/glsl/linker.cpp | 5 +++-- src/glsl/lower_const_arrays_to_uniforms.cpp | 13 +++++++------ 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/glsl/ir_optimization.h b/src/glsl/ir_optimization.h index e6939f3..261d2fb 100644 --- a/src/glsl/ir_optimization.h +++ b/src/glsl/ir_optimization.h @@ -117,7 +117,7 @@ bool lower_noise(exec_list *instructions); bool lower_variable_index_to_cond_assign(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 *amount); bool lower_clip_distance(gl_shader *shader); void lower_output_reads(exec_list *instructions); bool lower_packing_builtins(exec_list *instructions, int op_mask); diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp index 0c44677..a688baa 100644 --- a/src/glsl/linker.cpp +++ b/src/glsl/linker.cpp @@ -2693,7 +2693,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) * uniforms, and varyings. Later optimization could possibly make * some of that unused. */ - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { + for (unsigned i = 0, arrays = 0; i < MESA_SHADER_STAGES; i++) { if (prog->_LinkedShaders[i] == NULL) continue; @@ -2710,7 +2710,8 @@ 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, + &arrays); } /* Check and validate stream emissions in geometry shaders */ diff --git a/src/glsl/lower_const_arrays_to_uniforms.cpp b/src/glsl/lower_const_arrays_to_uniforms.cpp index 2243f47..49c1f31 100644 --- a/src/glsl/lower_const_arrays_to_uniforms.cpp +++ b/src/glsl/lower_const_arrays_to_uniforms.cpp @@ -45,11 +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 *amount) { instructions = insts; progress = false; - index = 0; + array_amount = amount; } bool run() @@ -63,7 +63,7 @@ public: private: exec_list *instructions; bool progress; - unsigned index; + unsigned *array_amount; }; void @@ -82,7 +82,8 @@ lower_const_array_visitor::handle_rvalue(ir_rvalue **rvalue) void *mem_ctx = ralloc_parent(con); - char *uniform_name = ralloc_asprintf(mem_ctx, "constarray__%d", index++); + char *uniform_name = ralloc_asprintf(mem_ctx, "constarray__%d", + (*array_amount)++); ir_variable *uni = new(mem_ctx) ir_variable(con->type, uniform_name, ir_var_uniform); @@ -104,8 +105,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 *amount) { - lower_const_array_visitor v(instructions); + lower_const_array_visitor v(instructions, amount); return v.run(); } -- 2.1.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev