From d923e3ef9440bd571f283d1745d552e134f6f1dd Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mika=20Isoj=C3=A4rvi?= Date: Thu, 28 Apr 2016 16:26:51 -0700 Subject: [PATCH] Take reference data into account in memory usage tracking Bug: 28052105 Bug: 28052526 Change-Id: I47caae5d0ae1353ad015866d08b727a2ebcc4fdb --- .../modules/vulkan/memory/vktMemoryMappingTests.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/external/vulkancts/modules/vulkan/memory/vktMemoryMappingTests.cpp b/external/vulkancts/modules/vulkan/memory/vktMemoryMappingTests.cpp index 555a136..a9a3704 100644 --- a/external/vulkancts/modules/vulkan/memory/vktMemoryMappingTests.cpp +++ b/external/vulkancts/modules/vulkan/memory/vktMemoryMappingTests.cpp @@ -66,6 +66,11 @@ namespace memory namespace { +enum +{ + REFERENCE_BYTES_PER_BYTE = 2 +}; + size_t computeDeviceMemorySystemMemFootprint (const DeviceInterface& vk, VkDevice device) { AllocationCallbackRecorder callbackRecorder (getSystemAllocator()); @@ -622,6 +627,8 @@ public: m_usage += size; m_totalMemTracker.allocate(getMemoryClass(), size); + m_totalMemTracker.allocate(MEMORY_CLASS_SYSTEM, size * REFERENCE_BYTES_PER_BYTE); + m_totalMemTracker.allocate(getMemoryClass(), size); m_objects.push_back(object); return object; @@ -636,6 +643,7 @@ public: { removeFirstEqual(m_objects, object); m_usage -= object->getSize(); + m_totalMemTracker.free(MEMORY_CLASS_SYSTEM, object->getSize() * REFERENCE_BYTES_PER_BYTE); m_totalMemTracker.free(getMemoryClass(), object->getSize()); delete object; } @@ -663,19 +671,22 @@ private: DE_ASSERT(totalUsage <= totalSysMem); - return de::min(availableInHeap, totalSysMem-totalUsage); + return de::min(availableInHeap, (totalSysMem-totalUsage) / (1 + REFERENCE_BYTES_PER_BYTE)); } else { + const VkDeviceSize totalUsage = m_totalMemTracker.getTotalUsage(); + const VkDeviceSize totalSysMem = (VkDeviceSize)m_limits.totalSystemMemory; + const MemoryClass memClass = getMemoryClass(); const VkDeviceSize totalMemClass = memClass == MEMORY_CLASS_SYSTEM - ? (VkDeviceSize)m_limits.totalSystemMemory + ? (VkDeviceSize)(m_limits.totalSystemMemory / (1 + REFERENCE_BYTES_PER_BYTE)) : m_limits.totalDeviceLocalMemory; const VkDeviceSize usedMemClass = m_totalMemTracker.getUsage(memClass); DE_ASSERT(usedMemClass <= totalMemClass); - return de::min(availableInHeap, totalMemClass-usedMemClass); + return de::min(de::min(availableInHeap, totalMemClass-usedMemClass), (totalSysMem - totalUsage) / REFERENCE_BYTES_PER_BYTE); } } -- 2.7.4