diff --git a/Samples/Desktop/D3D12Raytracing/src/D3D12RaytracingHelloWorld/DeviceResources.cpp b/Samples/Desktop/D3D12Raytracing/src/D3D12RaytracingHelloWorld/DeviceResources.cpp index 6e89c11fc..6ec18c4b2 100644 --- a/Samples/Desktop/D3D12Raytracing/src/D3D12RaytracingHelloWorld/DeviceResources.cpp +++ b/Samples/Desktop/D3D12Raytracing/src/D3D12RaytracingHelloWorld/DeviceResources.cpp @@ -597,14 +597,20 @@ void DeviceResources::MoveToNextFrame() m_fenceValues[m_backBufferIndex] = currentFenceValue + 1; } -// This method acquires the first available hardware adapter that supports Direct3D 12. +// This method acquires the first high-performance hardware adapter that supports Direct3D 12. // If no such adapter can be found, try WARP. Otherwise throw an exception. void DeviceResources::InitializeAdapter(IDXGIAdapter1** ppAdapter) { *ppAdapter = nullptr; ComPtr adapter; - for (UINT adapterID = 0; DXGI_ERROR_NOT_FOUND != m_dxgiFactory->EnumAdapters1(adapterID, &adapter); ++adapterID) + ComPtr factory6; + HRESULT hr = m_dxgiFactory.As(&factory6); + if (FAILED(hr)) + { + throw exception("DXGI 1.6 not supported"); + } + for (UINT adapterID = 0; DXGI_ERROR_NOT_FOUND != factory6->EnumAdapterByGpuPreference(adapterID, DXGI_GPU_PREFERENCE_HIGH_PERFORMANCE, IID_PPV_ARGS(&adapter)); ++adapterID) { if (m_adapterIDoverride != UINT_MAX && adapterID != m_adapterIDoverride) { diff --git a/Samples/Desktop/D3D12Raytracing/src/D3D12RaytracingLibrarySubobjects/DeviceResources.cpp b/Samples/Desktop/D3D12Raytracing/src/D3D12RaytracingLibrarySubobjects/DeviceResources.cpp index 6e89c11fc..6ec18c4b2 100644 --- a/Samples/Desktop/D3D12Raytracing/src/D3D12RaytracingLibrarySubobjects/DeviceResources.cpp +++ b/Samples/Desktop/D3D12Raytracing/src/D3D12RaytracingLibrarySubobjects/DeviceResources.cpp @@ -597,14 +597,20 @@ void DeviceResources::MoveToNextFrame() m_fenceValues[m_backBufferIndex] = currentFenceValue + 1; } -// This method acquires the first available hardware adapter that supports Direct3D 12. +// This method acquires the first high-performance hardware adapter that supports Direct3D 12. // If no such adapter can be found, try WARP. Otherwise throw an exception. void DeviceResources::InitializeAdapter(IDXGIAdapter1** ppAdapter) { *ppAdapter = nullptr; ComPtr adapter; - for (UINT adapterID = 0; DXGI_ERROR_NOT_FOUND != m_dxgiFactory->EnumAdapters1(adapterID, &adapter); ++adapterID) + ComPtr factory6; + HRESULT hr = m_dxgiFactory.As(&factory6); + if (FAILED(hr)) + { + throw exception("DXGI 1.6 not supported"); + } + for (UINT adapterID = 0; DXGI_ERROR_NOT_FOUND != factory6->EnumAdapterByGpuPreference(adapterID, DXGI_GPU_PREFERENCE_HIGH_PERFORMANCE, IID_PPV_ARGS(&adapter)); ++adapterID) { if (m_adapterIDoverride != UINT_MAX && adapterID != m_adapterIDoverride) { diff --git a/Samples/Desktop/D3D12Raytracing/src/D3D12RaytracingProceduralGeometry/util/DeviceResources.cpp b/Samples/Desktop/D3D12Raytracing/src/D3D12RaytracingProceduralGeometry/util/DeviceResources.cpp index 6e89c11fc..6ec18c4b2 100644 --- a/Samples/Desktop/D3D12Raytracing/src/D3D12RaytracingProceduralGeometry/util/DeviceResources.cpp +++ b/Samples/Desktop/D3D12Raytracing/src/D3D12RaytracingProceduralGeometry/util/DeviceResources.cpp @@ -597,14 +597,20 @@ void DeviceResources::MoveToNextFrame() m_fenceValues[m_backBufferIndex] = currentFenceValue + 1; } -// This method acquires the first available hardware adapter that supports Direct3D 12. +// This method acquires the first high-performance hardware adapter that supports Direct3D 12. // If no such adapter can be found, try WARP. Otherwise throw an exception. void DeviceResources::InitializeAdapter(IDXGIAdapter1** ppAdapter) { *ppAdapter = nullptr; ComPtr adapter; - for (UINT adapterID = 0; DXGI_ERROR_NOT_FOUND != m_dxgiFactory->EnumAdapters1(adapterID, &adapter); ++adapterID) + ComPtr factory6; + HRESULT hr = m_dxgiFactory.As(&factory6); + if (FAILED(hr)) + { + throw exception("DXGI 1.6 not supported"); + } + for (UINT adapterID = 0; DXGI_ERROR_NOT_FOUND != factory6->EnumAdapterByGpuPreference(adapterID, DXGI_GPU_PREFERENCE_HIGH_PERFORMANCE, IID_PPV_ARGS(&adapter)); ++adapterID) { if (m_adapterIDoverride != UINT_MAX && adapterID != m_adapterIDoverride) { diff --git a/Samples/Desktop/D3D12Raytracing/src/D3D12RaytracingSimpleLighting/DeviceResources.cpp b/Samples/Desktop/D3D12Raytracing/src/D3D12RaytracingSimpleLighting/DeviceResources.cpp index 6e89c11fc..6ec18c4b2 100644 --- a/Samples/Desktop/D3D12Raytracing/src/D3D12RaytracingSimpleLighting/DeviceResources.cpp +++ b/Samples/Desktop/D3D12Raytracing/src/D3D12RaytracingSimpleLighting/DeviceResources.cpp @@ -597,14 +597,20 @@ void DeviceResources::MoveToNextFrame() m_fenceValues[m_backBufferIndex] = currentFenceValue + 1; } -// This method acquires the first available hardware adapter that supports Direct3D 12. +// This method acquires the first high-performance hardware adapter that supports Direct3D 12. // If no such adapter can be found, try WARP. Otherwise throw an exception. void DeviceResources::InitializeAdapter(IDXGIAdapter1** ppAdapter) { *ppAdapter = nullptr; ComPtr adapter; - for (UINT adapterID = 0; DXGI_ERROR_NOT_FOUND != m_dxgiFactory->EnumAdapters1(adapterID, &adapter); ++adapterID) + ComPtr factory6; + HRESULT hr = m_dxgiFactory.As(&factory6); + if (FAILED(hr)) + { + throw exception("DXGI 1.6 not supported"); + } + for (UINT adapterID = 0; DXGI_ERROR_NOT_FOUND != factory6->EnumAdapterByGpuPreference(adapterID, DXGI_GPU_PREFERENCE_HIGH_PERFORMANCE, IID_PPV_ARGS(&adapter)); ++adapterID) { if (m_adapterIDoverride != UINT_MAX && adapterID != m_adapterIDoverride) {