From 7a9af33f7df704039177e34dc2107e14ec2c2f75 Mon Sep 17 00:00:00 2001 From: lightningterror <18107717+lightningterror@users.noreply.github.com> Date: Fri, 11 Sep 2026 04:04:33 +0200 Subject: [PATCH] GS: Update intel igpu/dgpu auto renderer. Ivy Bridge and below default to Direct3D11. Haswell/Broadwell default to OpenGL. Skylake and above default to Direct3D12. --- pcsx2/GS/Renderers/DX11/D3D.cpp | 43 ++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/pcsx2/GS/Renderers/DX11/D3D.cpp b/pcsx2/GS/Renderers/DX11/D3D.cpp index 87c3087502..0acea810e7 100644 --- a/pcsx2/GS/Renderers/DX11/D3D.cpp +++ b/pcsx2/GS/Renderers/DX11/D3D.cpp @@ -374,6 +374,8 @@ GSRendererType D3D::GetPreferredRenderer() Console.WriteLn("D3D11 feature level for autodetection: %x", static_cast(feature_level)); return feature_level; }; + + /* const auto get_d3d12_device = [&adapter]() { wil::com_ptr_nothrow device; const HRESULT hr = D3D12CreateDevice(adapter.get(), D3D_FEATURE_LEVEL_12_0, IID_PPV_ARGS(device.put())); @@ -381,6 +383,7 @@ GSRendererType D3D::GetPreferredRenderer() Console.Error("D3D12CreateDevice() for automatic renderer failed: %08X", hr); return device; }; + #ifdef ENABLE_VULKAN static constexpr auto check_vulkan_supported = []() { if (!GSDeviceVK::EnumerateGPUs().empty()) @@ -395,6 +398,7 @@ GSRendererType D3D::GetPreferredRenderer() #else static constexpr auto check_vulkan_supported = []() { return false; }; #endif + */ switch (GetVendorID(adapter.get())) { @@ -432,26 +436,37 @@ GSRendererType D3D::GetPreferredRenderer() // Sampler feedback Tier 0.9 is only present in Tiger Lake/Xe/Arc, so we can use that to // differentiate between them. Unfortunately, that requires a D3D12 device. - const auto device12 = get_d3d12_device(); - if (device12) + const std::optional feature_level = get_d3d11_feature_level(); + if (!feature_level.has_value()) + return GSRendererType::DX11; + else if (feature_level == D3D_FEATURE_LEVEL_12_0) { - D3D12_FEATURE_DATA_D3D12_OPTIONS7 opts = {}; - if (SUCCEEDED(device12->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS7, &opts, sizeof(opts))) && - (opts.SamplerFeedbackTier >= D3D12_SAMPLER_FEEDBACK_TIER_0_9) && - check_vulkan_supported()) + return GSRendererType::DX12; + /* + // Keep the old code as a reference if we need it. + const auto device12 = get_d3d12_device(); + if (device12) { - Console.WriteLn("Sampler feedback tier 0.9 found for Intel GPU, defaulting to Vulkan."); - return GSRendererType::VK; + D3D12_FEATURE_DATA_D3D12_OPTIONS7 opts = {}; + if (SUCCEEDED(device12->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS7, &opts, sizeof(opts))) && + (opts.SamplerFeedbackTier >= D3D12_SAMPLER_FEEDBACK_TIER_0_9) && + check_vulkan_supported()) + { + Console.WriteLn("Sampler feedback tier 0.9 found for Intel GPU, defaulting to Vulkan."); + return GSRendererType::VK; + } + else + return GSRendererType::OGL; } + else - { - Console.WriteLn("Sampler feedback tier 0.9 or Vulkan not found for Intel GPU, using OpenGL."); return GSRendererType::OGL; - } + */ } - - Console.WriteLn("Sampler feedback tier 0.9 or Direct3D 12 not found for Intel GPU, using Direct3D 11."); - return GSRendererType::DX11; + else if (feature_level == D3D_FEATURE_LEVEL_11_1) + return GSRendererType::OGL; + else + return GSRendererType::DX11; } break;