From f6fe3e018373ed787804ecc500624e03d8f5a82e Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Mon, 10 Jan 2022 10:29:38 +0100 Subject: [PATCH] vkd3d: Require VK_KHR_copy_commands2 This extension is trivial to implement for vendors and should be widely supported. Signed-off-by: Samuel Pitoiset --- README.md | 1 + libs/vkd3d/device.c | 7 +++++++ libs/vkd3d/vkd3d_private.h | 1 + libs/vkd3d/vulkan_procs.h | 8 ++++++++ 4 files changed, 17 insertions(+) diff --git a/README.md b/README.md index 6f92a6e7..14691415 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ There are some hard requirements on drivers to be able to implement D3D12 in a r - `VK_EXT_robustness2` - `VK_KHR_separate_depth_stencil_layouts` - `VK_KHR_bind_memory2` +- `VK_KHR_copy_commands2` Some notable extensions that **should** be supported for optimal or correct behavior. These extensions will likely become mandatory later. diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index 52356172..f2823877 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -79,6 +79,7 @@ static const struct vkd3d_optional_extension_info optional_device_extensions[] = VK_EXTENSION(KHR_FORMAT_FEATURE_FLAGS_2, KHR_format_feature_flags2), VK_EXTENSION(KHR_SHADER_ATOMIC_INT64, KHR_shader_atomic_int64), VK_EXTENSION(KHR_BIND_MEMORY_2, KHR_bind_memory2), + VK_EXTENSION(KHR_COPY_COMMANDS_2, KHR_copy_commands2), /* EXT extensions */ VK_EXTENSION(EXT_CALIBRATED_TIMESTAMPS, EXT_calibrated_timestamps), VK_EXTENSION(EXT_CONDITIONAL_RENDERING, EXT_conditional_rendering), @@ -1908,6 +1909,12 @@ static HRESULT vkd3d_init_device_caps(struct d3d12_device *device, return E_INVALIDARG; } + if (!vulkan_info->KHR_copy_commands2) + { + ERR("KHR_copy_commands2 is not supported by this implementation. This is required for correct operation.\n"); + return E_INVALIDARG; + } + return S_OK; } diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index cd25b251..948a5304 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -127,6 +127,7 @@ struct vkd3d_vulkan_info bool KHR_format_feature_flags2; bool KHR_shader_atomic_int64; bool KHR_bind_memory2; + bool KHR_copy_commands2; /* EXT device extensions */ bool EXT_calibrated_timestamps; bool EXT_conditional_rendering; diff --git a/libs/vkd3d/vulkan_procs.h b/libs/vkd3d/vulkan_procs.h index e9ea2918..ddf47d28 100644 --- a/libs/vkd3d/vulkan_procs.h +++ b/libs/vkd3d/vulkan_procs.h @@ -227,6 +227,14 @@ VK_DEVICE_EXT_PFN(vkCreateRenderPass2KHR) VK_DEVICE_EXT_PFN(vkBindBufferMemory2KHR); VK_DEVICE_EXT_PFN(vkBindImageMemory2KHR); +/* VK_KHR_copy_commands2 */ +VK_DEVICE_EXT_PFN(vkCmdBlitImage2KHR); +VK_DEVICE_EXT_PFN(vkCmdCopyBuffer2KHR); +VK_DEVICE_EXT_PFN(vkCmdCopyBufferToImage2KHR); +VK_DEVICE_EXT_PFN(vkCmdCopyImage2KHR); +VK_DEVICE_EXT_PFN(vkCmdCopyImageToBuffer2KHR); +VK_DEVICE_EXT_PFN(vkCmdResolveImage2KHR); + /* VK_EXT_calibrated_timestamps */ VK_DEVICE_EXT_PFN(vkGetCalibratedTimestampsEXT) VK_INSTANCE_EXT_PFN(vkGetPhysicalDeviceCalibrateableTimeDomainsEXT)