From 92ff49957f32bb14695079f14d490d581f518368 Mon Sep 17 00:00:00 2001 From: Bryan Bernhart Date: Fri, 16 Sep 2022 16:56:01 -0700 Subject: [PATCH] Fix replay failures due to wrong creation-snapshot sequence by ResourceAllocator. --- src/gpgmm/d3d12/JSONSerializerD3D12.cpp | 10 +++++++++- src/gpgmm/d3d12/ResourceAllocatorD3D12.cpp | 8 +++++--- .../capture_replay_tests/D3D12EventTraceReplay.cpp | 2 +- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/gpgmm/d3d12/JSONSerializerD3D12.cpp b/src/gpgmm/d3d12/JSONSerializerD3D12.cpp index 5c69e3ac4..d78e3894c 100644 --- a/src/gpgmm/d3d12/JSONSerializerD3D12.cpp +++ b/src/gpgmm/d3d12/JSONSerializerD3D12.cpp @@ -40,9 +40,12 @@ namespace gpgmm::d3d12 { dict.AddItem("Flags", desc.Flags); dict.AddItem("RecordOptions", Serialize(desc.RecordOptions)); dict.AddItem("ResourceHeapTier", desc.ResourceHeapTier); + dict.AddItem("SubAllocationAlgorithm", desc.SubAllocationAlgorithm); + dict.AddItem("PoolAlgorithm", desc.PoolAlgorithm); dict.AddItem("PreferredResourceHeapSize", desc.PreferredResourceHeapSize); dict.AddItem("MaxResourceHeapSize", desc.MaxResourceHeapSize); dict.AddItem("MemoryFragmentationLimit", desc.MemoryFragmentationLimit); + dict.AddItem("MemoryGrowthFactor", desc.MemoryGrowthFactor); return dict; } @@ -166,7 +169,9 @@ namespace gpgmm::d3d12 { dict.AddItem("Alignment", desc.Alignment); dict.AddItem("Flags", desc.Flags); dict.AddItem("MemorySegmentGroup", desc.MemorySegmentGroup); - dict.AddItem("DebugName", desc.DebugName); + if (!desc.DebugName.empty()) { + dict.AddItem("DebugName", desc.DebugName); + } return dict; } @@ -247,7 +252,10 @@ namespace gpgmm::d3d12 { JSONDict JSONSerializer::Serialize(const RESIDENCY_DESC& desc) { JSONDict dict; dict.AddItem("IsUMA", desc.IsUMA); + dict.AddItem("Flags", desc.Flags); + dict.AddItem("RecordOptions", Serialize(desc.RecordOptions)); dict.AddItem("MaxPctOfVideoMemoryToBudget", desc.MaxPctOfVideoMemoryToBudget); + dict.AddItem("MinPctOfBudgetToReserve", desc.MinPctOfBudgetToReserve); dict.AddItem("MaxBudgetInBytes", desc.MaxBudgetInBytes); dict.AddItem("EvictSizeInBytes", desc.EvictSizeInBytes); dict.AddItem("InitialFenceValue", desc.InitialFenceValue); diff --git a/src/gpgmm/d3d12/ResourceAllocatorD3D12.cpp b/src/gpgmm/d3d12/ResourceAllocatorD3D12.cpp index d70129507..2d8dd834b 100644 --- a/src/gpgmm/d3d12/ResourceAllocatorD3D12.cpp +++ b/src/gpgmm/d3d12/ResourceAllocatorD3D12.cpp @@ -472,11 +472,13 @@ namespace gpgmm::d3d12 { "management was not enabled."; } - GPGMM_TRACE_EVENT_OBJECT_SNAPSHOT(*ppResourceAllocatorOut, newDescriptor); + std::unique_ptr resourceAllocator = std::unique_ptr( + new ResourceAllocator(newDescriptor, pResidencyManager, std::move(caps))); + + GPGMM_TRACE_EVENT_OBJECT_SNAPSHOT(resourceAllocator.get(), newDescriptor); if (ppResourceAllocatorOut != nullptr) { - *ppResourceAllocatorOut = - new ResourceAllocator(newDescriptor, pResidencyManager, std::move(caps)); + *ppResourceAllocatorOut = resourceAllocator.release(); } return S_OK; diff --git a/src/tests/capture_replay_tests/D3D12EventTraceReplay.cpp b/src/tests/capture_replay_tests/D3D12EventTraceReplay.cpp index b0d33b1e5..8a6b19b1e 100644 --- a/src/tests/capture_replay_tests/D3D12EventTraceReplay.cpp +++ b/src/tests/capture_replay_tests/D3D12EventTraceReplay.cpp @@ -311,7 +311,7 @@ class D3D12EventTraceReplay : public D3D12TestBase, public CaptureReplayTestWith RESIDENCY_DESC residencyDesc = {}; residencyDesc.Device = mDevice; residencyDesc.Adapter = mAdapter; - residencyDesc.IsUMA = snapshot["IsUMA"].asBool(); + residencyDesc.IsUMA = mIsUMA; residencyDesc.MaxPctOfVideoMemoryToBudget = snapshot["MaxPctOfVideoMemoryToBudget"].asFloat(); residencyDesc.MaxBudgetInBytes = snapshot["MaxBudgetInBytes"].asUInt64();