diff options
| author | Léo Lam <leo@leolam.fr> | 2021-08-02 03:39:12 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-08-02 03:39:12 +0200 |
| commit | 35bf5e38392670b3b86a4926437d01157363ba4a (patch) | |
| tree | f6301bce33a5a7888ffe4dbfd48454a59c6e9eca /Source/Core/VideoCommon/VideoBackendBase.cpp | |
| parent | 8a078ea43ad9bb2e5f6adc41294d94dd5521f3c8 (diff) | |
| parent | 46e331d000e0af8986189fb937f2b68f7dcb9bd1 (diff) | |
Merge pull request #9962 from OatmealDome/macos-vulkan-default
VideoBackendBase: Prefer Vulkan over OGL on macOS Mojave and newer
Diffstat (limited to 'Source/Core/VideoCommon/VideoBackendBase.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/VideoBackendBase.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/Source/Core/VideoCommon/VideoBackendBase.cpp b/Source/Core/VideoCommon/VideoBackendBase.cpp index 1f93517dd1..cadbd08024 100644 --- a/Source/Core/VideoCommon/VideoBackendBase.cpp +++ b/Source/Core/VideoCommon/VideoBackendBase.cpp @@ -214,6 +214,10 @@ const std::vector<std::unique_ptr<VideoBackendBase>>& VideoBackendBase::GetAvail std::vector<std::unique_ptr<VideoBackendBase>> backends; // OGL > D3D11 > D3D12 > Vulkan > SW > Null + // + // On macOS Mojave and newer, we prefer Vulkan over OGL due to outdated drivers. + // However, on macOS High Sierra and older, we still prefer OGL due to its older Metal version + // missing several features required by the Vulkan backend. #ifdef HAS_OPENGL backends.push_back(std::make_unique<OGL::VideoBackend>()); #endif @@ -222,7 +226,18 @@ const std::vector<std::unique_ptr<VideoBackendBase>>& VideoBackendBase::GetAvail backends.push_back(std::make_unique<DX12::VideoBackend>()); #endif #ifdef HAS_VULKAN - backends.push_back(std::make_unique<Vulkan::VideoBackend>()); +#ifdef __APPLE__ + // If we can run the Vulkan backend, emplace it at the beginning of the vector so + // it takes precedence over OpenGL. + if (__builtin_available(macOS 10.14, *)) + { + backends.emplace(backends.begin(), std::make_unique<Vulkan::VideoBackend>()); + } + else +#endif + { + backends.push_back(std::make_unique<Vulkan::VideoBackend>()); + } #endif #ifdef HAS_OPENGL backends.push_back(std::make_unique<SW::VideoSoftware>()); |
