glsl: don't lower builtins to mediump that don't allow it

Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5746>
This commit is contained in:
Marek Olšák
2020-06-30 20:24:44 -04:00
parent 69f7a3dac6
commit 3781697c23
4 changed files with 334 additions and 15 deletions
+14 -14
View File
@@ -388,20 +388,20 @@ ir_validate::visit_leave(ir_expression *ir)
assert(ir->type->is_int_16_32());
break;
case ir_unop_bitcast_i2f:
assert(ir->operands[0]->type->is_int_16_32());
assert(ir->type->is_float_16_32());
assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT);
assert(ir->type->base_type == GLSL_TYPE_FLOAT);
break;
case ir_unop_bitcast_f2i:
assert(ir->operands[0]->type->is_float_16_32());
assert(ir->type->is_int_16_32());
assert(ir->operands[0]->type->base_type == GLSL_TYPE_FLOAT);
assert(ir->type->base_type == GLSL_TYPE_INT);
break;
case ir_unop_bitcast_u2f:
assert(ir->operands[0]->type->is_uint_16_32());
assert(ir->type->is_float_16_32());
assert(ir->operands[0]->type->base_type == GLSL_TYPE_UINT);
assert(ir->type->base_type == GLSL_TYPE_FLOAT);
break;
case ir_unop_bitcast_f2u:
assert(ir->operands[0]->type->is_float_16_32());
assert(ir->type->is_uint_16_32());
assert(ir->operands[0]->type->base_type == GLSL_TYPE_FLOAT);
assert(ir->type->base_type == GLSL_TYPE_UINT);
break;
case ir_unop_bitcast_u642d:
@@ -598,7 +598,7 @@ ir_validate::visit_leave(ir_expression *ir)
case ir_unop_bitfield_reverse:
assert(ir->operands[0]->type == ir->type);
assert(ir->type->is_integer_16_32());
assert(ir->type->is_integer_32());
break;
case ir_unop_bit_count:
@@ -687,12 +687,12 @@ ir_validate::visit_leave(ir_expression *ir)
break;
case ir_unop_frexp_sig:
assert(ir->operands[0]->type->is_float_16_32_64());
assert(ir->operands[0]->type->is_float_32_64());
assert(ir->type->is_double());
break;
case ir_unop_frexp_exp:
assert(ir->operands[0]->type->is_float_16_32_64());
assert(ir->type->is_int_16_32());
assert(ir->operands[0]->type->is_float_32_64());
assert(ir->type->base_type == GLSL_TYPE_INT);
break;
case ir_unop_subroutine_to_int:
assert(ir->operands[0]->type->base_type == GLSL_TYPE_SUBROUTINE);
@@ -847,8 +847,8 @@ ir_validate::visit_leave(ir_expression *ir)
case ir_binop_ldexp:
assert(ir->operands[0]->type == ir->type);
assert(ir->operands[0]->type->is_float_16_32_64());
assert(ir->operands[1]->type->is_int_16_32());
assert(ir->operands[0]->type->is_float_32_64());
assert(ir->operands[1]->type->base_type == GLSL_TYPE_INT);
assert(ir->operands[0]->type->components() ==
ir->operands[1]->type->components());
break;