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.
This commit is contained in:
Giovanni Mascellani
2025-07-25 12:03:30 +02:00
committed by Henri Verbeet
parent f7866df201
commit bdccdd9996
Notes: Henri Verbeet 2025-07-29 13:34:53 +02:00
Approved-by: Elizabeth Figura (@zfigura)
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1654

View File

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