diff options
| author | skallweitNV <64953474+skallweitNV@users.noreply.github.com> | 2022-11-04 17:34:53 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-04 17:34:53 +0100 |
| commit | 015bde8d5a46f32979c00dbb1feb4b3d80729c44 (patch) | |
| tree | b95713bb080d0fbcb11d9b2519b9166e11fe5dde /tools/gfx/d3d | |
| parent | 9a3a4b08c8817905c2f608549c0e57216f8068c5 (diff) | |
Add AdapterLUID to identify GPU adapters (#2492)
* Add AdapterLUID to identify GPU adapters
* Remove adapter option in render-test
Diffstat (limited to 'tools/gfx/d3d')
| -rw-r--r-- | tools/gfx/d3d/d3d-util.cpp | 31 | ||||
| -rw-r--r-- | tools/gfx/d3d/d3d-util.h | 8 |
2 files changed, 17 insertions, 22 deletions
diff --git a/tools/gfx/d3d/d3d-util.cpp b/tools/gfx/d3d/d3d-util.cpp index e50ddaa80..dff93810c 100644 --- a/tools/gfx/d3d/d3d-util.cpp +++ b/tools/gfx/d3d/d3d-util.cpp @@ -163,7 +163,7 @@ D3D12_DEPTH_STENCILOP_DESC D3DUtil::translateStencilOpDesc(DepthStencilOpDesc de case Format::R16G16B16A16_UINT: return DXGI_FORMAT_R16G16B16A16_UINT; case Format::R16G16_UINT: return DXGI_FORMAT_R16G16_UINT; case Format::R16_UINT: return DXGI_FORMAT_R16_UINT; - + case Format::R8G8B8A8_UINT: return DXGI_FORMAT_R8G8B8A8_UINT; case Format::R8G8_UINT: return DXGI_FORMAT_R8G8_UINT; case Format::R8_UINT: return DXGI_FORMAT_R8_UINT; @@ -550,26 +550,21 @@ bool D3DUtil::isTypeless(DXGI_FORMAT format) } } -/* static */SlangResult D3DUtil::findAdapters(DeviceCheckFlags flags, const Slang::UnownedStringSlice& adapaterName, List<ComPtr<IDXGIAdapter>>& outDxgiAdapters) +/* static */SlangResult D3DUtil::findAdapters(DeviceCheckFlags flags, const AdapterLUID* adapterLUID, List<ComPtr<IDXGIAdapter>>& outDxgiAdapters) { ComPtr<IDXGIFactory> factory; SLANG_RETURN_ON_FAIL(createFactory(flags, factory)); - return findAdapters(flags, adapaterName, factory, outDxgiAdapters); + return findAdapters(flags, adapterLUID, factory, outDxgiAdapters); } -static bool _isMatch(IDXGIAdapter* adapter, const Slang::UnownedStringSlice& lowerAdapaterName) +/* static */ AdapterLUID D3DUtil::getAdapterLUID(IDXGIAdapter* dxgiAdapter) { - if (lowerAdapaterName.getLength() == 0) - { - return true; - } - DXGI_ADAPTER_DESC desc; - adapter->GetDesc(&desc); - - String descName = String::fromWString(desc.Description).toLower(); - - return descName.indexOf(lowerAdapaterName) != Index(-1); + dxgiAdapter->GetDesc(&desc); + AdapterLUID luid = {}; + SLANG_ASSERT(sizeof(AdapterLUID) >= sizeof(LUID)); + memcpy(&luid, &desc.AdapterLuid, sizeof(LUID)); + return luid; } /* static */bool D3DUtil::isWarp(IDXGIFactory* dxgiFactory, IDXGIAdapter* adapterIn) @@ -841,10 +836,8 @@ D3D12_RESOURCE_STATES D3DUtil::getResourceState(ResourceState state) } } -/* static */SlangResult D3DUtil::findAdapters(DeviceCheckFlags flags, const UnownedStringSlice& adapterName, IDXGIFactory* dxgiFactory, List<ComPtr<IDXGIAdapter>>& outDxgiAdapters) +/* static */SlangResult D3DUtil::findAdapters(DeviceCheckFlags flags, const AdapterLUID* adapterLUID, IDXGIFactory* dxgiFactory, List<ComPtr<IDXGIAdapter>>& outDxgiAdapters) { - Slang::String lowerAdapterName = Slang::String(adapterName).toLower(); - outDxgiAdapters.clear(); ComPtr<IDXGIAdapter> warpAdapter; @@ -854,7 +847,7 @@ D3D12_RESOURCE_STATES D3DUtil::getResourceState(ResourceState state) if (SLANG_SUCCEEDED(dxgiFactory->QueryInterface(IID_PPV_ARGS(dxgiFactory4.writeRef())))) { dxgiFactory4->EnumWarpAdapter(IID_PPV_ARGS(warpAdapter.writeRef())); - if (_isMatch(warpAdapter, lowerAdapterName.getUnownedSlice())) + if (!adapterLUID || D3DUtil::getAdapterLUID(warpAdapter) == *adapterLUID) { outDxgiAdapters.add(warpAdapter); } @@ -872,7 +865,7 @@ D3D12_RESOURCE_STATES D3DUtil::getResourceState(ResourceState state) { continue; } - if (!_isMatch(dxgiAdapter, lowerAdapterName.getUnownedSlice())) + if (adapterLUID && D3DUtil::getAdapterLUID(dxgiAdapter) != *adapterLUID) { continue; } diff --git a/tools/gfx/d3d/d3d-util.h b/tools/gfx/d3d/d3d-util.h index 34feabc7f..4e5880c0a 100644 --- a/tools/gfx/d3d/d3d-util.h +++ b/tools/gfx/d3d/d3d-util.h @@ -78,16 +78,18 @@ class D3DUtil /// Append text in in, into wide char array static void appendWideChars(const char* in, Slang::List<wchar_t>& out); - + static SlangResult createFactory(DeviceCheckFlags flags, Slang::ComPtr<IDXGIFactory>& outFactory); /// Get the dxgiModule static HMODULE getDxgiModule(); /// Find adapters - static SlangResult findAdapters(DeviceCheckFlags flags, const Slang::UnownedStringSlice& adapaterName, IDXGIFactory* dxgiFactory, Slang::List<Slang::ComPtr<IDXGIAdapter>>& dxgiAdapters); + static SlangResult findAdapters(DeviceCheckFlags flags, const AdapterLUID* adapterLUID, IDXGIFactory* dxgiFactory, Slang::List<Slang::ComPtr<IDXGIAdapter>>& dxgiAdapters); /// Find adapters - static SlangResult findAdapters(DeviceCheckFlags flags, const Slang::UnownedStringSlice& adapaterName, Slang::List<Slang::ComPtr<IDXGIAdapter>>& dxgiAdapters); + static SlangResult findAdapters(DeviceCheckFlags flags, const AdapterLUID* adapterLUID, Slang::List<Slang::ComPtr<IDXGIAdapter>>& dxgiAdapters); + + static AdapterLUID getAdapterLUID(IDXGIAdapter* dxgiAdapter); /// True if the adapter is warp static bool isWarp(IDXGIFactory* dxgiFactory, IDXGIAdapter* adapter); |
