[Mesa-dev] [PATCH 46/59] i965/fs: handle fp64 opcodes in brw_do_channel_expressions

Samuel Iglesias Gonsálvez siglesias at igalia.com
Fri Apr 29 11:29:43 UTC 2016


From: Iago Toral Quiroga <itoral at igalia.com>

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.
---
 .../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 7ae7b2e..3d2e619 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.5.0



More information about the mesa-dev mailing list