From bdccdd99962ad588168070ce27a585782430aae8 Mon Sep 17 00:00:00 2001 From: Giovanni Mascellani Date: Fri, 25 Jul 2025 12:03:30 +0200 Subject: [PATCH] vkd3d-shader/d3d-asm: Emit precise flags for a number of opcodes. I've seen them specifically on RESINFO, but it general it makes sense to print them for any opcode that expects a bit field in the flags. --- libs/vkd3d-shader/d3d_asm.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/libs/vkd3d-shader/d3d_asm.c b/libs/vkd3d-shader/d3d_asm.c index c213007f2..2ec9a7424 100644 --- a/libs/vkd3d-shader/d3d_asm.c +++ b/libs/vkd3d-shader/d3d_asm.c @@ -156,6 +156,8 @@ static void shader_dump_atomic_op_flags(struct vkd3d_d3d_asm_compiler *compiler, atomic_flags &= ~VKD3DARF_VOLATILE; } + atomic_flags &= ~VKD3DSI_PRECISE_XYZW; + if (atomic_flags) vkd3d_string_buffer_printf(&compiler->buffer, "_unknown_flags(%#x)", atomic_flags); } @@ -183,6 +185,8 @@ static void shader_dump_sync_flags(struct vkd3d_d3d_asm_compiler *compiler, uint sync_flags &= ~VKD3DSSF_THREAD_GROUP; } + sync_flags &= ~VKD3DSI_PRECISE_XYZW; + if (sync_flags) vkd3d_string_buffer_printf(&compiler->buffer, "_unknown_flags(%#x)", sync_flags); } @@ -1332,7 +1336,7 @@ static void shader_dump_instruction_flags(struct vkd3d_d3d_asm_compiler *compile break; case VSIR_OP_RESINFO: - switch (ins->flags) + switch (ins->flags & ~VKD3DSI_PRECISE_XYZW) { case VKD3DSI_NONE: break; @@ -1349,7 +1353,7 @@ static void shader_dump_instruction_flags(struct vkd3d_d3d_asm_compiler *compile break; case VSIR_OP_SAMPLE_INFO: - switch (ins->flags) + switch (ins->flags & ~VKD3DSI_PRECISE_XYZW) { case VKD3DSI_NONE: break; @@ -1405,9 +1409,9 @@ static void shader_dump_instruction_flags(struct vkd3d_d3d_asm_compiler *compile case VSIR_OP_USHR: if (ins->flags & VKD3DSI_SHIFT_UNMASKED) vkd3d_string_buffer_printf(buffer, "_unmasked"); - /* fall through */ + break; + default: - shader_dump_precise_flags(compiler, ins->flags); break; } } @@ -1664,9 +1668,14 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler, default: shader_dump_instruction_flags(compiler, ins); + if (ins->resource_type != VKD3D_SHADER_RESOURCE_NONE) + vkd3d_string_buffer_printf(buffer, "_indexable"); + + shader_dump_precise_flags(compiler, ins->flags); + if (ins->resource_type != VKD3D_SHADER_RESOURCE_NONE) { - vkd3d_string_buffer_printf(buffer, "_indexable("); + vkd3d_string_buffer_printf(buffer, "("); if (ins->raw) vkd3d_string_buffer_printf(buffer, "raw_"); if (ins->structured)