From 43bfb183c22de508afd2f1b156c9aed15260b01a Mon Sep 17 00:00:00 2001 From: Silent Date: Sun, 21 Jul 2019 17:29:08 +0200 Subject: [PATCH] D3D11: Show a warning message about unsupported features when switching to D3D11 backend on Windows 7 --- Source/Core/VideoBackends/D3D/VideoBackend.h | 1 + Source/Core/VideoBackends/D3D/main.cpp | 25 ++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/Source/Core/VideoBackends/D3D/VideoBackend.h b/Source/Core/VideoBackends/D3D/VideoBackend.h index 0b4c61fc66..e5b996c7e1 100644 --- a/Source/Core/VideoBackends/D3D/VideoBackend.h +++ b/Source/Core/VideoBackends/D3D/VideoBackend.h @@ -17,6 +17,7 @@ public: std::string GetName() const override; std::string GetDisplayName() const override; + std::optional GetWarningMessage() const override; void InitBackendInfo() override; diff --git a/Source/Core/VideoBackends/D3D/main.cpp b/Source/Core/VideoBackends/D3D/main.cpp index 6c4bf20dd1..33c9117f25 100644 --- a/Source/Core/VideoBackends/D3D/main.cpp +++ b/Source/Core/VideoBackends/D3D/main.cpp @@ -37,6 +37,31 @@ std::string VideoBackend::GetDisplayName() const return _trans("Direct3D 11"); } +std::optional VideoBackend::GetWarningMessage() const +{ + std::optional result; + + // If user is on Win7, show a warning about partial DX11.1 support + // This is being called BEFORE FillBackendInfo is called for this backend, + // so query for logic op support manually + bool supportsLogicOp = false; + if (D3DCommon::LoadLibraries()) + { + supportsLogicOp = D3D::SupportsLogicOp(g_Config.iAdapter); + D3DCommon::UnloadLibraries(); + } + + if (!supportsLogicOp) + { + result = _trans("Direct3D 11 renderer requires support for features not supported by your " + "system configuration. This is most likely because you are using Windows 7. " + "You may still use this backend, but you might encounter graphical artifacts." + "\n\nDo you really want to switch to Direct3D 11? If unsure, select 'No'."); + } + + return result; +} + void VideoBackend::InitBackendInfo() { if (!D3DCommon::LoadLibraries())