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,