From 061397835d4636ae74496738e9c94cc7e2bc233a Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Sun, 26 Mar 2023 19:42:00 +0200 Subject: [PATCH] Document known bugs with the Multi-Threaded thread model project setting - Add a warning on project startup when using the Multi-Threaded option. - Improve command line validation for the `--render-thread` CLI argument. --- doc/classes/ProjectSettings.xml | 3 ++- main/main.cpp | 10 +++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml index ffb61ab20d3..57387aa65ad 100644 --- a/doc/classes/ProjectSettings.xml +++ b/doc/classes/ProjectSettings.xml @@ -2226,7 +2226,8 @@ [b]Note:[/b] Depth prepass is only supported when using the Forward+ or Compatibility rendering method. When using the Mobile rendering method, there is no depth prepass performed. - Thread model for rendering. Rendering on a thread can vastly improve performance, but synchronizing to the main thread can cause a bit more jitter. + The thread model to use for rendering. Rendering on a thread may improve performance, but synchronizing to the main thread can cause a bit more jitter. + [b]Note:[/b] The [b]Multi-Threaded[/b] option is experimental, and has several known bugs which can lead to crashing, especially when using particles or resizing the window. Not recommended for use in production at this stage. Default background clear color. Overridable per [Viewport] using its [Environment]. See [member Environment.background_mode] and [member Environment.background_color] in particular. To change this default color programmatically, use [method RenderingServer.set_default_clear_color]. diff --git a/main/main.cpp b/main/main.cpp index b759944ff03..f7de02fb733 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -1150,6 +1150,9 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph rtm = OS::RENDER_THREAD_UNSAFE; } else if (I->next()->get() == "separate") { rtm = OS::RENDER_SEPARATE_THREAD; + } else { + OS::get_singleton()->print("Unknown render thread mode, aborting.\nValid options are 'unsafe', 'safe' and 'separate'.\n"); + goto error; } N = I->next()->next(); @@ -1875,7 +1878,8 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph } if (rtm >= 0 && rtm < 3) { - if (editor) { + if (editor || project_manager) { + // Editor and project manager cannot run with rendering in a separate thread (they will crash on startup). rtm = OS::RENDER_THREAD_SAFE; } OS::get_singleton()->_render_thread_mode = OS::RenderThreadMode(rtm); @@ -2209,6 +2213,10 @@ Error Main::setup2() { } } + if (OS::get_singleton()->_render_thread_mode == OS::RENDER_SEPARATE_THREAD) { + WARN_PRINT("The Multi-Threaded rendering thread model is experimental, and has known issues which can lead to project crashes. Use the Single-Safe option in the project settings instead."); + } + /* Initialize Pen Tablet Driver */ {