From e80dd6db5ff321786fc979180b7f4bbf1fcfa98f Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Mon, 23 Sep 2024 00:20:33 +0200 Subject: [PATCH] [dxvk] Cache memory type mask with global buffer support --- src/dxvk/dxvk_memory.cpp | 11 +++++++++++ src/dxvk/dxvk_memory.h | 5 ++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/dxvk/dxvk_memory.cpp b/src/dxvk/dxvk_memory.cpp index d01159deb..5b0e25229 100644 --- a/src/dxvk/dxvk_memory.cpp +++ b/src/dxvk/dxvk_memory.cpp @@ -938,6 +938,9 @@ namespace dxvk { // Only use a minimal set of usage flags for the global buffer if the // full combination of flags is not supported for whatever reason. + m_globalBufferUsageFlags = ~0u; + m_globalBufferMemoryTypes = 0u; + for (uint32_t i = 0; i < m_memTypeCount; i++) { bufferInfo.usage = m_memTypes[i].bufferUsage; @@ -947,7 +950,15 @@ namespace dxvk { | VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT; } + + if (m_memTypes[i].bufferUsage) { + m_globalBufferUsageFlags &= m_memTypes[i].bufferUsage; + m_globalBufferMemoryTypes |= 1u << i; + } } + + Logger::info(str::format("Memory type mask for buffer resources: " + "0x", std::hex, m_globalBufferMemoryTypes, ", usage: 0x", m_globalBufferUsageFlags)); } diff --git a/src/dxvk/dxvk_memory.h b/src/dxvk/dxvk_memory.h index 6be6218fd..757f2b425 100644 --- a/src/dxvk/dxvk_memory.h +++ b/src/dxvk/dxvk_memory.h @@ -876,7 +876,10 @@ namespace dxvk { std::array m_memTypes = { }; std::array m_memHeaps = { }; - uint32_t m_sparseMemoryTypes = 0u; + VkBufferUsageFlags m_globalBufferUsageFlags = 0u; + uint32_t m_globalBufferMemoryTypes = 0u; + + uint32_t m_sparseMemoryTypes = 0u; std::array m_memTypesByPropertyFlags = { };