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/RenderDeviceD3D12Impl.cpp | 36 ++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'Graphics/GraphicsEngineD3D12') diff --git a/Graphics/GraphicsEngineD3D12/src/RenderDeviceD3D12Impl.cpp b/Graphics/GraphicsEngineD3D12/src/RenderDeviceD3D12Impl.cpp index e67ffb29..4522c226 100644 --- a/Graphics/GraphicsEngineD3D12/src/RenderDeviceD3D12Impl.cpp +++ b/Graphics/GraphicsEngineD3D12/src/RenderDeviceD3D12Impl.cpp @@ -22,6 +22,7 @@ */ #include "pch.h" +#include #include "RenderDeviceD3D12Impl.h" #include "PipelineStateD3D12Impl.h" #include "ShaderD3D12Impl.h" @@ -37,6 +38,26 @@ namespace Diligent { +static CComPtr DXGIAdapterFromD3D12Device(ID3D12Device* pd3d12Device) +{ + CComPtr pDXIFactory; + + HRESULT hr = CreateDXGIFactory1(__uuidof(pDXIFactory), reinterpret_cast(static_cast(&pDXIFactory))); + if (SUCCEEDED(hr)) + { + auto AdapterLUID = pd3d12Device->GetAdapterLuid(); + + CComPtr pDXGIAdapter1; + pDXIFactory->EnumAdapterByLuid(AdapterLUID, __uuidof(pDXGIAdapter1), reinterpret_cast(static_cast(&pDXGIAdapter1))); + return pDXGIAdapter1; + } + else + { + LOG_ERROR("Unable to create DXIFactory"); + } + return nullptr; +} + D3D_FEATURE_LEVEL RenderDeviceD3D12Impl::GetD3DFeatureLevel() const { D3D_FEATURE_LEVEL FeatureLevels[] = @@ -138,6 +159,21 @@ RenderDeviceD3D12Impl::RenderDeviceD3D12Impl(IReferenceCounters* pRefCo // so bindless resources are always available. // https://docs.microsoft.com/en-us/windows/win32/direct3d12/hardware-feature-levels#feature-level-support m_DeviceCaps.bBindlessSupported = True; + + if (auto pDXGIAdapter1 = DXGIAdapterFromD3D12Device(pd3d12Device)) + { + 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."); + } + } } RenderDeviceD3D12Impl::~RenderDeviceD3D12Impl() -- cgit v1.2.3