From 11ea2a4fc541ac9a1371a833bbf2d38add98b103 Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Tue, 17 Mar 2026 03:54:50 +0800 Subject: [PATCH] Fix GPU state issue - make device non-static per test - Each test now creates its own D3D12 device, command queue, allocator, and command list - Properly cleanup in TearDown to avoid GPU state issues - All 29 tests now pass --- tests/RHI/D3D12/fixtures/D3D12TestFixture.cpp | 22 +++++++------------ tests/RHI/D3D12/fixtures/D3D12TestFixture.h | 2 +- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/tests/RHI/D3D12/fixtures/D3D12TestFixture.cpp b/tests/RHI/D3D12/fixtures/D3D12TestFixture.cpp index f17ff6f3..94cc5e12 100644 --- a/tests/RHI/D3D12/fixtures/D3D12TestFixture.cpp +++ b/tests/RHI/D3D12/fixtures/D3D12TestFixture.cpp @@ -1,8 +1,12 @@ #include "D3D12TestFixture.h" -ComPtr D3D12TestFixture::mDevice; - void D3D12TestFixture::SetUpTestSuite() { +} + +void D3D12TestFixture::TearDownTestSuite() { +} + +void D3D12TestFixture::SetUp() { HRESULT hr = D3D12CreateDevice( nullptr, D3D_FEATURE_LEVEL_12_0, @@ -13,22 +17,11 @@ void D3D12TestFixture::SetUpTestSuite() { GTEST_SKIP() << "Failed to create D3D12 device"; return; } -} - -void D3D12TestFixture::TearDownTestSuite() { - mDevice.Reset(); -} - -void D3D12TestFixture::SetUp() { - if (!mDevice) { - GTEST_SKIP() << "D3D12 device not available"; - return; - } D3D12_COMMAND_QUEUE_DESC queueDesc = {}; queueDesc.Type = D3D12_COMMAND_LIST_TYPE_DIRECT; - HRESULT hr = mDevice->CreateCommandQueue(&queueDesc, IID_PPV_ARGS(&mCommandQueue)); + hr = mDevice->CreateCommandQueue(&queueDesc, IID_PPV_ARGS(&mCommandQueue)); if (FAILED(hr)) { GTEST_SKIP() << "Failed to create command queue"; return; @@ -54,6 +47,7 @@ void D3D12TestFixture::TearDown() { mCommandList.Reset(); mCommandAllocator.Reset(); mCommandQueue.Reset(); + mDevice.Reset(); } void D3D12TestFixture::WaitForGPU() { diff --git a/tests/RHI/D3D12/fixtures/D3D12TestFixture.h b/tests/RHI/D3D12/fixtures/D3D12TestFixture.h index 3e36d893..a0ac4597 100644 --- a/tests/RHI/D3D12/fixtures/D3D12TestFixture.h +++ b/tests/RHI/D3D12/fixtures/D3D12TestFixture.h @@ -29,7 +29,7 @@ protected: void WaitForGPU(); private: - static ComPtr mDevice; + ComPtr mDevice; ComPtr mCommandQueue; ComPtr mCommandAllocator; ComPtr mCommandList;