diff options
| author | Connor McLaughlin <stenzek@gmail.com> | 2019-08-08 12:23:27 +1000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-08-08 12:23:27 +1000 |
| commit | 1092efa77ae302fc677ebb67cdf2f93024b93f79 (patch) | |
| tree | f589368c3ae471cb03a79cf631d87cd3bc7aed80 /Source/Core/VideoBackends | |
| parent | 9477c8b0ed834efc3b7cf5b9fcd48caf57611a8a (diff) | |
| parent | 06daf5803243c5f36069d8f7a936e62857ce1eca (diff) | |
Merge pull request #8276 from stenzek/adreno-efb-access
Fix CPU EFB access on Adreno with Vulkan backend
Diffstat (limited to 'Source/Core/VideoBackends')
| -rw-r--r-- | Source/Core/VideoBackends/Vulkan/VKTexture.cpp | 19 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/Vulkan/VKTexture.h | 1 |
2 files changed, 18 insertions, 2 deletions
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<int>& src_rect, u32 src_layer, u32 src_level, const MathUtil::Rectangle<int>& 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<VkDeviceSize>(static_cast<size_t>(dst_rect.top) * m_config.GetStride() + static_cast<size_t>(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<int>& src_rect, u32 src_layer, |
