From a7337bc999adef1f482cccd97f78769a817c870e Mon Sep 17 00:00:00 2001 From: Giovanni Mascellani Date: Mon, 10 Feb 2025 10:18:27 +0100 Subject: [PATCH] vkd3d: Require extension VK_KHR_maintenance2. We're already implicitly using it for image layouts in which either depth or stencil is writeable and the other is not. Correspondingly, add the _KHR suffix in those cases, so the extension usage is more evident. According to the Vulkan Hardware Database, only four reports without this extension were filed since 2023, and all of them for configurations we likely don't target. --- libs/vkd3d/command.c | 4 ++-- libs/vkd3d/device.c | 2 +- libs/vkd3d/resource.c | 14 ++++++-------- libs/vkd3d/vkd3d_private.h | 1 - 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c index ce0c3b91..ecdf6dbf 100644 --- a/libs/vkd3d/command.c +++ b/libs/vkd3d/command.c @@ -2222,7 +2222,7 @@ static bool vk_barrier_parameters_from_d3d12_resource_state(unsigned int state, if (!stencil_state || (stencil_state & D3D12_RESOURCE_STATE_DEPTH_WRITE)) *image_layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; else - *image_layout = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL; + *image_layout = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR; } return true; @@ -2256,7 +2256,7 @@ static bool vk_barrier_parameters_from_d3d12_resource_state(unsigned int state, { if (stencil_state & D3D12_RESOURCE_STATE_DEPTH_WRITE) { - *image_layout = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL; + *image_layout = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR; *access_mask |= VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; } else diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index b51e2963..0575b492 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -73,6 +73,7 @@ static const struct vkd3d_optional_extension_info optional_instance_extensions[] static const char * const required_device_extensions[] = { VK_KHR_MAINTENANCE1_EXTENSION_NAME, + VK_KHR_MAINTENANCE2_EXTENSION_NAME, VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, }; @@ -91,7 +92,6 @@ static const struct vkd3d_optional_extension_info optional_device_extensions[] = VK_EXTENSION(KHR_DRAW_INDIRECT_COUNT, KHR_draw_indirect_count), VK_EXTENSION(KHR_GET_MEMORY_REQUIREMENTS_2, KHR_get_memory_requirements2), VK_EXTENSION(KHR_IMAGE_FORMAT_LIST, KHR_image_format_list), - VK_EXTENSION(KHR_MAINTENANCE2, KHR_maintenance2), VK_EXTENSION(KHR_MAINTENANCE3, KHR_maintenance3), VK_EXTENSION(KHR_PORTABILITY_SUBSET, KHR_portability_subset), VK_EXTENSION(KHR_PUSH_DESCRIPTOR, KHR_push_descriptor), diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c index eab97715..cb184986 100644 --- a/libs/vkd3d/resource.c +++ b/libs/vkd3d/resource.c @@ -3094,7 +3094,7 @@ bool vkd3d_create_texture_view(struct d3d12_device *device, uint32_t magic, VkIm if (vk_image) { view_desc.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; - view_desc.pNext = NULL; + view_desc.pNext = &usage_desc; view_desc.flags = 0; view_desc.image = vk_image; view_desc.viewType = desc->view_type; @@ -3107,13 +3107,11 @@ bool vkd3d_create_texture_view(struct d3d12_device *device, uint32_t magic, VkIm view_desc.subresourceRange.levelCount = desc->miplevel_count; view_desc.subresourceRange.baseArrayLayer = desc->layer_idx; view_desc.subresourceRange.layerCount = desc->layer_count; - if (device->vk_info.KHR_maintenance2) - { - usage_desc.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO; - usage_desc.pNext = NULL; - usage_desc.usage = desc->usage; - view_desc.pNext = &usage_desc; - } + + usage_desc.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO; + usage_desc.pNext = NULL; + usage_desc.usage = desc->usage; + if ((vr = VK_CALL(vkCreateImageView(device->vk_device, &view_desc, NULL, &vk_view))) < 0) { WARN("Failed to create Vulkan image view, vr %d.\n", vr); diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index 2274579c..8982f582 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -127,7 +127,6 @@ struct vkd3d_vulkan_info bool KHR_draw_indirect_count; bool KHR_get_memory_requirements2; bool KHR_image_format_list; - bool KHR_maintenance2; bool KHR_maintenance3; bool KHR_portability_subset; bool KHR_push_descriptor;