From 6eefc3c524a8530a3cb24b5c797288e156bec1db Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sun, 6 Sep 2020 12:56:45 +0200 Subject: [PATCH] Make default graphics backend not show up as empty Fixes https://bugs.dolphin-emu.org/issues/12245. I considered making a change to DolphinQt instead of the core, but then additional effort would've been required to add the same fix to the Android GUI once we start using the new config system there. --- Source/Core/Core/Config/MainSettings.cpp | 4 +++- Source/Core/VideoBackends/D3D/VideoBackend.h | 2 ++ Source/Core/VideoBackends/D3D/main.cpp | 2 +- Source/Core/VideoBackends/D3D12/VideoBackend.cpp | 2 +- Source/Core/VideoBackends/D3D12/VideoBackend.h | 2 ++ Source/Core/VideoBackends/Null/VideoBackend.h | 5 ++++- Source/Core/VideoBackends/OGL/VideoBackend.h | 3 +++ Source/Core/VideoBackends/OGL/main.cpp | 2 +- Source/Core/VideoBackends/Software/SWmain.cpp | 2 +- Source/Core/VideoBackends/Software/VideoBackend.h | 2 ++ Source/Core/VideoBackends/Vulkan/VideoBackend.h | 4 +++- Source/Core/VideoCommon/VideoBackendBase.cpp | 14 +++++++++++++- Source/Core/VideoCommon/VideoBackendBase.h | 1 + 13 files changed, 37 insertions(+), 8 deletions(-) diff --git a/Source/Core/Core/Config/MainSettings.cpp b/Source/Core/Core/Config/MainSettings.cpp index 21e8efaec5..512f7edf1f 100644 --- a/Source/Core/Core/Config/MainSettings.cpp +++ b/Source/Core/Core/Config/MainSettings.cpp @@ -12,6 +12,7 @@ #include "Core/HW/Memmap.h" #include "Core/HW/SI/SI_Device.h" #include "Core/PowerPC/PowerPC.h" +#include "VideoCommon/VideoBackendBase.h" namespace Config { @@ -97,7 +98,8 @@ const Info MAIN_OVERCLOCK_ENABLE{{System::Main, "Core", "OverclockEnable"} const Info MAIN_RAM_OVERRIDE_ENABLE{{System::Main, "Core", "RAMOverrideEnable"}, false}; const Info MAIN_MEM1_SIZE{{System::Main, "Core", "MEM1Size"}, Memory::MEM1_SIZE_RETAIL}; const Info MAIN_MEM2_SIZE{{System::Main, "Core", "MEM2Size"}, Memory::MEM2_SIZE_RETAIL}; -const Info MAIN_GFX_BACKEND{{System::Main, "Core", "GFXBackend"}, ""}; +const Info MAIN_GFX_BACKEND{{System::Main, "Core", "GFXBackend"}, + VideoBackendBase::GetDefaultBackendName()}; const Info MAIN_GPU_DETERMINISM_MODE{{System::Main, "Core", "GPUDeterminismMode"}, "auto"}; const Info MAIN_PERF_MAP_DIR{{System::Main, "Core", "PerfMapDir"}, ""}; diff --git a/Source/Core/VideoBackends/D3D/VideoBackend.h b/Source/Core/VideoBackends/D3D/VideoBackend.h index e5b996c7e1..d5aab11a51 100644 --- a/Source/Core/VideoBackends/D3D/VideoBackend.h +++ b/Source/Core/VideoBackends/D3D/VideoBackend.h @@ -21,6 +21,8 @@ public: void InitBackendInfo() override; + static constexpr const char* NAME = "D3D"; + private: void FillBackendInfo(); }; diff --git a/Source/Core/VideoBackends/D3D/main.cpp b/Source/Core/VideoBackends/D3D/main.cpp index 0372cfb609..5fa64ab88e 100644 --- a/Source/Core/VideoBackends/D3D/main.cpp +++ b/Source/Core/VideoBackends/D3D/main.cpp @@ -29,7 +29,7 @@ namespace DX11 { std::string VideoBackend::GetName() const { - return "D3D"; + return NAME; } std::string VideoBackend::GetDisplayName() const diff --git a/Source/Core/VideoBackends/D3D12/VideoBackend.cpp b/Source/Core/VideoBackends/D3D12/VideoBackend.cpp index d92599e5ea..f01a809cad 100644 --- a/Source/Core/VideoBackends/D3D12/VideoBackend.cpp +++ b/Source/Core/VideoBackends/D3D12/VideoBackend.cpp @@ -27,7 +27,7 @@ namespace DX12 { std::string VideoBackend::GetName() const { - return "D3D12"; + return NAME; } std::string VideoBackend::GetDisplayName() const diff --git a/Source/Core/VideoBackends/D3D12/VideoBackend.h b/Source/Core/VideoBackends/D3D12/VideoBackend.h index aaf4830d31..554ee6b690 100644 --- a/Source/Core/VideoBackends/D3D12/VideoBackend.h +++ b/Source/Core/VideoBackends/D3D12/VideoBackend.h @@ -19,6 +19,8 @@ public: std::string GetDisplayName() const override; void InitBackendInfo() override; + static constexpr const char* NAME = "D3D12"; + private: void FillBackendInfo(); }; diff --git a/Source/Core/VideoBackends/Null/VideoBackend.h b/Source/Core/VideoBackends/Null/VideoBackend.h index 0930ccf7ad..49006a84b4 100644 --- a/Source/Core/VideoBackends/Null/VideoBackend.h +++ b/Source/Core/VideoBackends/Null/VideoBackend.h @@ -10,11 +10,14 @@ namespace Null { class VideoBackend final : public VideoBackendBase { +public: bool Initialize(const WindowSystemInfo& wsi) override; void Shutdown() override; - std::string GetName() const override { return "Null"; } + std::string GetName() const override { return NAME; } std::string GetDisplayName() const override; void InitBackendInfo() override; + + static constexpr const char* NAME = "Null"; }; } // namespace Null diff --git a/Source/Core/VideoBackends/OGL/VideoBackend.h b/Source/Core/VideoBackends/OGL/VideoBackend.h index 74bc929e85..01d482e275 100644 --- a/Source/Core/VideoBackends/OGL/VideoBackend.h +++ b/Source/Core/VideoBackends/OGL/VideoBackend.h @@ -13,6 +13,7 @@ namespace OGL { class VideoBackend : public VideoBackendBase { +public: bool Initialize(const WindowSystemInfo& wsi) override; void Shutdown() override; @@ -21,6 +22,8 @@ class VideoBackend : public VideoBackendBase void InitBackendInfo() override; + static constexpr const char* NAME = "OGL"; + private: bool InitializeGLExtensions(GLContext* context); bool FillBackendInfo(); diff --git a/Source/Core/VideoBackends/OGL/main.cpp b/Source/Core/VideoBackends/OGL/main.cpp index bfd2b25d6f..d1e71d55e6 100644 --- a/Source/Core/VideoBackends/OGL/main.cpp +++ b/Source/Core/VideoBackends/OGL/main.cpp @@ -62,7 +62,7 @@ namespace OGL { std::string VideoBackend::GetName() const { - return "OGL"; + return NAME; } std::string VideoBackend::GetDisplayName() const diff --git a/Source/Core/VideoBackends/Software/SWmain.cpp b/Source/Core/VideoBackends/Software/SWmain.cpp index 2e75416171..eb03d4796c 100644 --- a/Source/Core/VideoBackends/Software/SWmain.cpp +++ b/Source/Core/VideoBackends/Software/SWmain.cpp @@ -45,7 +45,7 @@ public: std::string VideoSoftware::GetName() const { - return "Software Renderer"; + return NAME; } std::string VideoSoftware::GetDisplayName() const diff --git a/Source/Core/VideoBackends/Software/VideoBackend.h b/Source/Core/VideoBackends/Software/VideoBackend.h index 10d70722cd..7f1426cb5d 100644 --- a/Source/Core/VideoBackends/Software/VideoBackend.h +++ b/Source/Core/VideoBackends/Software/VideoBackend.h @@ -19,5 +19,7 @@ class VideoSoftware : public VideoBackendBase std::optional GetWarningMessage() const override; void InitBackendInfo() override; + + static constexpr const char* NAME = "Software Renderer"; }; } // namespace SW diff --git a/Source/Core/VideoBackends/Vulkan/VideoBackend.h b/Source/Core/VideoBackends/Vulkan/VideoBackend.h index bcc4f9d2c8..d8b0dd33c9 100644 --- a/Source/Core/VideoBackends/Vulkan/VideoBackend.h +++ b/Source/Core/VideoBackends/Vulkan/VideoBackend.h @@ -15,9 +15,11 @@ public: bool Initialize(const WindowSystemInfo& wsi) override; void Shutdown() override; - std::string GetName() const override { return "Vulkan"; } + std::string GetName() const override { return NAME; } std::string GetDisplayName() const override { return _trans("Vulkan"); } void InitBackendInfo() override; void PrepareWindow(WindowSystemInfo& wsi) override; + + static constexpr const char* NAME = "Vulkan"; }; } // namespace Vulkan diff --git a/Source/Core/VideoCommon/VideoBackendBase.cpp b/Source/Core/VideoCommon/VideoBackendBase.cpp index 5e7337c767..b32cff86e3 100644 --- a/Source/Core/VideoCommon/VideoBackendBase.cpp +++ b/Source/Core/VideoCommon/VideoBackendBase.cpp @@ -197,9 +197,21 @@ u16 VideoBackendBase::Video_GetBoundingBox(int index) return result; } +// This function is called at static initialization, so we can't rely on s_default_backend being set +std::string VideoBackendBase::GetDefaultBackendName() +{ +#ifdef HAS_OPENGL + return OGL::VideoBackend::NAME; +#elif defined(_WIN32) + return DX11::VideoBackend::NAME; +#else + return Vulkan::VideoBackend::NAME; +#endif +} + void VideoBackendBase::PopulateList() { - // OGL > D3D11 > Vulkan > SW > Null + // OGL > D3D11 > D3D12 > Vulkan > SW > Null #ifdef HAS_OPENGL g_available_video_backends.push_back(std::make_unique()); #endif diff --git a/Source/Core/VideoCommon/VideoBackendBase.h b/Source/Core/VideoCommon/VideoBackendBase.h index 0370ef2a44..cf8b4a4f1a 100644 --- a/Source/Core/VideoCommon/VideoBackendBase.h +++ b/Source/Core/VideoCommon/VideoBackendBase.h @@ -59,6 +59,7 @@ public: u32 Video_GetQueryResult(PerfQueryType type); u16 Video_GetBoundingBox(int index); + static std::string GetDefaultBackendName(); static void PopulateList(); static void ClearList(); static void ActivateBackend(const std::string& name);