diff --git a/src/config/ActiveSettings.cpp b/src/config/ActiveSettings.cpp index 3352c143..08def5a3 100644 --- a/src/config/ActiveSettings.cpp +++ b/src/config/ActiveSettings.cpp @@ -108,15 +108,28 @@ bool ActiveSettings::WaitForGX2DrawDoneEnabled() GraphicAPI ActiveSettings::GetGraphicsAPI() { - GraphicAPI api = g_current_game_profile->GetGraphicsAPI().value_or(GetConfig().graphic_api); - -#if defined(ENABLE_VULKAN) && defined(ENABLE_OPENGL) - // check if vulkan even available - if (api == kVulkan && !g_vulkan_available) - api = kOpenGL; + const GraphicAPI api = g_current_game_profile->GetGraphicsAPI().value_or(GetConfig().graphic_api); + std::optional fallbackAPI; +#ifdef ENABLE_VULKAN + if (g_vulkan_available) + { + if (api == kVulkan) + return api; + fallbackAPI = kVulkan; + } #endif - - return api; +#ifdef ENABLE_METAL + if (api == kMetal) + return api; + fallbackAPI = fallbackAPI.value_or(kMetal); +#endif +#ifdef ENABLE_OPENGL + if (api == kOpenGL) + return api; + fallbackAPI = fallbackAPI.value_or(kOpenGL); +#endif + cemu_assert(fallbackAPI.has_value()); + return *fallbackAPI; } float ActiveSettings::GetTVGamma() diff --git a/src/config/CemuConfig.cpp b/src/config/CemuConfig.cpp index 17a67af0..139c290c 100644 --- a/src/config/CemuConfig.cpp +++ b/src/config/CemuConfig.cpp @@ -123,7 +123,7 @@ XMLConfigParser CemuConfig::Load(XMLConfigParser& parser) // graphics auto graphic = parser.get("Graphic"); - graphic_api = graphic.get("api", kOpenGL); + graphic_api = graphic.get("api", kDefaultGraphicsAPI); graphic.get("device", legacy_graphic_device_uuid); if (graphic.get("vkDevice").valid()) graphic.get("vkDevice", vk_graphic_device_uuid); diff --git a/src/config/CemuConfig.h b/src/config/CemuConfig.h index 4625d921..48c396f2 100644 --- a/src/config/CemuConfig.h +++ b/src/config/CemuConfig.h @@ -73,6 +73,14 @@ enum GraphicAPI COUNT }; +#if defined(ENABLE_VULKAN) +constexpr GraphicAPI kDefaultGraphicsAPI = kVulkan; +#elif defined(ENABLE_METAL) +constexpr GraphicAPI kDefaultGraphicsAPI = kMetal; +#elif defined(ENABLE_OPENGL) +constexpr GraphicAPI kDefaultGraphicsAPI = kOpenGL; +#endif + enum AudioChannels { kMono = 0, @@ -430,13 +438,7 @@ struct CemuConfig ConfigValueBounds console_language{ CafeConsoleLanguage::EN }; // graphics -#if defined(ENABLE_VULKAN) - ConfigValue graphic_api{ kVulkan }; -#elif defined(ENABLE_METAL) - ConfigValue graphic_api{ kMetal }; -#elif defined(ENABLE_OPENGL) - ConfigValue graphic_api{ kOpenGL }; -#endif + ConfigValue graphic_api{ kDefaultGraphicsAPI }; std::array legacy_graphic_device_uuid{}; // placeholder option for backwards compatibility with settings from 2.6 and before (renamed to "vkDevice") std::array vk_graphic_device_uuid; uint64 mtl_graphic_device_uuid{ 0 };