From 7c12efb37071e9b9bfd1231bdad9c23ac7d2b10e Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Mon, 9 Mar 2026 14:47:55 +0100 Subject: [PATCH] vulkan: add helpers for depth/stencil only layouts Original patch from Faith Ekstrand. Signed-off-by: Samuel Pitoiset Part-of: --- src/vulkan/runtime/vk_image.c | 38 +++++++++++++++++++++++++++++++++++ src/vulkan/runtime/vk_image.h | 2 ++ 2 files changed, 40 insertions(+) diff --git a/src/vulkan/runtime/vk_image.c b/src/vulkan/runtime/vk_image.c index bf7cd7c5b3f..b281b82a73b 100644 --- a/src/vulkan/runtime/vk_image.c +++ b/src/vulkan/runtime/vk_image.c @@ -810,6 +810,44 @@ vk_image_layout_is_depth_only(VkImageLayout layout) } } +VkImageLayout +vk_image_layout_depth_only(VkImageLayout layout) +{ + switch (layout) { + case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL: + case VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL: + case VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL: + return VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL; + + case VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL: + case VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL: + case VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL: + return VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL; + + default: + return layout; + } +} + +VkImageLayout +vk_image_layout_stencil_only(VkImageLayout layout) +{ + switch (layout) { + case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL: + case VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL: + case VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL: + return VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL; + + case VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL: + case VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL: + case VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL: + return VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL; + + default: + return layout; + } +} + static VkResult vk_image_create_get_format_list_uncompressed(struct vk_device *device, const VkImageCreateInfo *pCreateInfo, diff --git a/src/vulkan/runtime/vk_image.h b/src/vulkan/runtime/vk_image.h index 41feb4bc920..ac823dcf8ee 100644 --- a/src/vulkan/runtime/vk_image.h +++ b/src/vulkan/runtime/vk_image.h @@ -405,6 +405,8 @@ vk_image_view_subresource_range(const struct vk_image_view *view) bool vk_image_layout_is_read_only(VkImageLayout layout, VkImageAspectFlagBits aspect); bool vk_image_layout_is_depth_only(VkImageLayout layout); +VkImageLayout vk_image_layout_depth_only(VkImageLayout layout); +VkImageLayout vk_image_layout_stencil_only(VkImageLayout layout); VkImageUsageFlags vk_image_layout_to_usage_flags(VkImageLayout layout, VkImageAspectFlagBits aspect);