From 9e5ce151a4708da60f9e5962cdefa5447a4dee04 Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Wed, 27 Jan 2016 12:48:38 +0100 Subject: [PATCH] i965/fs: handle fp64 opcodes in brw_do_channel_expressions In the case of the pack opcode we are already doing the lowering in NIR, so no need to do it here. The unpack opcode operates on scalars, so it should not be lowered. In the case of frexp_sig and frexp_exp, they are lowered in lower_instructions, so we don't have to care about them. All the remaining opcodes involve conversions from and to doubles and are business as usual. Reviewed-by: Kenneth Graunke --- .../dri/i965/brw_fs_channel_expressions.cpp | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_fs_channel_expressions.cpp b/src/mesa/drivers/dri/i965/brw_fs_channel_expressions.cpp index 7ae7b2ecdf6..3d2e61963d8 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_channel_expressions.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_channel_expressions.cpp @@ -85,6 +85,7 @@ channel_expressions_predicate(ir_instruction *ir) case ir_unop_interpolate_at_centroid: case ir_binop_interpolate_at_offset: case ir_binop_interpolate_at_sample: + case ir_unop_pack_double_2x32: return false; default: break; @@ -177,6 +178,8 @@ ir_channel_expressions_visitor::visit_leave(ir_assignment *ir) case ir_unop_interpolate_at_centroid: case ir_binop_interpolate_at_offset: case ir_binop_interpolate_at_sample: + /* We scalarize these in NIR, so no need to do it here */ + case ir_unop_pack_double_2x32: return visit_continue; default: @@ -235,6 +238,13 @@ ir_channel_expressions_visitor::visit_leave(ir_assignment *ir) case ir_unop_i2b: case ir_unop_b2i: case ir_unop_u2f: + case ir_unop_d2f: + case ir_unop_f2d: + case ir_unop_d2i: + case ir_unop_i2d: + case ir_unop_d2u: + case ir_unop_u2d: + case ir_unop_d2b: case ir_unop_trunc: case ir_unop_ceil: case ir_unop_floor: @@ -414,20 +424,15 @@ ir_channel_expressions_visitor::visit_leave(ir_assignment *ir) case ir_unop_interpolate_at_centroid: case ir_binop_interpolate_at_offset: case ir_binop_interpolate_at_sample: + case ir_unop_unpack_double_2x32: unreachable("not reached: expression operates on scalars only"); case ir_unop_pack_double_2x32: - case ir_unop_unpack_double_2x32: + unreachable("not reached: to be lowered in NIR, should've been skipped"); + case ir_unop_frexp_sig: case ir_unop_frexp_exp: - case ir_unop_d2f: - case ir_unop_f2d: - case ir_unop_d2i: - case ir_unop_i2d: - case ir_unop_d2u: - case ir_unop_u2d: - case ir_unop_d2b: - unreachable("no fp64 support yet"); + unreachable("should have been lowered by lower_instructions"); } ir->remove(); -- 2.30.2