Skip to content

Commit

Permalink
vkd3d-shader: Hook up expect-assume instrumentation.
Browse files Browse the repository at this point in the history
Signed-off-by: Hans-Kristian Arntzen <[email protected]>
  • Loading branch information
HansKristian-Work committed Jan 27, 2025
1 parent c53a163 commit 67ec235
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 10 deletions.
19 changes: 10 additions & 9 deletions include/vkd3d_shader.h
Original file line number Diff line number Diff line change
Expand Up @@ -222,16 +222,17 @@ struct vkd3d_shader_descriptor_table_buffer

enum vkd3d_shader_interface_flag
{
VKD3D_SHADER_INTERFACE_PUSH_CONSTANTS_AS_UNIFORM_BUFFER = 0x00000001u,
VKD3D_SHADER_INTERFACE_BINDLESS_CBV_AS_STORAGE_BUFFER = 0x00000002u,
VKD3D_SHADER_INTERFACE_SSBO_OFFSET_BUFFER = 0x00000004u,
VKD3D_SHADER_INTERFACE_TYPED_OFFSET_BUFFER = 0x00000008u,
VKD3D_SHADER_INTERFACE_DESCRIPTOR_QA_BUFFER = 0x00000010u,
VKD3D_SHADER_INTERFACE_PUSH_CONSTANTS_AS_UNIFORM_BUFFER = 0x00000001u,
VKD3D_SHADER_INTERFACE_BINDLESS_CBV_AS_STORAGE_BUFFER = 0x00000002u,
VKD3D_SHADER_INTERFACE_SSBO_OFFSET_BUFFER = 0x00000004u,
VKD3D_SHADER_INTERFACE_TYPED_OFFSET_BUFFER = 0x00000008u,
VKD3D_SHADER_INTERFACE_DESCRIPTOR_QA_BUFFER = 0x00000010u,
/* In this model, use descriptor_size_cbv_srv_uav as array stride for raw VA buffer. */
VKD3D_SHADER_INTERFACE_RAW_VA_ALIAS_DESCRIPTOR_BUFFER = 0x00000020u,
VKD3D_SHADER_INTERFACE_INSTRUCTION_QA_BUFFER = 0x00000040u,
VKD3D_SHADER_INTERFACE_INSTRUCTION_QA_BUFFER_FULL = 0x00000080u,
VKD3D_SHADER_INTERFACE_INSTRUCTION_QA_BUFFER_FLUSH_NAN = 0x00000100u,
VKD3D_SHADER_INTERFACE_RAW_VA_ALIAS_DESCRIPTOR_BUFFER = 0x00000020u,
VKD3D_SHADER_INTERFACE_INSTRUCTION_QA_BUFFER = 0x00000040u,
VKD3D_SHADER_INTERFACE_INSTRUCTION_QA_BUFFER_FULL = 0x00000080u,
VKD3D_SHADER_INTERFACE_INSTRUCTION_QA_BUFFER_FLUSH_NAN = 0x00000100u,
VKD3D_SHADER_INTERFACE_INSTRUCTION_QA_BUFFER_EXPECT_ASSUME = 0x00000200u,
};

struct vkd3d_shader_stage_io_entry
Expand Down
8 changes: 8 additions & 0 deletions libs/vkd3d-shader/dxil.c
Original file line number Diff line number Diff line change
Expand Up @@ -751,6 +751,8 @@ int vkd3d_shader_compile_dxil(const struct vkd3d_shader_code *dxbc,
helper.type = DXIL_SPV_INSTRUCTION_INSTRUMENTATION_TYPE_FULL_NAN_INF;
else if (shader_interface_info->flags & VKD3D_SHADER_INTERFACE_INSTRUCTION_QA_BUFFER_FLUSH_NAN)
helper.type = DXIL_SPV_INSTRUCTION_INSTRUMENTATION_TYPE_FLUSH_NAN_TO_ZERO;
else if (shader_interface_info->flags & VKD3D_SHADER_INTERFACE_INSTRUCTION_QA_BUFFER_EXPECT_ASSUME)
helper.type = DXIL_SPV_INSTRUCTION_INSTRUMENTATION_TYPE_EXPECT_ASSUME;

if (dxil_spv_converter_add_option(converter, &helper.base) != DXIL_SPV_SUCCESS)
{
Expand Down Expand Up @@ -1518,6 +1520,12 @@ int vkd3d_shader_compile_dxil_export(const struct vkd3d_shader_code *dxil,
helper.control_desc_set = shader_interface_info->descriptor_qa_control_binding->set;
helper.control_binding = shader_interface_info->descriptor_qa_control_binding->binding;
helper.type = DXIL_SPV_INSTRUCTION_INSTRUMENTATION_TYPE_EXTERNALLY_VISIBLE_WRITE_NAN_INF;
if (shader_interface_info->flags & VKD3D_SHADER_INTERFACE_INSTRUCTION_QA_BUFFER_FULL)
helper.type = DXIL_SPV_INSTRUCTION_INSTRUMENTATION_TYPE_FULL_NAN_INF;
else if (shader_interface_info->flags & VKD3D_SHADER_INTERFACE_INSTRUCTION_QA_BUFFER_FLUSH_NAN)
helper.type = DXIL_SPV_INSTRUCTION_INSTRUMENTATION_TYPE_FLUSH_NAN_TO_ZERO;
else if (shader_interface_info->flags & VKD3D_SHADER_INTERFACE_INSTRUCTION_QA_BUFFER_EXPECT_ASSUME)
helper.type = DXIL_SPV_INSTRUCTION_INSTRUMENTATION_TYPE_EXPECT_ASSUME;

if (dxil_spv_converter_add_option(converter, &helper.base) != DXIL_SPV_SUCCESS)
{
Expand Down
2 changes: 2 additions & 0 deletions libs/vkd3d/debug_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,8 @@ void vkd3d_shader_hash_range_parse(FILE *file, struct vkd3d_shader_hash_range **
(*ranges)[new_count].flags = VKD3D_SHADER_HASH_RANGE_QA_FLAG_FULL_QA;
else if (strcmp(end_ptr, "flush-nan") == 0)
(*ranges)[new_count].flags = VKD3D_SHADER_HASH_RANGE_QA_FLAG_FLUSH_NAN;
else if (strcmp(end_ptr, "expect-assume") == 0)
(*ranges)[new_count].flags = VKD3D_SHADER_HASH_RANGE_QA_FLAG_EXPECT_ASSUME;
else
end_ptr = "N/A";

Expand Down
5 changes: 5 additions & 0 deletions libs/vkd3d/descriptor_debug.c
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,11 @@ uint32_t vkd3d_descriptor_debug_get_shader_interface_flags(
flags = VKD3D_SHADER_INTERFACE_INSTRUCTION_QA_BUFFER_FLUSH_NAN |
VKD3D_SHADER_INTERFACE_INSTRUCTION_QA_BUFFER;
}
else if (flags & VKD3D_SHADER_HASH_RANGE_QA_FLAG_EXPECT_ASSUME)
{
flags = VKD3D_SHADER_INTERFACE_INSTRUCTION_QA_BUFFER_EXPECT_ASSUME |
VKD3D_SHADER_INTERFACE_INSTRUCTION_QA_BUFFER;
}
else if (flags & VKD3D_SHADER_HASH_RANGE_QA_FLAG_ALLOW)
flags = VKD3D_SHADER_INTERFACE_INSTRUCTION_QA_BUFFER;
}
Expand Down
3 changes: 2 additions & 1 deletion libs/vkd3d/vkd3d_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -3595,7 +3595,8 @@ enum vkd3d_shader_hash_range_qa_flags
VKD3D_SHADER_HASH_RANGE_QA_FLAG_ALLOW = 1 << 0,
VKD3D_SHADER_HASH_RANGE_QA_FLAG_DISALLOW = 1 << 1,
VKD3D_SHADER_HASH_RANGE_QA_FLAG_FULL_QA = 1 << 2,
VKD3D_SHADER_HASH_RANGE_QA_FLAG_FLUSH_NAN = 1 << 3
VKD3D_SHADER_HASH_RANGE_QA_FLAG_FLUSH_NAN = 1 << 3,
VKD3D_SHADER_HASH_RANGE_QA_FLAG_EXPECT_ASSUME = 1 << 4
};

struct vkd3d_shader_hash_range
Expand Down

0 comments on commit 67ec235

Please sign in to comment.