diff options
author | Kusok <118438257+kus04e4ek@users.noreply.github.com> | 2024-07-26 21:30:59 +0800 |
---|---|---|
committer | Kusok <118438257+kus04e4ek@users.noreply.github.com> | 2024-07-27 16:17:20 +0800 |
commit | d30c1e6a8f017ce3837fc97c2532508b49891100 (patch) | |
tree | 381d30a87a32b93dc1b77edcfa335cda46101097 /platform | |
parent | e343dbbcc1030f04dc5833f1c19d267a17332ca9 (diff) | |
download | redot-engine-d30c1e6a8f017ce3837fc97c2532508b49891100.tar.gz |
Fall back to D3D12 if Vulkan is not supported and vice versa
Diffstat (limited to 'platform')
-rw-r--r-- | platform/windows/display_server_windows.cpp | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/platform/windows/display_server_windows.cpp b/platform/windows/display_server_windows.cpp index f29048b16d..ae8d1cace0 100644 --- a/platform/windows/display_server_windows.cpp +++ b/platform/windows/display_server_windows.cpp @@ -5929,10 +5929,37 @@ DisplayServerWindows::DisplayServerWindows(const String &p_rendering_driver, Win if (rendering_context) { if (rendering_context->initialize() != OK) { - memdelete(rendering_context); - rendering_context = nullptr; - r_error = ERR_UNAVAILABLE; - return; + bool failed = true; +#if defined(VULKAN_ENABLED) + bool fallback_to_vulkan = GLOBAL_GET("rendering/rendering_device/fallback_to_vulkan"); + if (failed && fallback_to_vulkan && rendering_driver != "vulkan") { + memdelete(rendering_context); + rendering_context = memnew(RenderingContextDriverVulkanWindows); + if (rendering_context->initialize() == OK) { + WARN_PRINT("Your video card drivers seem not to support Direct3D 12, switching to Vulkan."); + rendering_driver = "vulkan"; + failed = false; + } + } +#endif +#if defined(D3D12_ENABLED) + bool fallback_to_d3d12 = GLOBAL_GET("rendering/rendering_device/fallback_to_d3d12"); + if (failed && fallback_to_d3d12 && rendering_driver != "d3d12") { + memdelete(rendering_context); + rendering_context = memnew(RenderingContextDriverD3D12); + if (rendering_context->initialize() == OK) { + WARN_PRINT("Your video card drivers seem not to support Vulkan, switching to Direct3D 12."); + rendering_driver = "d3d12"; + failed = false; + } + } +#endif + if (failed) { + memdelete(rendering_context); + rendering_context = nullptr; + r_error = ERR_UNAVAILABLE; + return; + } } } #endif |