From 312e139a9784185c5e759b72c32a5d4e00cdd335 Mon Sep 17 00:00:00 2001 From: Patedam Date: Sun, 12 Jan 2025 12:07:04 -0500 Subject: [PATCH] Get Adapter info and log them --- .../src/Graphics/D3D12/DX12GraphicsDevice.cpp | 55 +++++++++++++++---- 1 file changed, 43 insertions(+), 12 deletions(-) diff --git a/Juliet/src/Graphics/D3D12/DX12GraphicsDevice.cpp b/Juliet/src/Graphics/D3D12/DX12GraphicsDevice.cpp index b46048a..8611a2f 100644 --- a/Juliet/src/Graphics/D3D12/DX12GraphicsDevice.cpp +++ b/Juliet/src/Graphics/D3D12/DX12GraphicsDevice.cpp @@ -99,8 +99,6 @@ namespace Juliet return true; } - - #ifdef IDXGIINFOQUEUE_SUPPORTED void InitializeDebugLayer(NonNullPtr renderer) { @@ -127,9 +125,12 @@ namespace Juliet } else { - IDXGIInfoQueue_SetBreakOnSeverity(renderer->DXGIInfoQueue, DXGI_DEBUG_ALL, DXGI_INFO_QUEUE_MESSAGE_SEVERITY_ERROR, TRUE); - IDXGIInfoQueue_SetBreakOnSeverity(renderer->DXGIInfoQueue, DXGI_DEBUG_ALL, DXGI_INFO_QUEUE_MESSAGE_SEVERITY_CORRUPTION, TRUE); - IDXGIInfoQueue_SetBreakOnSeverity(renderer->DXGIInfoQueue, DXGI_DEBUG_ALL, DXGI_INFO_QUEUE_MESSAGE_SEVERITY_WARNING, TRUE); + IDXGIInfoQueue_SetBreakOnSeverity(renderer->DXGIInfoQueue, DXGI_DEBUG_ALL, + DXGI_INFO_QUEUE_MESSAGE_SEVERITY_ERROR, TRUE); + IDXGIInfoQueue_SetBreakOnSeverity(renderer->DXGIInfoQueue, DXGI_DEBUG_ALL, + DXGI_INFO_QUEUE_MESSAGE_SEVERITY_CORRUPTION, TRUE); + IDXGIInfoQueue_SetBreakOnSeverity(renderer->DXGIInfoQueue, DXGI_DEBUG_ALL, + DXGI_INFO_QUEUE_MESSAGE_SEVERITY_WARNING, TRUE); } } } @@ -144,7 +145,8 @@ namespace Juliet renderer->DXGIDebug = nullptr; } - if (renderer->DXGIDebug_DLL) { + if (renderer->DXGIDebug_DLL) + { FreeLibrary(renderer->DXGIDebug_DLL); renderer->DXGIDebug_DLL = nullptr; } @@ -208,19 +210,23 @@ namespace Juliet { renderer->IsTearingSupported = false; } - IDXGIFactory1_Release(factory5); + IDXGIFactory5_Release(factory5); } + // If available use DXGI1.6 to fetch the good graphics card. + // 1.6 should be available on most Win10 PC if they didnt their windows update. + // Lets support not having it for now... IDXGIFactory6* factory6 = nullptr; result = IDXGIFactory4_QueryInterface(renderer->DXGIFactory, IID_IDXGIFactory6, (void**)&factory6); if (SUCCEEDED(result)) { // TODO: Put into the config - const static bool useHighPerfFirst = true; - result = IDXGIFactory6_EnumAdapterByGpuPreference(factory6, 0, - useHighPerfFirst ? DXGI_GPU_PREFERENCE_MINIMUM_POWER - : DXGI_GPU_PREFERENCE_HIGH_PERFORMANCE, - IID_IDXGIAdapter1, (void**)&renderer->DXGIAdapter); + static constexpr bool useLowPower = false; + result = IDXGIFactory6_EnumAdapterByGpuPreference(factory6, 0, + useLowPower ? DXGI_GPU_PREFERENCE_MINIMUM_POWER + : DXGI_GPU_PREFERENCE_HIGH_PERFORMANCE, + IID_IDXGIAdapter1, + reinterpret_cast(&renderer->DXGIAdapter)); IDXGIFactory6_Release(factory6); } else @@ -235,6 +241,31 @@ namespace Juliet return nullptr; } + // Adapter is setup, get all the relevant info in the descriptor + DXGI_ADAPTER_DESC1 adapterDesc; + result = IDXGIAdapter1_GetDesc1(renderer->DXGIAdapter, &adapterDesc); + if (FAILED(result)) + { + DestroyRenderer_Internal(renderer); + Assert(false && "Could not get DXGIAdapter description"); + return nullptr; + } + + // Driver version + LARGE_INTEGER umdVersion; + result = IDXGIAdapter1_CheckInterfaceSupport(renderer->DXGIAdapter, IID_IDXGIDevice, &umdVersion); + if (FAILED(result)) + { + DestroyRenderer_Internal(renderer); + Assert(false && "Could not get DXGIAdapter driver version"); + return nullptr; + } + + Log(LogLevel::Message, LogCategory::Graphics, "D3D12 Renderer Infos:"); + Log(LogLevel::Message, LogCategory::Graphics, "D3D12 Adapter: %S", adapterDesc.Description); + Log(LogLevel::Message, LogCategory::Graphics, "D3D12 Driver Version: %d.%d.%d.%d", HIWORD(umdVersion.HighPart), + LOWORD(umdVersion.HighPart), HIWORD(umdVersion.LowPart), LOWORD(umdVersion.LowPart)); + auto device = static_cast(Calloc(1, sizeof(GraphicsDevice))); device->DestroyDevice = DestroyGraphicsDevice; device->Renderer = renderer;