From 2b39bb4fc05638c6c250e9b79c5c8dcf7361229c Mon Sep 17 00:00:00 2001 From: Neil Roberts Date: Thu, 16 May 2019 17:01:06 +0200 Subject: [PATCH] glsl/validate: Allow float16 in the expression tree MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit v2. [Hyunjun Ko (zzoon@igalia.com)] squashed 3 commits into one commit. Reviewed-by: Marek Olšák Reviewed-by: Alyssa Rosenzweig Part-of: --- src/compiler/glsl/ir_validate.cpp | 45 +++++++++++++------------------ 1 file changed, 18 insertions(+), 27 deletions(-) diff --git a/src/compiler/glsl/ir_validate.cpp b/src/compiler/glsl/ir_validate.cpp index 4c4948c30ca..0024fd764d1 100644 --- a/src/compiler/glsl/ir_validate.cpp +++ b/src/compiler/glsl/ir_validate.cpp @@ -260,8 +260,7 @@ ir_validate::visit_leave(ir_expression *ir) case ir_unop_abs: case ir_unop_sign: assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT || - ir->operands[0]->type->is_float() || - ir->operands[0]->type->is_double() || + ir->operands[0]->type->is_float_16_32_64() || ir->operands[0]->type->base_type == GLSL_TYPE_INT64); assert(ir->type == ir->operands[0]->type); break; @@ -269,8 +268,7 @@ ir_validate::visit_leave(ir_expression *ir) case ir_unop_rcp: case ir_unop_rsq: case ir_unop_sqrt: - assert(ir->type->is_float() || - ir->type->is_double()); + assert(ir->type->is_float_16_32_64()); assert(ir->type == ir->operands[0]->type); break; @@ -279,7 +277,7 @@ ir_validate::visit_leave(ir_expression *ir) case ir_unop_exp2: case ir_unop_log2: case ir_unop_saturate: - assert(ir->operands[0]->type->is_float()); + assert(ir->operands[0]->type->is_float_16_32()); assert(ir->type == ir->operands[0]->type); break; @@ -450,8 +448,7 @@ ir_validate::visit_leave(ir_expression *ir) case ir_unop_ceil: case ir_unop_floor: case ir_unop_fract: - assert(ir->operands[0]->type->is_float() || - ir->operands[0]->type->is_double()); + assert(ir->operands[0]->type->is_float_16_32_64()); assert(ir->operands[0]->type == ir->type); break; case ir_unop_sin: @@ -462,7 +459,7 @@ ir_validate::visit_leave(ir_expression *ir) case ir_unop_dFdy: case ir_unop_dFdy_coarse: case ir_unop_dFdy_fine: - assert(ir->operands[0]->type->is_float()); + assert(ir->operands[0]->type->is_float_16_32()); assert(ir->operands[0]->type == ir->type); break; @@ -566,7 +563,7 @@ ir_validate::visit_leave(ir_expression *ir) case ir_unop_interpolate_at_centroid: assert(ir->operands[0]->type == ir->type); - assert(ir->operands[0]->type->is_float()); + assert(ir->operands[0]->type->is_float_16_32()); break; case ir_unop_get_buffer_size: @@ -619,13 +616,11 @@ ir_validate::visit_leave(ir_expression *ir) break; case ir_unop_frexp_sig: - assert(ir->operands[0]->type->is_float() || - ir->operands[0]->type->is_double()); + assert(ir->operands[0]->type->is_float_16_32_64()); assert(ir->type->is_double()); break; case ir_unop_frexp_exp: - assert(ir->operands[0]->type->is_float() || - ir->operands[0]->type->is_double()); + assert(ir->operands[0]->type->is_float_16_32_64()); assert(ir->type->base_type == GLSL_TYPE_INT); break; case ir_unop_subroutine_to_int: @@ -634,8 +629,7 @@ ir_validate::visit_leave(ir_expression *ir) break; case ir_unop_atan: - assert(ir->operands[0]->type->is_float() || - ir->operands[0]->type->is_double()); + assert(ir->operands[0]->type->is_float_16_32_64()); assert(ir->type == ir->operands[0]->type); break; @@ -768,9 +762,9 @@ ir_validate::visit_leave(ir_expression *ir) case ir_binop_dot: assert(ir->type == glsl_type::float_type || - ir->type == glsl_type::double_type); - assert(ir->operands[0]->type->is_float() || - ir->operands[0]->type->is_double()); + ir->type == glsl_type::double_type || + ir->type == glsl_type::float16_t_type); + assert(ir->operands[0]->type->is_float_16_32_64()); assert(ir->operands[0]->type->is_vector()); assert(ir->operands[0]->type == ir->operands[1]->type); break; @@ -783,8 +777,7 @@ 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() || - ir->operands[0]->type->is_double()); + assert(ir->operands[0]->type->is_float_16_32_64()); assert(ir->operands[1]->type->base_type == GLSL_TYPE_INT); assert(ir->operands[0]->type->components() == ir->operands[1]->type->components()); @@ -810,27 +803,25 @@ ir_validate::visit_leave(ir_expression *ir) break; case ir_binop_atan2: - assert(ir->operands[0]->type->is_float() || - ir->operands[0]->type->is_double()); + assert(ir->operands[0]->type->is_float_16_32_64()); assert(ir->operands[1]->type == ir->operands[0]->type); assert(ir->type == ir->operands[0]->type); break; case ir_triop_fma: - assert(ir->type->is_float() || - ir->type->is_double()); + assert(ir->type->is_float_16_32_64()); assert(ir->type == ir->operands[0]->type); assert(ir->type == ir->operands[1]->type); assert(ir->type == ir->operands[2]->type); break; case ir_triop_lrp: - assert(ir->operands[0]->type->is_float() || - ir->operands[0]->type->is_double()); + assert(ir->operands[0]->type->is_float_16_32_64()); assert(ir->operands[0]->type == ir->operands[1]->type); assert(ir->operands[2]->type == ir->operands[0]->type || ir->operands[2]->type == glsl_type::float_type || - ir->operands[2]->type == glsl_type::double_type); + ir->operands[2]->type == glsl_type::double_type || + ir->operands[2]->type == glsl_type::float16_t_type); break; case ir_triop_csel: -- 2.30.2