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())