diff options
Diffstat (limited to 'Tests/TestApp/src/TestApp.cpp')
| -rw-r--r-- | Tests/TestApp/src/TestApp.cpp | 54 |
1 files changed, 52 insertions, 2 deletions
diff --git a/Tests/TestApp/src/TestApp.cpp b/Tests/TestApp/src/TestApp.cpp index 97dd72e..783a7e4 100644 --- a/Tests/TestApp/src/TestApp.cpp +++ b/Tests/TestApp/src/TestApp.cpp @@ -23,6 +23,7 @@ #include <sstream> #include <math.h> +#include <iomanip> #include "PlatformDefinitions.h" #include "TestApp.h" @@ -89,6 +90,8 @@ void TestApp::InitializeDiligentEngine( SCDesc.SamplesCount = 1; Uint32 NumDeferredCtx = 0; std::vector<IDeviceContext*> ppContexts; + std::vector<HardwareAdapterAttribs> Adapters; + std::vector<std::vector<DisplayModeAttribs>> AdapterDisplayModes; switch (m_DeviceType) { #if D3D11_SUPPORTED @@ -100,8 +103,23 @@ void TestApp::InitializeDiligentEngine( // Load the dll and import GetEngineFactoryD3D11() function LoadGraphicsEngineD3D11(GetEngineFactoryD3D11); #endif - ppContexts.resize(1 + NumDeferredCtx); auto *pFactoryD3D11 = GetEngineFactoryD3D11(); + Uint32 NumAdapters = 0; + pFactoryD3D11->EnumerateHardwareAdapters(NumAdapters, 0); + Adapters.resize(NumAdapters); + pFactoryD3D11->EnumerateHardwareAdapters(NumAdapters, Adapters.data()); + + for(Uint32 i=0; i < Adapters.size(); ++i) + { + Uint32 NumDisplayModes = 0; + std::vector<DisplayModeAttribs> DisplayModes; + pFactoryD3D11->EnumerateDisplayModes(i, 0, TEX_FORMAT_RGBA8_UNORM, NumDisplayModes, nullptr); + DisplayModes.resize(NumDisplayModes); + pFactoryD3D11->EnumerateDisplayModes(i, 0, TEX_FORMAT_RGBA8_UNORM, NumDisplayModes, DisplayModes.data()); + AdapterDisplayModes.emplace_back(std::move(DisplayModes)); + } + + ppContexts.resize(1 + NumDeferredCtx); pFactoryD3D11->CreateDeviceAndContextsD3D11(DeviceAttribs, &m_pDevice, ppContexts.data(), NumDeferredCtx); if(NativeWindowHandle != nullptr) @@ -118,9 +136,25 @@ void TestApp::InitializeDiligentEngine( // Load the dll and import GetEngineFactoryD3D12() function LoadGraphicsEngineD3D12(GetEngineFactoryD3D12); #endif + auto *pFactoryD3D12 = GetEngineFactoryD3D12(); + Uint32 NumAdapters = 0; + pFactoryD3D12->EnumerateHardwareAdapters(NumAdapters, 0); + Adapters.resize(NumAdapters); + pFactoryD3D12->EnumerateHardwareAdapters(NumAdapters, Adapters.data()); + + for (Uint32 i = 0; i < Adapters.size(); ++i) + { + Uint32 NumDisplayModes = 0; + std::vector<DisplayModeAttribs> DisplayModes; + pFactoryD3D12->EnumerateDisplayModes(i, 0, TEX_FORMAT_RGBA8_UNORM, NumDisplayModes, nullptr); + DisplayModes.resize(NumDisplayModes); + pFactoryD3D12->EnumerateDisplayModes(i, 0, TEX_FORMAT_RGBA8_UNORM, NumDisplayModes, DisplayModes.data()); + AdapterDisplayModes.emplace_back(std::move(DisplayModes)); + } + EngineD3D12Attribs EngD3D12Attribs; ppContexts.resize(1 + NumDeferredCtx); - auto *pFactoryD3D12 = GetEngineFactoryD3D12(); + pFactoryD3D12->CreateDeviceAndContextsD3D12(EngD3D12Attribs, &m_pDevice, ppContexts.data(), NumDeferredCtx); if (!m_pSwapChain && NativeWindowHandle != nullptr) @@ -165,6 +199,22 @@ void TestApp::InitializeDiligentEngine( break; } + + std::stringstream ss; + ss << "Found " << Adapters.size() << " adapters:\n"; + for (Uint32 i = 0; i < Adapters.size(); ++i) + { + ss << Adapters[i].Description << " (" << (Adapters[i].DedicatedVideoMemory >> 20) << " MB). Num outputs: " << Adapters[i].NumOutputs << ". Display modes:\n"; + const auto &DisplayModes = AdapterDisplayModes[i]; + for(Uint32 m=0; m < DisplayModes.size(); ++m) + { + const auto &Mode = DisplayModes[m]; + ss << " " << Mode.Width << 'x' << Mode.Height << " " << std::setprecision(2) << Mode.RefreshRate << "Hz\n"; + } + } + auto str = ss.str(); + LOG_INFO_MESSAGE(str); + m_pImmediateContext.Attach(ppContexts[0]); m_pDeferredContexts.resize(NumDeferredCtx); for (Diligent::Uint32 ctx = 0; ctx < NumDeferredCtx; ++ctx) |
