summaryrefslogtreecommitdiffstats
path: root/tools/gfx/d3d
diff options
context:
space:
mode:
authorskallweitNV <64953474+skallweitNV@users.noreply.github.com>2022-11-04 17:34:53 +0100
committerGitHub <noreply@github.com>2022-11-04 17:34:53 +0100
commit015bde8d5a46f32979c00dbb1feb4b3d80729c44 (patch)
treeb95713bb080d0fbcb11d9b2519b9166e11fe5dde /tools/gfx/d3d
parent9a3a4b08c8817905c2f608549c0e57216f8068c5 (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.cpp31
-rw-r--r--tools/gfx/d3d/d3d-util.h8
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);