Signed-off-by: Topi Pohjolainen <topi.pohjolai...@intel.com> --- src/compiler/glsl/lower_mediump.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+)
diff --git a/src/compiler/glsl/lower_mediump.cpp b/src/compiler/glsl/lower_mediump.cpp index 0276e74d6e..07f1f1ba9d 100644 --- a/src/compiler/glsl/lower_mediump.cpp +++ b/src/compiler/glsl/lower_mediump.cpp @@ -55,6 +55,30 @@ is_16_bit(const ir_rvalue *ir) return ir->type->get_scalar_type()->base_type == GLSL_TYPE_FLOAT16; } +static void +retype_x2f_x2f16(ir_rvalue *ir) +{ + if (ir->ir_type != ir_type_expression) + return; + + ir_expression *expr = (ir_expression *)ir; + switch (expr->operation) { + case ir_unop_i2f: + expr->operation = ir_unop_i2h; + break; + case ir_unop_b2f: + expr->operation = ir_unop_b2h; + break; + case ir_unop_u2f: + expr->operation = ir_unop_u2h; + break; + default: + return; + } + + ir->type = get_mediump(ir->type); +} + static bool refers_16_bit_float(const ir_rvalue *ir) { @@ -259,6 +283,8 @@ lower_mediump_visitor::visit_leave(ir_expression *ir) { ir_rvalue_visitor::visit_leave(ir); + retype_x2f_x2f16(ir); + bool has_32_bit_src = false; bool has_16_bit_src = false; for (unsigned i = 0; i < ir->num_operands; i++) { -- 2.11.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev