Signed-off-by: Topi Pohjolainen <topi.pohjolai...@intel.com> --- src/compiler/glsl/lower_mediump.cpp | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/src/compiler/glsl/lower_mediump.cpp b/src/compiler/glsl/lower_mediump.cpp index 094ab4e743..45cf75b53c 100644 --- a/src/compiler/glsl/lower_mediump.cpp +++ b/src/compiler/glsl/lower_mediump.cpp @@ -92,6 +92,20 @@ refers_16_bit_float(const ir_rvalue *ir) } static bool +defers_input_varying(const ir_rvalue *ir) +{ + ir_variable *var = ir->variable_referenced(); + if (!var) + return false; + + if (var->data.mode != ir_var_shader_in) + return false; + + return var->data.precision == ast_precision_low || + var->data.precision == ast_precision_medium; +} + +static bool is_constant(const ir_rvalue *ir) { if (ir->ir_type == ir_type_constant) @@ -152,6 +166,13 @@ lower_mediump_visitor::can_be_lowered(const ir_variable *var) const if (!var->type->get_scalar_type()->is_float()) return false; + /* TODO: Intel compiler backend isn't prepared for interpolated 16-bit + * varyings. Input varyings are instead converted to 16-bits before + * use. + */ + if (var->data.mode == ir_var_shader_in) + return false; + return var->data.precision == ast_precision_low || var->data.precision == ast_precision_medium; } @@ -309,7 +330,8 @@ lower_mediump_visitor::visit_leave(ir_expression *ir) for (unsigned i = 0; i < ir->num_operands; i++) { if (is_16_bit(ir->operands[i])) has_16_bit_src = true; - else if (!is_constant(ir->operands[i])) + else if (!is_constant(ir->operands[i]) && + !defers_input_varying(ir->operands[i])) has_32_bit_src = true; } @@ -324,6 +346,8 @@ lower_mediump_visitor::visit_leave(ir_expression *ir) for (unsigned i = 0; i < ir->num_operands; i++) { if (is_constant(ir->operands[i])) retype_to_float16(ir->operands[i]); + else if (defers_input_varying(ir->operands[i])) + ir->operands[i] = convert(ir->operands[i], ir_unop_f2h); } retype_to_float16(&ir->type); -- 2.11.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev