From ca4c03284fa2308675176417d43badef9a2e8fe7 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Tue, 28 Jan 2020 12:33:37 +0100 Subject: [PATCH] [dxvk] Don't oversubscribe memory heaps on UMA devices Otherwise, we seem to suffer a major performance penalty on setups with insufficient dedicated system memory. --- src/dxvk/dxvk_memory.cpp | 5 +++++ src/dxvk/dxvk_memory.h | 2 ++ 2 files changed, 7 insertions(+) diff --git a/src/dxvk/dxvk_memory.cpp b/src/dxvk/dxvk_memory.cpp index 3ebe5f0e..11f2dfa1 100644 --- a/src/dxvk/dxvk_memory.cpp +++ b/src/dxvk/dxvk_memory.cpp @@ -169,6 +169,8 @@ namespace dxvk { m_memTypes[i].memTypeId = i; m_memTypes[i].chunkSize = pickChunkSize(i); } + + m_restrictAllocations = m_device->isUnifiedMemoryArchitecture(); } @@ -309,6 +311,9 @@ namespace dxvk { bool useMemoryPriority = (flags & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) && (m_device->features().extMemoryPriority.memoryPriority); + if (m_restrictAllocations && type->heap->stats.memoryAllocated + size > type->heap->properties.size) + return DxvkDeviceMemory(); + DxvkDeviceMemory result; result.memSize = size; result.memFlags = flags; diff --git a/src/dxvk/dxvk_memory.h b/src/dxvk/dxvk_memory.h index 8034c361..92719501 100644 --- a/src/dxvk/dxvk_memory.h +++ b/src/dxvk/dxvk_memory.h @@ -284,6 +284,8 @@ namespace dxvk { std::mutex m_mutex; std::array m_memHeaps; std::array m_memTypes; + + bool m_restrictAllocations; DxvkMemory tryAlloc( const VkMemoryRequirements* req,