Skip to content

Commit cd830fe

Browse files
committed
Add EXPECT_REFCOUNT_EQ for D3D12 device at end of test.
1 parent 8c3e9d6 commit cd830fe

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

src/tests/D3D12Test.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,10 @@ namespace gpgmm::d3d12 {
124124

125125
void D3D12TestBase::TearDown() {
126126
GPGMMTestBase::TearDown();
127+
128+
// Check that nothing was leaked from the D3D12 device.
129+
// If the test doesn't fully clean-up itself, this will trip.
130+
EXPECT_REFCOUNT_EQ(mDevice.Get(), 1);
127131
}
128132

129133
RESOURCE_ALLOCATOR_DESC D3D12TestBase::CreateBasicAllocatorDesc() const {

src/tests/end2end/D3D12ResidencyManagerTests.cpp

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
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.
909910
TEST_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

Comments
 (0)