summaryrefslogtreecommitdiffstats
path: root/platform
diff options
context:
space:
mode:
authorKusok <118438257+kus04e4ek@users.noreply.github.com>2024-07-26 21:30:59 +0800
committerKusok <118438257+kus04e4ek@users.noreply.github.com>2024-07-27 16:17:20 +0800
commitd30c1e6a8f017ce3837fc97c2532508b49891100 (patch)
tree381d30a87a32b93dc1b77edcfa335cda46101097 /platform
parente343dbbcc1030f04dc5833f1c19d267a17332ca9 (diff)
downloadredot-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.cpp35
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