From 6ce8450b12852d34f8db0adb33e9a772af473945 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Tue, 17 Sep 2019 17:25:09 +0200 Subject: [PATCH] [d3d11] Implement D3D11.2 MapOnDefaultBuffers feature Basically just allocates the buffer on a host-visible memory type, like DYNAMIC or STAGING buffers depending depending on the CPU access flags. --- src/d3d11/d3d11_buffer.cpp | 7 ++++++- src/d3d11/d3d11_device.cpp | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/d3d11/d3d11_buffer.cpp b/src/d3d11/d3d11_buffer.cpp index deac75996..f01199731 100644 --- a/src/d3d11/d3d11_buffer.cpp +++ b/src/d3d11/d3d11_buffer.cpp @@ -224,10 +224,15 @@ namespace dxvk { case D3D11_USAGE_DEFAULT: memoryFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - if (m_desc.BindFlags & D3D11_BIND_CONSTANT_BUFFER) { + if ((m_desc.BindFlags & D3D11_BIND_CONSTANT_BUFFER) || m_desc.CPUAccessFlags) { memoryFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT; } + + if (m_desc.CPUAccessFlags & D3D11_CPU_ACCESS_READ) { + memoryFlags |= VK_MEMORY_PROPERTY_HOST_CACHED_BIT; + memoryFlags &= ~VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; + } break; case D3D11_USAGE_DYNAMIC: diff --git a/src/d3d11/d3d11_device.cpp b/src/d3d11/d3d11_device.cpp index cf765c336..5e0d3f049 100644 --- a/src/d3d11/d3d11_device.cpp +++ b/src/d3d11/d3d11_device.cpp @@ -1606,7 +1606,7 @@ namespace dxvk { info->TiledResourcesTier = D3D11_TILED_RESOURCES_NOT_SUPPORTED; info->MinMaxFiltering = FALSE; info->ClearViewAlsoSupportsDepthOnlyFormats = TRUE; - info->MapOnDefaultBuffers = FALSE; + info->MapOnDefaultBuffers = TRUE; } return S_OK; case D3D11_FEATURE_D3D9_SIMPLE_INSTANCING_SUPPORT: {