diff options
author | lupoDharkael <izhe@hotmail.es> | 2018-12-20 11:51:26 +0100 |
---|---|---|
committer | lupoDharkael <izhe@hotmail.es> | 2018-12-20 11:51:26 +0100 |
commit | bfade869f328e2a920acee326f8f70901744160e (patch) | |
tree | 1f3fc4d8847c59bb9ab72be3a3d92e265b659523 | |
parent | cf0716952db45acf7d7430552f2759c57e0d876e (diff) | |
download | redot-engine-bfade869f328e2a920acee326f8f70901744160e.tar.gz |
Don't enable DRI_PRIME if nouveau is loaded
-rw-r--r-- | platform/x11/os_x11.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp index 34ec8709c4..f3889cc85f 100644 --- a/platform/x11/os_x11.cpp +++ b/platform/x11/os_x11.cpp @@ -243,7 +243,26 @@ Error OS_X11::initialize(const VideoMode &p_desired, int p_video_driver, int p_a // Set DRI_PRIME if not set. This means that Godot should default to a higher-power GPU if it exists. // Note: Due to the final '0' parameter to setenv any existing DRI_PRIME environment variables will not // be overwritten. - setenv("DRI_PRIME", "1", 0); + bool enable_dri_prime = true; + // Check if Nouveau is loaded, we don't want to force dGPU usage with that driver. + if (FileAccess *f = FileAccess::open("/proc/modules", FileAccess::READ)) { + // Match driver name + space + String nouveau_str = "nouveau "; + + while (!f->eof_reached()) { + String line = f->get_line(); + + if (line.begins_with(nouveau_str)) { + enable_dri_prime = false; + break; + } + } + f->close(); + memdelete(f); + } + if (enable_dri_prime) { + setenv("DRI_PRIME", "1", 0); + } ContextGL_X11::ContextType opengl_api_type = ContextGL_X11::GLES_3_0_COMPATIBLE; |