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>
This commit is contained in:
Józef Kucia 2018-06-05 13:52:57 +02:00 committed by Alexandre Julliard
parent 988cf2154b
commit 49e936ae2a
2 changed files with 73 additions and 65 deletions

View File

@ -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);

View File

@ -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