From b2150e901f2f8923bb609a03d3342ed49b95ac4e Mon Sep 17 00:00:00 2001 From: Steve Karolewics Date: Thu, 30 Jan 2020 15:32:51 -0500 Subject: [PATCH] Fix D3D12 sharing test when the adapters used by D3D11/D3D12 differ D3D11 may default to a different adapter than D3D12. For the sharing test, both adapters must be D3D12 compatible. Tell D3D11 to use the adapter that D3D12 is using to ensure compatibility. Also fixed a memory leak in the test. --- util/test/demos/d3d11/d3d11_test.cpp | 14 +++++++---- util/test/demos/d3d11/d3d11_test.h | 6 ++--- util/test/demos/d3d12/d3d12_sharing.cpp | 32 ++++++++++--------------- util/test/demos/d3d12/d3d12_test.cpp | 2 +- util/test/demos/d3d12/d3d12_test.h | 2 +- 5 files changed, 28 insertions(+), 28 deletions(-) diff --git a/util/test/demos/d3d11/d3d11_test.cpp b/util/test/demos/d3d11/d3d11_test.cpp index d30557474..13e448a5c 100644 --- a/util/test/demos/d3d11/d3d11_test.cpp +++ b/util/test/demos/d3d11/d3d11_test.cpp @@ -132,7 +132,7 @@ void D3D11GraphicsTest::Prepare(int argc, char **argv) } } -bool D3D11GraphicsTest::Init() +bool D3D11GraphicsTest::Init(IDXGIAdapterPtr pAdapter) { if(!GraphicsTest::Init()) return false; @@ -148,7 +148,10 @@ bool D3D11GraphicsTest::Init() if(headless) { - hr = CreateDevice(adapters, NULL, features, flags); + if(pAdapter != NULL) + hr = CreateDevice({pAdapter}, NULL, features, flags); + else + hr = CreateDevice(adapters, NULL, features, flags); if(FAILED(hr)) { @@ -179,7 +182,10 @@ bool D3D11GraphicsTest::Init() swapDesc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD; swapDesc.Flags = 0; - hr = CreateDevice(adapters, &swapDesc, features, flags); + if(pAdapter != NULL) + hr = CreateDevice({pAdapter}, &swapDesc, features, flags); + else + hr = CreateDevice(adapters, &swapDesc, features, flags); if(FAILED(hr)) { @@ -216,7 +222,7 @@ GraphicsWindow *D3D11GraphicsTest::MakeWindow(int width, int height, const char return new Win32Window(width, height, title); } -HRESULT D3D11GraphicsTest::CreateDevice(std::vector &adaptersToTry, +HRESULT D3D11GraphicsTest::CreateDevice(const std::vector &adaptersToTry, DXGI_SWAP_CHAIN_DESC *swapDesc, D3D_FEATURE_LEVEL *features, UINT flags) { diff --git a/util/test/demos/d3d11/d3d11_test.h b/util/test/demos/d3d11/d3d11_test.h index cbcac811a..e46a3d6ea 100644 --- a/util/test/demos/d3d11/d3d11_test.h +++ b/util/test/demos/d3d11/d3d11_test.h @@ -46,12 +46,12 @@ struct D3D11GraphicsTest : public GraphicsTest static const TestAPI API = TestAPI::D3D11; void Prepare(int argc, char **argv); - bool Init(); + bool Init(IDXGIAdapterPtr pAdapter = NULL); void Shutdown(); GraphicsWindow *MakeWindow(int width, int height, const char *title); - HRESULT CreateDevice(std::vector &adaptersToTry, DXGI_SWAP_CHAIN_DESC *swapDesc, - D3D_FEATURE_LEVEL *features, UINT flags); + HRESULT CreateDevice(const std::vector &adaptersToTry, + DXGI_SWAP_CHAIN_DESC *swapDesc, D3D_FEATURE_LEVEL *features, UINT flags); void PostDeviceCreate(); enum BufType diff --git a/util/test/demos/d3d12/d3d12_sharing.cpp b/util/test/demos/d3d12/d3d12_sharing.cpp index 6921944ab..e637c7b5f 100644 --- a/util/test/demos/d3d12/d3d12_sharing.cpp +++ b/util/test/demos/d3d12/d3d12_sharing.cpp @@ -52,27 +52,18 @@ RD_TEST(D3D12_Sharing, D3D12GraphicsTest) if(!Init()) return 3; - if(!d3d11.Init()) + LUID luid = dev->GetAdapterLuid(); + IDXGIAdapterPtr pDXGIAdapter; + HRESULT hr = EnumAdapterByLuid(dev->GetAdapterLuid(), pDXGIAdapter); + if(FAILED(hr)) + return 2; + + if(!d3d11.Init(pDXGIAdapter)) return 4; - ID3D12DevicePtr dev2; - - { - LUID luid = dev->GetAdapterLuid(); - - IDXGIAdapterPtr pDXGIAdapter; - HRESULT hr = EnumAdapterByLuid(dev->GetAdapterLuid(), pDXGIAdapter); - std::vector adapters; - adapters.push_back(pDXGIAdapter); - - if(FAILED(hr)) - return 2; - - dev2 = CreateDevice(adapters, D3D_FEATURE_LEVEL_11_0); - - if(!dev2) - return 2; - } + ID3D12DevicePtr dev2 = CreateDevice({pDXGIAdapter}, D3D_FEATURE_LEVEL_11_0); + if(!dev2) + return 2; ID3DBlobPtr vsblob = Compile(D3DDefaultVertex, "main", "vs_4_0"); ID3DBlobPtr psblob = Compile(D3DDefaultPixel, "main", "ps_4_0"); @@ -173,6 +164,9 @@ RD_TEST(D3D12_Sharing, D3D12GraphicsTest) // wait on the fence from d3d11's work then continue queue->Wait(m_GPUSyncFence, m_GPUSyncCounter); + delete[] updateData; + updateData = NULL; + cmd = GetCommandBuffer(); Reset(cmd); diff --git a/util/test/demos/d3d12/d3d12_test.cpp b/util/test/demos/d3d12/d3d12_test.cpp index 109b0f9b9..c7734c8ad 100644 --- a/util/test/demos/d3d12/d3d12_test.cpp +++ b/util/test/demos/d3d12/d3d12_test.cpp @@ -425,7 +425,7 @@ HRESULT D3D12GraphicsTest::EnumAdapterByLuid(LUID luid, IDXGIAdapterPtr &pAdapte return E_FAIL; } -ID3D12DevicePtr D3D12GraphicsTest::CreateDevice(std::vector &adaptersToTry, +ID3D12DevicePtr D3D12GraphicsTest::CreateDevice(const std::vector &adaptersToTry, D3D_FEATURE_LEVEL features) { HRESULT hr = S_OK; diff --git a/util/test/demos/d3d12/d3d12_test.h b/util/test/demos/d3d12/d3d12_test.h index d90fc7186..6337d1349 100644 --- a/util/test/demos/d3d12/d3d12_test.h +++ b/util/test/demos/d3d12/d3d12_test.h @@ -52,7 +52,7 @@ struct D3D12GraphicsTest : public GraphicsTest GraphicsWindow *MakeWindow(int width, int height, const char *title); HRESULT EnumAdapterByLuid(LUID luid, IDXGIAdapterPtr &pAdapter); - ID3D12DevicePtr CreateDevice(std::vector &adaptersToTry, + ID3D12DevicePtr CreateDevice(const std::vector &adaptersToTry, D3D_FEATURE_LEVEL features); enum BufType