1616
1717#include " gpgmm/common/SizeClass.h"
1818#include " gpgmm/d3d12/CapsD3D12.h"
19+ #include " gpgmm/d3d12/FenceD3D12.h"
1920#include " gpgmm/d3d12/ResourceHeapAllocatorD3D12.h"
2021#include " gpgmm/d3d12/UtilsD3D12.h"
2122
@@ -907,9 +908,12 @@ TEST_F(D3D12ResidencyManagerTests, OverBudgetWithMappedResources) {
907908// swaps the residency status using ExecuteCommandList: first set gets paged-in again, second set
908909// gets paged-out.
909910TEST_F (D3D12ResidencyManagerTests, OverBudgetExecuteCommandList) {
911+ RESIDENCY_MANAGER_DESC residencyManagerDesc = CreateBasicResidencyDesc (kDefaultBudget );
912+ residencyManagerDesc.InitialFenceValue = 0 ;
913+
910914 ComPtr<IResidencyManager> residencyManager;
911- ASSERT_SUCCEEDED (CreateResidencyManager (CreateBasicResidencyDesc ( kDefaultBudget ), mDevice .Get (),
912- mAdapter . Get (), &residencyManager));
915+ ASSERT_SUCCEEDED (CreateResidencyManager (residencyManagerDesc, mDevice . Get ( ), mAdapter .Get (),
916+ &residencyManager));
913917
914918 ComPtr<IResourceAllocator> resourceAllocator;
915919 ASSERT_SUCCEEDED (CreateResourceAllocator (CreateBasicAllocatorDesc (), mDevice .Get (),
@@ -969,13 +973,25 @@ TEST_F(D3D12ResidencyManagerTests, OverBudgetExecuteCommandList) {
969973 // Command list must be closed before calling ExecuteCommandLists.
970974 ASSERT_SUCCEEDED (commandList->Close ());
971975
976+ std::unique_ptr<Fence> fence;
977+ {
978+ Fence* fencePtr = nullptr ;
979+ ASSERT_SUCCEEDED (
980+ Fence::CreateFence (mDevice .Get (), residencyManagerDesc.InitialFenceValue , &fencePtr));
981+ fence.reset (fencePtr);
982+ }
983+
984+ ASSERT_SUCCEEDED (fence->Signal (queue.Get ()));
985+
972986 {
973987 IResidencyList* residencyLists[] = {firstSetOfHeapsWorkingSet.Get ()};
974988 ID3D12CommandList* commandLists[] = {commandList.Get ()};
975989 ASSERT_SUCCEEDED (
976990 residencyManager->ExecuteCommandLists (queue.Get (), commandLists, residencyLists, 1 ));
977991 }
978992
993+ ASSERT_SUCCEEDED (fence->WaitFor (fence->GetLastSignaledFence ()));
994+
979995 // Everything below the budget should now be resident.
980996 for (auto & allocation : firstSetOfHeaps) {
981997 EXPECT_EQ (allocation->GetMemory ()->GetInfo ().Status , RESIDENCY_HEAP_STATUS_RESIDENT);
@@ -994,13 +1010,17 @@ TEST_F(D3D12ResidencyManagerTests, OverBudgetExecuteCommandList) {
9941010 secondSetOfHeapsWorkingSet->Add (allocation->GetMemory ());
9951011 }
9961012
1013+ ASSERT_SUCCEEDED (fence->Signal (queue.Get ()));
1014+
9971015 {
9981016 IResidencyList* residencyLists[] = {secondSetOfHeapsWorkingSet.Get ()};
9991017 ID3D12CommandList* commandLists[] = {commandList.Get ()};
10001018 ASSERT_SUCCEEDED (
10011019 residencyManager->ExecuteCommandLists (queue.Get (), commandLists, residencyLists, 1 ));
10021020 }
10031021
1022+ ASSERT_SUCCEEDED (fence->WaitFor (fence->GetLastSignaledFence ()));
1023+
10041024 // Everything below the budget should now be evicted.
10051025 for (auto & allocation : firstSetOfHeaps) {
10061026 EXPECT_EQ (allocation->GetMemory ()->GetInfo ().Status , RESIDENCY_HEAP_STATUS_EVICTED);
0 commit comments