From 5dfe0d077d8b58eb04e99e4fd1ec257d3b9dc488 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Tue, 19 Jun 2018 11:28:54 +0200 Subject: [PATCH] [d3d11] Fix render target layouts for linar tiling There currently doesn't seem to be a game which actually renders to images with linear tiling, but we should handle this anyway. Only the GENERAL layout is allowed if the tiling is not OPTIMAL. --- src/d3d11/d3d11_view_dsv.h | 22 +++++++++++++--------- src/d3d11/d3d11_view_rtv.h | 5 +++-- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/d3d11/d3d11_view_dsv.h b/src/d3d11/d3d11_view_dsv.h index 71232bb4c..f3d471dcf 100644 --- a/src/d3d11/d3d11_view_dsv.h +++ b/src/d3d11/d3d11_view_dsv.h @@ -46,15 +46,19 @@ namespace dxvk { } VkImageLayout GetRenderLayout() const { - switch (m_desc.Flags & (D3D11_DSV_READ_ONLY_DEPTH | D3D11_DSV_READ_ONLY_STENCIL)) { - default: // case 0 - return VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; - case D3D11_DSV_READ_ONLY_DEPTH: - return VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR; - case D3D11_DSV_READ_ONLY_STENCIL: - return VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR; - case D3D11_DSV_READ_ONLY_DEPTH | D3D11_DSV_READ_ONLY_STENCIL: - return VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL; + if (m_view->imageInfo().tiling == VK_IMAGE_TILING_OPTIMAL) { + switch (m_desc.Flags & (D3D11_DSV_READ_ONLY_DEPTH | D3D11_DSV_READ_ONLY_STENCIL)) { + default: // case 0 + return VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; + case D3D11_DSV_READ_ONLY_DEPTH: + return VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR; + case D3D11_DSV_READ_ONLY_STENCIL: + return VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR; + case D3D11_DSV_READ_ONLY_DEPTH | D3D11_DSV_READ_ONLY_STENCIL: + return VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL; + } + } else { + return VK_IMAGE_LAYOUT_GENERAL; } } diff --git a/src/d3d11/d3d11_view_rtv.h b/src/d3d11/d3d11_view_rtv.h index 7927e387c..a5134371f 100644 --- a/src/d3d11/d3d11_view_rtv.h +++ b/src/d3d11/d3d11_view_rtv.h @@ -42,8 +42,9 @@ namespace dxvk { } VkImageLayout GetRenderLayout() const { - // Currently no reason to use anything else - return VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + return m_view->imageInfo().tiling == VK_IMAGE_TILING_OPTIMAL + ? VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL + : VK_IMAGE_LAYOUT_GENERAL; } static HRESULT GetDescFromResource(