1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-01-19 05:52:11 +01:00

[d3d11] Fix stage and access mask for default constant buffers

This commit is contained in:
Philip Rebohle 2018-05-04 10:23:36 +02:00
parent ac1d505d14
commit 9cec1ecca3
2 changed files with 11 additions and 19 deletions

View File

@ -127,24 +127,19 @@ namespace dxvk {
info.access |= VK_ACCESS_INDIRECT_COMMAND_READ_BIT; info.access |= VK_ACCESS_INDIRECT_COMMAND_READ_BIT;
} }
return m_device->GetDXVKDevice()->createBuffer( // Default constant buffers may get updated frequently, in which
info, GetMemoryFlags(pDesc)); // case mapping the buffer is faster than using update commands.
} VkMemoryPropertyFlags memoryFlags = GetMemoryFlagsForUsage(pDesc->Usage);
if ((pDesc->Usage == D3D11_USAGE_DEFAULT) && (pDesc->BindFlags & D3D11_BIND_CONSTANT_BUFFER)) {
info.stages |= VK_PIPELINE_STAGE_HOST_BIT;
info.access |= VK_ACCESS_HOST_WRITE_BIT;
VkMemoryPropertyFlags D3D11Buffer::GetMemoryFlags( memoryFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
const D3D11_BUFFER_DESC* pDesc) const { | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
// Default constant buffers may get updated frequently with calls
// to D3D11DeviceContext::UpdateSubresource, so we'll map them to
// host memory in order to allow direct access to the buffer
if ((pDesc->Usage == D3D11_USAGE_DEFAULT)
&& (pDesc->BindFlags & D3D11_BIND_CONSTANT_BUFFER)) {
return VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
| VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
} }
// Use default memory flags for the intended use return m_device->GetDXVKDevice()->createBuffer(info, memoryFlags);
return GetMemoryFlagsForUsage(pDesc->Usage);
} }
} }

View File

@ -83,9 +83,6 @@ namespace dxvk {
Rc<DxvkBuffer> CreateBuffer( Rc<DxvkBuffer> CreateBuffer(
const D3D11_BUFFER_DESC* pDesc) const; const D3D11_BUFFER_DESC* pDesc) const;
VkMemoryPropertyFlags GetMemoryFlags(
const D3D11_BUFFER_DESC* pDesc) const;
}; };
} }