[Mesa-dev] [PATCH 46/51] glsl: Lower float conversions to mediump
Topi Pohjolainen
topi.pohjolainen at gmail.com
Fri Nov 24 12:27:13 UTC 2017
Signed-off-by: Topi Pohjolainen <topi.pohjolainen at 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
More information about the mesa-dev
mailing list