i965: Move is_math/is_tex/is_control_flow() to backend_instruction.
authorKenneth Graunke <kenneth@whitecape.org>
Sun, 28 Apr 2013 08:35:57 +0000 (01:35 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 29 Apr 2013 18:10:50 +0000 (11:10 -0700)
These are entirely based on the opcode, which is available in
backend_instruction.  It makes sense to only implement them in one
place.

This changes the VS implementation of is_tex() slightly, which now
accepts FS_OPCODE_TXB and SHADER_OPCODE_LOD.  However, since those
aren't generated in the VS anyway, it should be fine.

This also makes is_control_flow() available in the VS.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/drivers/dri/i965/brw_fs.cpp
src/mesa/drivers/dri/i965/brw_fs.h
src/mesa/drivers/dri/i965/brw_shader.cpp
src/mesa/drivers/dri/i965/brw_shader.h
src/mesa/drivers/dri/i965/brw_vec4.cpp
src/mesa/drivers/dri/i965/brw_vec4.h

index 1d810d82c1e66439661e57b5405cdbab21e2d838..b45035e80f038cc9e85da1844a72f7fc531e7545 100644 (file)
@@ -339,51 +339,6 @@ fs_inst::overwrites_reg(const fs_reg &reg)
            reg.reg_offset < dst.reg_offset + regs_written);
 }
 
-bool
-fs_inst::is_tex()
-{
-   return (opcode == SHADER_OPCODE_TEX ||
-           opcode == FS_OPCODE_TXB ||
-           opcode == SHADER_OPCODE_TXD ||
-           opcode == SHADER_OPCODE_TXF ||
-           opcode == SHADER_OPCODE_TXF_MS ||
-           opcode == SHADER_OPCODE_TXL ||
-           opcode == SHADER_OPCODE_TXS ||
-           opcode == SHADER_OPCODE_LOD);
-}
-
-bool
-fs_inst::is_math()
-{
-   return (opcode == SHADER_OPCODE_RCP ||
-           opcode == SHADER_OPCODE_RSQ ||
-           opcode == SHADER_OPCODE_SQRT ||
-           opcode == SHADER_OPCODE_EXP2 ||
-           opcode == SHADER_OPCODE_LOG2 ||
-           opcode == SHADER_OPCODE_SIN ||
-           opcode == SHADER_OPCODE_COS ||
-           opcode == SHADER_OPCODE_INT_QUOTIENT ||
-           opcode == SHADER_OPCODE_INT_REMAINDER ||
-           opcode == SHADER_OPCODE_POW);
-}
-
-bool
-fs_inst::is_control_flow()
-{
-   switch (opcode) {
-   case BRW_OPCODE_DO:
-   case BRW_OPCODE_WHILE:
-   case BRW_OPCODE_IF:
-   case BRW_OPCODE_ELSE:
-   case BRW_OPCODE_ENDIF:
-   case BRW_OPCODE_BREAK:
-   case BRW_OPCODE_CONTINUE:
-      return true;
-   default:
-      return false;
-   }
-}
-
 bool
 fs_inst::is_send_from_grf()
 {
index 86a9ec590a4151b3170c4a8a69c899e9fe662958..efe90f4ae0114b619e3812908f11afe9f0cd9879 100644 (file)
@@ -175,9 +175,6 @@ public:
 
    bool equals(fs_inst *inst);
    bool overwrites_reg(const fs_reg &reg);
-   bool is_tex();
-   bool is_math();
-   bool is_control_flow();
    bool is_send_from_grf();
    bool is_partial_write();
 
index 5addff673181132ac0a8939a21d2d34b03b3f098..a8209527d53e26fc9b93b822e61442f66a23c5fb 100644 (file)
@@ -508,3 +508,48 @@ brw_instruction_name(enum opcode op)
       return fallback;
    }
 }
+
+bool
+backend_instruction::is_tex()
+{
+   return (opcode == SHADER_OPCODE_TEX ||
+           opcode == FS_OPCODE_TXB ||
+           opcode == SHADER_OPCODE_TXD ||
+           opcode == SHADER_OPCODE_TXF ||
+           opcode == SHADER_OPCODE_TXF_MS ||
+           opcode == SHADER_OPCODE_TXL ||
+           opcode == SHADER_OPCODE_TXS ||
+           opcode == SHADER_OPCODE_LOD);
+}
+
+bool
+backend_instruction::is_math()
+{
+   return (opcode == SHADER_OPCODE_RCP ||
+           opcode == SHADER_OPCODE_RSQ ||
+           opcode == SHADER_OPCODE_SQRT ||
+           opcode == SHADER_OPCODE_EXP2 ||
+           opcode == SHADER_OPCODE_LOG2 ||
+           opcode == SHADER_OPCODE_SIN ||
+           opcode == SHADER_OPCODE_COS ||
+           opcode == SHADER_OPCODE_INT_QUOTIENT ||
+           opcode == SHADER_OPCODE_INT_REMAINDER ||
+           opcode == SHADER_OPCODE_POW);
+}
+
+bool
+backend_instruction::is_control_flow()
+{
+   switch (opcode) {
+   case BRW_OPCODE_DO:
+   case BRW_OPCODE_WHILE:
+   case BRW_OPCODE_IF:
+   case BRW_OPCODE_ELSE:
+   case BRW_OPCODE_ENDIF:
+   case BRW_OPCODE_BREAK:
+   case BRW_OPCODE_CONTINUE:
+      return true;
+   default:
+      return false;
+   }
+}
index a29618f734390e9b79d379ea5f208b2e93f4acac..5189fdcb07e6716c25302dae259ddeebea072e29 100644 (file)
 
 class backend_instruction : public exec_node {
 public:
+   bool is_tex();
+   bool is_math();
+   bool is_control_flow();
+
    enum opcode opcode; /* BRW_OPCODE_* or FS_OPCODE_* */
 
    uint32_t predicate;
index 0afff6f72c53e0f1c30b5eddeb1390cc9d84a8c5..ab4668f425fd6775284f58681ddb53a86bc1ebff 100644 (file)
@@ -141,17 +141,6 @@ src_reg::src_reg(dst_reg reg)
                                 swizzles[2], swizzles[3]);
 }
 
-bool
-vec4_instruction::is_tex()
-{
-   return (opcode == SHADER_OPCODE_TEX ||
-          opcode == SHADER_OPCODE_TXD ||
-          opcode == SHADER_OPCODE_TXF ||
-          opcode == SHADER_OPCODE_TXF_MS ||
-          opcode == SHADER_OPCODE_TXL ||
-          opcode == SHADER_OPCODE_TXS);
-}
-
 void
 dst_reg::init()
 {
@@ -212,21 +201,6 @@ dst_reg::dst_reg(src_reg reg)
    this->fixed_hw_reg = reg.fixed_hw_reg;
 }
 
-bool
-vec4_instruction::is_math()
-{
-   return (opcode == SHADER_OPCODE_RCP ||
-          opcode == SHADER_OPCODE_RSQ ||
-          opcode == SHADER_OPCODE_SQRT ||
-          opcode == SHADER_OPCODE_EXP2 ||
-          opcode == SHADER_OPCODE_LOG2 ||
-          opcode == SHADER_OPCODE_SIN ||
-          opcode == SHADER_OPCODE_COS ||
-          opcode == SHADER_OPCODE_INT_QUOTIENT ||
-          opcode == SHADER_OPCODE_INT_REMAINDER ||
-          opcode == SHADER_OPCODE_POW);
-}
-
 bool
 vec4_instruction::is_send_from_grf()
 {
index d34ed35ebc68008e0bb93b9043365cfc6120b8f9..a4fca2d732aee81e31161536f43a5977ec0360cc 100644 (file)
@@ -193,8 +193,6 @@ public:
    const void *ir;
    const char *annotation;
 
-   bool is_tex();
-   bool is_math();
    bool is_send_from_grf();
    bool can_reswizzle_dst(int dst_writemask, int swizzle, int swizzle_mask);
    void reswizzle_dst(int dst_writemask, int swizzle);