diff --git a/Source/Core/VideoBackends/Vulkan/VKTexture.cpp b/Source/Core/VideoBackends/Vulkan/VKTexture.cpp index 27b079a779..89e4a29d41 100644 --- a/Source/Core/VideoBackends/Vulkan/VKTexture.cpp +++ b/Source/Core/VideoBackends/Vulkan/VKTexture.cpp @@ -138,7 +138,7 @@ bool VKTexture::CreateView(VkImageViewType type) GetVkFormat(), {VK_COMPONENT_SWIZZLE_IDENTITY, VK_COMPONENT_SWIZZLE_IDENTITY, VK_COMPONENT_SWIZZLE_IDENTITY, VK_COMPONENT_SWIZZLE_IDENTITY}, - {GetImageAspectForFormat(GetFormat()), 0, GetLevels(), 0, GetLayers()}}; + {GetImageViewAspectForFormat(GetFormat()), 0, GetLevels(), 0, GetLayers()}}; VkResult res = vkCreateImageView(g_vulkan_context->GetDevice(), &view_info, nullptr, &m_view); if (res != VK_SUCCESS) @@ -237,6 +237,21 @@ VkImageAspectFlags VKTexture::GetImageAspectForFormat(AbstractTextureFormat form } } +VkImageAspectFlags VKTexture::GetImageViewAspectForFormat(AbstractTextureFormat format) +{ + switch (format) + { + case AbstractTextureFormat::D16: + case AbstractTextureFormat::D24_S8: + case AbstractTextureFormat::D32F_S8: + case AbstractTextureFormat::D32F: + return VK_IMAGE_ASPECT_DEPTH_BIT; + + default: + return VK_IMAGE_ASPECT_COLOR_BIT; + } +} + void VKTexture::CopyRectangleFromTexture(const AbstractTexture* src, const MathUtil::Rectangle& src_rect, u32 src_layer, u32 src_level, const MathUtil::Rectangle& dst_rect, @@ -743,7 +758,7 @@ void VKStagingTexture::CopyFromTexture(const AbstractTexture* src, // Issue the image->buffer copy, but delay it for now. VkBufferImageCopy image_copy = {}; - const VkImageAspectFlags aspect = VKTexture::GetImageAspectForFormat(src_tex->GetFormat()); + const VkImageAspectFlags aspect = VKTexture::GetImageViewAspectForFormat(src_tex->GetFormat()); image_copy.bufferOffset = static_cast(static_cast(dst_rect.top) * m_config.GetStride() + static_cast(dst_rect.left) * m_texel_size); diff --git a/Source/Core/VideoBackends/Vulkan/VKTexture.h b/Source/Core/VideoBackends/Vulkan/VKTexture.h index 2a194acc4d..91d3e54eac 100644 --- a/Source/Core/VideoBackends/Vulkan/VKTexture.h +++ b/Source/Core/VideoBackends/Vulkan/VKTexture.h @@ -37,6 +37,7 @@ public: static VkFormat GetLinearFormat(VkFormat format); static VkFormat GetVkFormatForHostTextureFormat(AbstractTextureFormat format); static VkImageAspectFlags GetImageAspectForFormat(AbstractTextureFormat format); + static VkImageAspectFlags GetImageViewAspectForFormat(AbstractTextureFormat format); void CopyRectangleFromTexture(const AbstractTexture* src, const MathUtil::Rectangle& src_rect, u32 src_layer,