[PATCH vkd3d 2/4] libs/vkd3d-shader: Factor out shader_dump_instruction_flags().

Józef Kucia joseph.kucia at gmail.com
Tue Jun 5 06:52:57 CDT 2018


From: Józef Kucia <jkucia at codeweavers.com>

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
 libs/vkd3d-shader/trace.c                | 126 ++++++++++++++++---------------
 libs/vkd3d-shader/vkd3d_shader_private.h |  12 +--
 2 files changed, 73 insertions(+), 65 deletions(-)

diff --git a/libs/vkd3d-shader/trace.c b/libs/vkd3d-shader/trace.c
index ce8db46b6f21..f987e3caa877 100644
--- a/libs/vkd3d-shader/trace.c
+++ b/libs/vkd3d-shader/trace.c
@@ -1274,6 +1274,72 @@ static void shader_dump_version(struct vkd3d_string_buffer *buffer,
     shader_addline(buffer, "%s_%u_%u\n", prefix, shader_version->major, shader_version->minor);
 }
 
+static void shader_dump_instruction_flags(struct vkd3d_string_buffer *buffer,
+        const struct vkd3d_shader_instruction *ins, const struct vkd3d_shader_version *shader_version)
+{
+    switch (ins->handler_idx)
+    {
+        case VKD3DSIH_BREAKP:
+        case VKD3DSIH_CONTINUEP:
+        case VKD3DSIH_IF:
+        case VKD3DSIH_RETP:
+        case VKD3DSIH_TEXKILL:
+            switch (ins->flags)
+            {
+                case VKD3D_SHADER_CONDITIONAL_OP_NZ: shader_addline(buffer, "_nz"); break;
+                case VKD3D_SHADER_CONDITIONAL_OP_Z:  shader_addline(buffer, "_z"); break;
+                default: shader_addline(buffer, "_unrecognized(%#x)", ins->flags); break;
+            }
+            break;
+
+        case VKD3DSIH_IFC:
+        case VKD3DSIH_BREAKC:
+            switch (ins->flags)
+            {
+                case VKD3D_SHADER_REL_OP_GT: shader_addline(buffer, "_gt"); break;
+                case VKD3D_SHADER_REL_OP_EQ: shader_addline(buffer, "_eq"); break;
+                case VKD3D_SHADER_REL_OP_GE: shader_addline(buffer, "_ge"); break;
+                case VKD3D_SHADER_REL_OP_LT: shader_addline(buffer, "_lt"); break;
+                case VKD3D_SHADER_REL_OP_NE: shader_addline(buffer, "_ne"); break;
+                case VKD3D_SHADER_REL_OP_LE: shader_addline(buffer, "_le"); break;
+                default: shader_addline(buffer, "_(%u)", ins->flags);
+            }
+            break;
+
+        case VKD3DSIH_RESINFO:
+            switch (ins->flags)
+            {
+                case VKD3DSI_NONE: break;
+                case VKD3DSI_RESINFO_RCP_FLOAT: shader_addline(buffer, "_rcpFloat"); break;
+                case VKD3DSI_RESINFO_UINT: shader_addline(buffer, "_uint"); break;
+                default: shader_addline(buffer, "_unrecognized(%#x)", ins->flags);
+            }
+            break;
+
+        case VKD3DSIH_SAMPLE_INFO:
+            switch (ins->flags)
+            {
+                case VKD3DSI_NONE: break;
+                case VKD3DSI_SAMPLE_INFO_UINT: shader_addline(buffer, "_uint"); break;
+                default: shader_addline(buffer, "_unrecognized(%#x)", ins->flags);
+            }
+            break;
+
+        case VKD3DSIH_SYNC:
+            shader_dump_sync_flags(buffer, ins->flags);
+            break;
+
+        case VKD3DSIH_TEX:
+            if (shader_version->major >= 2 && (ins->flags & VKD3DSI_TEXLD_PROJECT))
+                shader_addline(buffer, "p");
+            break;
+
+        default:
+            shader_dump_precise_flags(buffer, ins->flags);
+            break;
+    }
+}
+
 void vkd3d_shader_trace(void *data)
 {
     struct vkd3d_shader_version shader_version;
@@ -1518,65 +1584,7 @@ void vkd3d_shader_trace(void *data)
 
             shader_addline(&buffer, "%s", shader_opcode_names[ins.handler_idx]);
 
-            if (ins.handler_idx == VKD3DSIH_BREAKP
-                    || ins.handler_idx == VKD3DSIH_CONTINUEP
-                    || ins.handler_idx == VKD3DSIH_IF
-                    || ins.handler_idx == VKD3DSIH_RETP
-                    || ins.handler_idx == VKD3DSIH_TEXKILL)
-            {
-                switch (ins.flags)
-                {
-                    case VKD3D_SHADER_CONDITIONAL_OP_NZ: shader_addline(&buffer, "_nz"); break;
-                    case VKD3D_SHADER_CONDITIONAL_OP_Z:  shader_addline(&buffer, "_z"); break;
-                    default: shader_addline(&buffer, "_unrecognized(%#x)", ins.flags); break;
-                }
-            }
-            else if (ins.handler_idx == VKD3DSIH_IFC
-                    || ins.handler_idx == VKD3DSIH_BREAKC)
-            {
-                switch (ins.flags)
-                {
-                    case VKD3D_SHADER_REL_OP_GT: shader_addline(&buffer, "_gt"); break;
-                    case VKD3D_SHADER_REL_OP_EQ: shader_addline(&buffer, "_eq"); break;
-                    case VKD3D_SHADER_REL_OP_GE: shader_addline(&buffer, "_ge"); break;
-                    case VKD3D_SHADER_REL_OP_LT: shader_addline(&buffer, "_lt"); break;
-                    case VKD3D_SHADER_REL_OP_NE: shader_addline(&buffer, "_ne"); break;
-                    case VKD3D_SHADER_REL_OP_LE: shader_addline(&buffer, "_le"); break;
-                    default: shader_addline(&buffer, "_(%u)", ins.flags);
-                }
-            }
-            else if (ins.handler_idx == VKD3DSIH_TEX
-                    && shader_version.major >= 2
-                    && (ins.flags & VKD3DSI_TEXLD_PROJECT))
-            {
-                shader_addline(&buffer, "p");
-            }
-            else if (ins.handler_idx == VKD3DSIH_RESINFO && ins.flags)
-            {
-                switch (ins.flags)
-                {
-                    case VKD3DSI_RESINFO_RCP_FLOAT: shader_addline(&buffer, "_rcpFloat"); break;
-                    case VKD3DSI_RESINFO_UINT: shader_addline(&buffer, "_uint"); break;
-                    default: shader_addline(&buffer, "_unrecognized(%#x)", ins.flags);
-                }
-            }
-            else if (ins.handler_idx == VKD3DSIH_SAMPLE_INFO && ins.flags)
-            {
-                switch (ins.flags)
-                {
-                    case VKD3DSI_SAMPLE_INFO_UINT: shader_addline(&buffer, "_uint"); break;
-                    default: shader_addline(&buffer, "_unrecognized(%#x)", ins.flags);
-                }
-            }
-            else if (ins.handler_idx == VKD3DSIH_SYNC)
-            {
-                shader_dump_sync_flags(&buffer, ins.flags);
-            }
-            else
-            {
-                shader_dump_precise_flags(&buffer, ins.flags);
-            }
-
+            shader_dump_instruction_flags(&buffer, &ins, &shader_version);
             if (vkd3d_shader_instruction_has_texel_offset(&ins))
                 shader_addline(&buffer, "(%d,%d,%d)", ins.texel_offset.u, ins.texel_offset.v, ins.texel_offset.w);
 
diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h
index 8ed700be3756..7fc42627f820 100644
--- a/libs/vkd3d-shader/vkd3d_shader_private.h
+++ b/libs/vkd3d-shader/vkd3d_shader_private.h
@@ -480,12 +480,12 @@ enum vkd3d_tessellator_partitioning
 };
 
 
-#define VKD3DSI_TEXLD_PROJECT     0x1
-
-#define VKD3DSI_INDEXED_DYNAMIC   0x4
-#define VKD3DSI_RESINFO_RCP_FLOAT 0x1
-#define VKD3DSI_RESINFO_UINT      0x2
-#define VKD3DSI_SAMPLE_INFO_UINT  0x1
+#define VKD3DSI_NONE                    0x0
+#define VKD3DSI_TEXLD_PROJECT           0x1
+#define VKD3DSI_INDEXED_DYNAMIC         0x4
+#define VKD3DSI_RESINFO_RCP_FLOAT       0x1
+#define VKD3DSI_RESINFO_UINT            0x2
+#define VKD3DSI_SAMPLE_INFO_UINT        0x1
 #define VKD3DSI_SAMPLER_COMPARISON_MODE 0x1
 
 #define VKD3DSI_PRECISE_X         0x100
-- 
2.16.4




More information about the wine-devel mailing list