Module: Mesa Branch: master Commit: 01e008563753671c9076867c355d723932bc1b27 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=01e008563753671c9076867c355d723932bc1b27
Author: Marek Olšák <[email protected]> Date: Thu Jul 23 18:41:28 2020 -0400 glsl: don't create conversion opcodes for array types Instead, convert all elements one by one. This fixes piglit shaders@glsl-bug-110796. Reviewed-by: Rob Clark <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6073> --- src/compiler/glsl/lower_precision.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/compiler/glsl/lower_precision.cpp b/src/compiler/glsl/lower_precision.cpp index 97a91f8c440..f602c78878f 100644 --- a/src/compiler/glsl/lower_precision.cpp +++ b/src/compiler/glsl/lower_precision.cpp @@ -690,7 +690,7 @@ convert_precision(bool up, ir_rvalue *ir) unsigned op; if (up) { - switch (ir->type->without_array()->base_type) { + switch (ir->type->base_type) { case GLSL_TYPE_FLOAT16: op = ir_unop_f162f; break; @@ -705,7 +705,7 @@ convert_precision(bool up, ir_rvalue *ir) return NULL; } } else { - switch (ir->type->without_array()->base_type) { + switch (ir->type->base_type) { case GLSL_TYPE_FLOAT: op = ir_unop_f2fmp; break; @@ -1255,10 +1255,20 @@ void lower_variables_visitor::handle_rvalue(ir_rvalue **rvalue) if (var && _mesa_set_search(lower_vars, var) && deref->type->without_array()->is_32bit()) { + void *mem_ctx = ralloc_parent(ir); + + /* Create a 32-bit temporary variable. */ + ir_variable *new_var = + new(mem_ctx) ir_variable(deref->type, "lowerp", ir_var_temporary); + base_ir->insert_before(new_var); + + /* Fix types in dereferences. */ fix_types_in_deref_chain(deref); - /* Then convert the type up. Optimizations should eliminate this. */ - *rvalue = convert_precision(true, deref); + /* Convert to 32 bits for the rvalue. */ + convert_split_assignment(new(mem_ctx) ir_dereference_variable(new_var), + deref, true); + *rvalue = new(mem_ctx) ir_dereference_variable(new_var); } } } _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
