From fe0dc2d579dc80be1675a53945162d2082e39c61 Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Tue, 11 May 2021 23:41:29 +0100 Subject: [PATCH] [dxvk] Move isUnifiedMemoryArchitecture to adapter --- src/dxvk/dxvk_adapter.cpp | 11 +++++++++++ src/dxvk/dxvk_adapter.h | 9 +++++++++ src/dxvk/dxvk_device.cpp | 8 +------- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/dxvk/dxvk_adapter.cpp b/src/dxvk/dxvk_adapter.cpp index 45d395528..d0d09c989 100644 --- a/src/dxvk/dxvk_adapter.cpp +++ b/src/dxvk/dxvk_adapter.cpp @@ -497,6 +497,17 @@ namespace dxvk { } + bool DxvkAdapter::isUnifiedMemoryArchitecture() const { + auto memory = this->memoryProperties(); + bool result = true; + + for (uint32_t i = 0; i < memory.memoryHeapCount; i++) + result &= memory.memoryHeaps[i].flags & VK_MEMORY_HEAP_DEVICE_LOCAL_BIT; + + return result; + } + + void DxvkAdapter::initHeapAllocInfo() { for (uint32_t i = 0; i < m_heapAlloc.size(); i++) m_heapAlloc[i] = 0; diff --git a/src/dxvk/dxvk_adapter.h b/src/dxvk/dxvk_adapter.h index 164646899..f2fb1f0af 100644 --- a/src/dxvk/dxvk_adapter.h +++ b/src/dxvk/dxvk_adapter.h @@ -247,6 +247,15 @@ namespace dxvk { */ void logAdapterInfo() const; + /** + * \brief Checks whether this is a UMA system + * + * Basically tests whether all heaps are device-local. + * Can be used for various optimizations in client APIs. + * \returns \c true if the system has unified memory. + */ + bool isUnifiedMemoryArchitecture() const; + private: Rc m_vki; diff --git a/src/dxvk/dxvk_device.cpp b/src/dxvk/dxvk_device.cpp index 23fa92aea..bd08a5b0e 100644 --- a/src/dxvk/dxvk_device.cpp +++ b/src/dxvk/dxvk_device.cpp @@ -33,13 +33,7 @@ namespace dxvk { bool DxvkDevice::isUnifiedMemoryArchitecture() const { - auto memory = m_adapter->memoryProperties(); - bool result = true; - - for (uint32_t i = 0; i < memory.memoryHeapCount; i++) - result &= memory.memoryHeaps[i].flags & VK_MEMORY_HEAP_DEVICE_LOCAL_BIT; - - return result; + return m_adapter->isUnifiedMemoryArchitecture(); }