Get Adapter info and log them

This commit is contained in:
2025-01-12 12:07:04 -05:00
parent 434f15a9d4
commit 312e139a97

View File

@@ -99,8 +99,6 @@ namespace Juliet
return true;
}
#ifdef IDXGIINFOQUEUE_SUPPORTED
void InitializeDebugLayer(NonNullPtr<D3D12Renderer> 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<void**>(&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<GraphicsDevice*>(Calloc(1, sizeof(GraphicsDevice)));
device->DestroyDevice = DestroyGraphicsDevice;
device->Renderer = renderer;