From 9ead3562fb06c14098b7885cc7c736ea4bbc292c Mon Sep 17 00:00:00 2001 From: assiduous Date: Fri, 27 Dec 2019 21:13:26 -0800 Subject: Added AdapterType member to DeviceCaps struct (API Version 240048) --- .../src/RenderDeviceD3D11Impl.cpp | 43 ++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'Graphics/GraphicsEngineD3D11') diff --git a/Graphics/GraphicsEngineD3D11/src/RenderDeviceD3D11Impl.cpp b/Graphics/GraphicsEngineD3D11/src/RenderDeviceD3D11Impl.cpp index d54b82e7..7b95aef3 100644 --- a/Graphics/GraphicsEngineD3D11/src/RenderDeviceD3D11Impl.cpp +++ b/Graphics/GraphicsEngineD3D11/src/RenderDeviceD3D11Impl.cpp @@ -40,6 +40,34 @@ namespace Diligent { +static CComPtr DXGIAdapterFromD3D11Device(ID3D11Device* pd3d11Device) +{ + CComPtr pDXGIDevice; + + auto hr = pd3d11Device->QueryInterface(__uuidof(pDXGIDevice), reinterpret_cast(static_cast(&pDXGIDevice))); + if (SUCCEEDED(hr)) + { + CComPtr pDXGIAdapter; + hr = pDXGIDevice->GetAdapter(&pDXGIAdapter); + if (SUCCEEDED(hr)) + { + CComPtr pDXGIAdapter1; + pDXGIAdapter->QueryInterface(__uuidof(pDXGIAdapter1), reinterpret_cast(static_cast(&pDXGIAdapter1))); + return pDXGIAdapter1; + } + else + { + LOG_ERROR("Failed to get DXGI Adapter from DXGI Device."); + } + } + else + { + LOG_ERROR("Failed to query IDXGIDevice from D3D device."); + } + + return nullptr; +} + RenderDeviceD3D11Impl::RenderDeviceD3D11Impl(IReferenceCounters* pRefCounters, IMemoryAllocator& RawMemAllocator, IEngineFactory* pEngineFactory, @@ -96,6 +124,21 @@ RenderDeviceD3D11Impl::RenderDeviceD3D11Impl(IReferenceCounters* pRefCo // above 11.0 (for example, 11.1 or 12.0), so bindless resources are never available. // https://docs.microsoft.com/en-us/windows/win32/direct3d11/overviews-direct3d-11-devices-downlevel-intro#overview-for-each-feature-level m_DeviceCaps.bBindlessSupported = False; + + if (auto pDXGIAdapter1 = DXGIAdapterFromD3D11Device(pd3d11Device)) + { + DXGI_ADAPTER_DESC1 AdapterDesc = {}; + + auto hr = pDXGIAdapter1->GetDesc1(&AdapterDesc); + if (SUCCEEDED(hr)) + { + m_DeviceCaps.AdaterType = (AdapterDesc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE) ? ADAPTER_TYPE_SOFTWARE : ADAPTER_TYPE_HARDWARE; + } + else + { + LOG_ERROR_MESSAGE("Failed to get DXGIDevice adapter desc. Adapter type will be unknown."); + } + } } void RenderDeviceD3D11Impl::TestTextureFormat(TEXTURE_FORMAT TexFormat) -- cgit v1.2.3