Module: vkd3d Branch: master Commit: 49e936ae2ac88a74215f8f3c35ce40f332468e35 URL: https://source.winehq.org/git/vkd3d.git/?a=commit;h=49e936ae2ac88a74215f8f3c...
Author: Józef Kucia jkucia@codeweavers.com Date: Tue Jun 5 13:52:57 2018 +0200
libs/vkd3d-shader: Factor out shader_dump_instruction_flags().
Signed-off-by: Józef Kucia jkucia@codeweavers.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
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 ce8db46..f987e3c 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 8ed700b..7fc4262 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