From a2de17309542b6275a63b3c458c065d7de627a86 Mon Sep 17 00:00:00 2001 From: Bryan Bernhart Date: Tue, 30 Aug 2022 14:06:04 -0700 Subject: [PATCH] Make ResidencyManager::GetMemorySegmentGroup private. --- src/fuzzers/D3D12ResidencyManagerFuzzer.cpp | 4 +++- src/gpgmm/d3d12/ResidencyManagerD3D12.cpp | 12 +----------- src/gpgmm/d3d12/ResidencyManagerD3D12.h | 12 ++---------- src/gpgmm/d3d12/UtilsD3D12.cpp | 16 ++++++++++++++++ src/gpgmm/d3d12/UtilsD3D12.h | 3 +++ src/tests/end2end/D3D12ResidencyManagerTests.cpp | 9 +++++---- 6 files changed, 30 insertions(+), 26 deletions(-) diff --git a/src/fuzzers/D3D12ResidencyManagerFuzzer.cpp b/src/fuzzers/D3D12ResidencyManagerFuzzer.cpp index d87b116da..35e001965 100644 --- a/src/fuzzers/D3D12ResidencyManagerFuzzer.cpp +++ b/src/fuzzers/D3D12ResidencyManagerFuzzer.cpp @@ -18,6 +18,7 @@ #include "D3D12Fuzzer.h" #include "gpgmm/common/SizeClass.h" +#include "gpgmm/d3d12/UtilsD3D12.h" namespace { @@ -80,7 +81,8 @@ extern "C" int LLVMFuzzerInitialize(int* argc, char*** argv) { allocationDesc.HeapType = D3D12_HEAP_TYPE_DEFAULT; const DXGI_MEMORY_SEGMENT_GROUP bufferMemorySegment = - gResidencyManager->GetMemorySegmentGroup(allocationDesc.HeapType); + gpgmm::d3d12::GetDefaultMemorySegmentGroup(residencyDesc.Device.Get(), + allocationDesc.HeapType, residencyDesc.IsUMA); constexpr uint64_t kBufferMemorySize = GPGMM_MB_TO_BYTES(1); const D3D12_RESOURCE_DESC bufferDesc = CreateBufferDesc(kBufferMemorySize); diff --git a/src/gpgmm/d3d12/ResidencyManagerD3D12.cpp b/src/gpgmm/d3d12/ResidencyManagerD3D12.cpp index 6aee1bf57..b2fe27b58 100644 --- a/src/gpgmm/d3d12/ResidencyManagerD3D12.cpp +++ b/src/gpgmm/d3d12/ResidencyManagerD3D12.cpp @@ -767,17 +767,7 @@ namespace gpgmm::d3d12 { DXGI_MEMORY_SEGMENT_GROUP ResidencyManager::GetMemorySegmentGroup( D3D12_HEAP_TYPE heapType) const { - if (mIsUMA) { - return DXGI_MEMORY_SEGMENT_GROUP_LOCAL; - } - - D3D12_HEAP_PROPERTIES heapProperties = mDevice->GetCustomHeapProperties(0, heapType); - - if (heapProperties.MemoryPoolPreference == D3D12_MEMORY_POOL_L1) { - return DXGI_MEMORY_SEGMENT_GROUP_LOCAL; - } - - return DXGI_MEMORY_SEGMENT_GROUP_NON_LOCAL; + return GetDefaultMemorySegmentGroup(mDevice.Get(), heapType, mIsUMA); } } // namespace gpgmm::d3d12 diff --git a/src/gpgmm/d3d12/ResidencyManagerD3D12.h b/src/gpgmm/d3d12/ResidencyManagerD3D12.h index a8ee668c9..f843353f3 100644 --- a/src/gpgmm/d3d12/ResidencyManagerD3D12.h +++ b/src/gpgmm/d3d12/ResidencyManagerD3D12.h @@ -226,16 +226,6 @@ namespace gpgmm::d3d12 { */ RESIDENCY_INFO GetInfo() const; - /** \brief Divugles the memory segment used for the specified heap type. - - @param heapType A D3D12_HEAP_TYPE-typed value that specifies the heap to get the memory - segment for. - - \return A DXGI_MEMORY_SEGMENT_GROUP that provides the memory segment for the specified heap - type. - */ - DXGI_MEMORY_SEGMENT_GROUP GetMemorySegmentGroup(D3D12_HEAP_TYPE heapType) const; - private: friend Heap; friend ResourceAllocator; @@ -253,6 +243,8 @@ namespace gpgmm::d3d12 { HRESULT InsertHeapInternal(Heap* heap); + DXGI_MEMORY_SEGMENT_GROUP GetMemorySegmentGroup(D3D12_HEAP_TYPE heapType) const; + const char* GetTypename() const; using LRUCache = LinkedList; diff --git a/src/gpgmm/d3d12/UtilsD3D12.cpp b/src/gpgmm/d3d12/UtilsD3D12.cpp index 696c594e7..3de06c7d7 100644 --- a/src/gpgmm/d3d12/UtilsD3D12.cpp +++ b/src/gpgmm/d3d12/UtilsD3D12.cpp @@ -437,4 +437,20 @@ namespace gpgmm::d3d12 { return object->SetName(TCharToWString(name.c_str()).c_str()); } + DXGI_MEMORY_SEGMENT_GROUP GetDefaultMemorySegmentGroup(ID3D12Device* device, + D3D12_HEAP_TYPE heapType, + bool isUMA) { + if (isUMA) { + return DXGI_MEMORY_SEGMENT_GROUP_LOCAL; + } + + D3D12_HEAP_PROPERTIES heapProperties = device->GetCustomHeapProperties(0, heapType); + + if (heapProperties.MemoryPoolPreference == D3D12_MEMORY_POOL_L1) { + return DXGI_MEMORY_SEGMENT_GROUP_LOCAL; + } + + return DXGI_MEMORY_SEGMENT_GROUP_NON_LOCAL; + } + } // namespace gpgmm::d3d12 diff --git a/src/gpgmm/d3d12/UtilsD3D12.h b/src/gpgmm/d3d12/UtilsD3D12.h index ec6e72fd0..dc3c74be6 100644 --- a/src/gpgmm/d3d12/UtilsD3D12.h +++ b/src/gpgmm/d3d12/UtilsD3D12.h @@ -26,6 +26,9 @@ namespace gpgmm::d3d12 { bool IsDepthFormat(DXGI_FORMAT format); bool IsAllowedToUseSmallAlignment(const D3D12_RESOURCE_DESC& Desc); HRESULT SetDebugObjectName(ID3D12Object* object, const std::string& name); + DXGI_MEMORY_SEGMENT_GROUP GetDefaultMemorySegmentGroup(ID3D12Device* device, + D3D12_HEAP_TYPE heapType, + bool isUMA); } // namespace gpgmm::d3d12 diff --git a/src/tests/end2end/D3D12ResidencyManagerTests.cpp b/src/tests/end2end/D3D12ResidencyManagerTests.cpp index cc44d5198..606d3ef07 100644 --- a/src/tests/end2end/D3D12ResidencyManagerTests.cpp +++ b/src/tests/end2end/D3D12ResidencyManagerTests.cpp @@ -15,6 +15,7 @@ #include "tests/D3D12Test.h" #include "gpgmm/common/SizeClass.h" +#include "gpgmm/d3d12/UtilsD3D12.h" #include @@ -88,7 +89,7 @@ class D3D12ResidencyManagerTests : public D3D12TestBase, public ::testing::Test } }; -TEST_F(D3D12ResidencyManagerTests, CreateResourceHeap) { +TEST_F(D3D12ResidencyManagerTests, CreateHeap) { ComPtr residencyManager; ASSERT_SUCCEEDED(ResidencyManager::CreateResidencyManager( CreateBasicResidencyDesc(kDefaultBudget), &residencyManager)); @@ -248,7 +249,7 @@ TEST_F(D3D12ResidencyManagerTests, OverBudget) { bufferAllocationDesc.HeapType = D3D12_HEAP_TYPE_DEFAULT; const DXGI_MEMORY_SEGMENT_GROUP bufferMemorySegment = - residencyManager->GetMemorySegmentGroup(bufferAllocationDesc.HeapType); + GetDefaultMemorySegmentGroup(mDevice.Get(), bufferAllocationDesc.HeapType, mIsUMA); const uint64_t memoryUnderBudget = GetBudgetLeft(residencyManager.Get(), bufferMemorySegment); // Keep allocating until we reach the budget. @@ -310,7 +311,7 @@ TEST_F(D3D12ResidencyManagerTests, OverBudgetUsingBudgetNotifications) { bufferAllocationDesc.HeapType = D3D12_HEAP_TYPE_DEFAULT; const DXGI_MEMORY_SEGMENT_GROUP bufferMemorySegment = - residencyManager->GetMemorySegmentGroup(bufferAllocationDesc.HeapType); + GetDefaultMemorySegmentGroup(mDevice.Get(), bufferAllocationDesc.HeapType, mIsUMA); const uint64_t memoryUnderBudget = GetBudgetLeft(residencyManager.Get(), bufferMemorySegment); @@ -354,7 +355,7 @@ TEST_F(D3D12ResidencyManagerTests, OverBudgetWithGrowth) { bufferAllocationDesc.HeapType = D3D12_HEAP_TYPE_DEFAULT; const DXGI_MEMORY_SEGMENT_GROUP bufferMemorySegment = - residencyManager->GetMemorySegmentGroup(bufferAllocationDesc.HeapType); + GetDefaultMemorySegmentGroup(mDevice.Get(), bufferAllocationDesc.HeapType, mIsUMA); const uint64_t memoryUnderBudget = GetBudgetLeft(residencyManager.Get(), bufferMemorySegment); while (resourceAllocator->GetInfo().UsedMemoryUsage + kBufferMemorySize < memoryUnderBudget) {