Get Adapter info and log them
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user