godotengine / godot

Godot Engine – Multi-platform 2D and 3D game engine
https://godotengine.org
MIT License
88.65k stars 20.1k forks source link

Godot 4 does not respect OS power settings, always selects high performance GPU. #58430

Open EzraT opened 2 years ago

EzraT commented 2 years ago

Godot version

v4.0.alpha3.official [256069eaf]

System information

Windows 10, Vulkan, Hybrid Laptop - AMD iGPU(Ryzen 7 4800HS) + GTX 1660 Ti Max-Q

Issue description

Godot 3 always picks the correct GPU to use based on which power profile/settings are active in Windows, (Integrated low power GPU when on power saving, high performance dedicated GPU when on AC power). Godot 4 currently always fails to do this on my system, it always picks the high performance GPU regardless of whatever power profile is active. This makes testing on different GPU's on multi GPU systems a tedious process, I understand you can use --gpu-index to manually select which GPU to use, but this launch option does not persist correctly in the editor.

When I run the editor like this: .\godot.exe --gpu-index 1 --path "path\to\project" -e (gpu-index 1 being my integrated GPU, and 0 the high powered one.)

The editor opens up fine with the chosen GPU, but when I run the game for testing (F5 or F6) in the editor afterwards, it just opens up with the high performance GPU again, ignoring everything else.

Not sure if this happens on Linux, I don't have a multi-GPU device running Linux at the moment, so I can't test. Perhaps someone else with a multi-GPU setup running Linux could test this.

Steps to reproduce

Put your system on a power saving profile or force the Godot4 executable to use the Power Saving setting in Windows, which you can set in the "Graphics Settings" pane. image

Then run Godot 4 in a terminal window to see which GPU its using.

Minimal reproduction project

Not Applicable

EzraT commented 1 year ago

Still present in alpha16

roma0104 commented 1 year ago

May need another ticket, but I experience this issue on Linux system as well. No matter what environmentals I pass to the command, Godot 4 will never use my iGPU, unless I explicitly power down the dGPU.

Interestingly vkcube exhibits the same behaviour, and during my research on this topic a commenter suggests this might be a intended (but in my opinion, bad) behaviour.

https://bbs.archlinux.org/viewtopic.php?pid=2060946#p2060946

If this commenter is correct and Godot is making the same decision, I definitely vote that Godot not be greedy and honour the user's requested GPU.

Bestest-Coder commented 1 year ago

This is still an issue I am running into, I have a Linux laptop with intel integrated graphics and a dedicated graphics card. I cannot get the entirety of the editor/engine to run only on the iGPU, passing --gpu-index 0 (the iGPU, dedicated is 1) to just godot4 does not change anything in the editor, but doing godot4 --gpu-index 0 ~/Projects/projectname/project.godot -e does make the editor itself run on the integrated. However, running the project/scene makes the new window/rendering run on the dGPU. It seems like it does not pass requested GPU to any subsequent rendering contexts, project manager > editor > project/scene.

alvinhochun commented 2 months ago

The forwarding of --gpu-index had already been fixed in #75198.

93985 will make Godot respect the GPU preference in Windows Settings.

Is there a system-wide GPU preference for any DE on Linux?