From ae90e74a5a9cb4d11daa5660a26c3d571fe1adbd Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Sat, 28 Sep 2024 14:52:26 +0200 Subject: [PATCH] [dxvk] Introduce concept of transfer-only views --- src/dxvk/dxvk_image.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/dxvk/dxvk_image.cpp b/src/dxvk/dxvk_image.cpp index cd0e5dab2..d7a46d1cb 100644 --- a/src/dxvk/dxvk_image.cpp +++ b/src/dxvk/dxvk_image.cpp @@ -296,8 +296,20 @@ namespace dxvk { VkImageView DxvkImageView::createView(VkImageViewType type) const { + constexpr VkImageUsageFlags ViewUsage = + VK_IMAGE_USAGE_SAMPLED_BIT | + VK_IMAGE_USAGE_STORAGE_BIT | + VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | + VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT; + + // Legalize view usage. We allow creating transfer-only view + // objects so that some internal APIs can be more consistent. DxvkImageViewKey key = m_key; key.viewType = type; + key.usage &= ViewUsage; + + if (!key.usage) + return VK_NULL_HANDLE; // Only use one layer for non-arrayed view types if (type == VK_IMAGE_VIEW_TYPE_1D || type == VK_IMAGE_VIEW_TYPE_2D)