From 62f266098eccc9aaeb787e4207287caca1f55d75 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Wed, 23 Oct 2024 12:46:20 +0200 Subject: [PATCH] [dxvk] Consider driver allocations when computing memory budget --- src/dxvk/dxvk_memory.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/dxvk/dxvk_memory.cpp b/src/dxvk/dxvk_memory.cpp index 744a7ea89..dac60fb28 100644 --- a/src/dxvk/dxvk_memory.cpp +++ b/src/dxvk/dxvk_memory.cpp @@ -2060,8 +2060,15 @@ namespace dxvk { vki->vkGetPhysicalDeviceMemoryProperties2(m_device->adapter()->handle(), &memInfo); for (uint32_t i = 0; i < m_memHeapCount; i++) { - if (memBudget.heapBudget[i]) - m_memHeaps[i].memoryBudget = std::min(memBudget.heapBudget[i], m_memHeaps[i].properties.size); + if (memBudget.heapBudget[i]) { + // Deduct driver-internal allocations from the resource budget + VkDeviceSize allocated = getMemoryStats(i).memoryAllocated; + + VkDeviceSize internal = std::max(memBudget.heapUsage[i], allocated) - allocated; + internal = std::min(memBudget.heapBudget[i], internal); + + m_memHeaps[i].memoryBudget = std::min(memBudget.heapBudget[i] - internal, m_memHeaps[i].properties.size); + } } }