Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lightmap bake crash at the beginning of the baking #98180

Open
Tracked by #56033
jcostello opened this issue Oct 14, 2024 · 6 comments
Open
Tracked by #56033

Lightmap bake crash at the beginning of the baking #98180

jcostello opened this issue Oct 14, 2024 · 6 comments

Comments

@jcostello
Copy link
Contributor

jcostello commented Oct 14, 2024

Tested versions

v4.4.dev.custom_build [708acdf]

System information

Ubuntu 22.04
Edit: Nvidia 2060 6gb VRAM

Issue description

Trying to bake lightin in the TPS demo gets this error at the beginning of the bake. Previous builds had no problem baking

handle_crash: Program crashed with signal 4
Engine version: Godot Engine v4.4.dev.custom_build (708acdf1d440d9dcc7daa1fc5a457f1a2e125181)
Dumping the backtrace. Please include this when reporting the bug to the project developer.
[1] /lib/x86_64-linux-gnu/libc.so.6(+0x42990) [0x73ae1d042990] (??:0)
[2] RenderingDeviceDriverVulkan::command_queue_execute_and_present(RenderingDeviceDriver::CommandQueueID, VectorView<RenderingDeviceDriver::SemaphoreID>, VectorView<RenderingDeviceDriver::CommandBufferID>, VectorView<RenderingDeviceDriver::SemaphoreID>, RenderingDeviceDriver::FenceID, VectorView<RenderingDeviceDriver::SwapChainID>) (/media/juan/NTFS1/dev/godot/drivers/vulkan/rendering_device_driver_vulkan.cpp:2456 (discriminator 2))
[3] RenderingDevice::_execute_frame(bool) (/media/juan/NTFS1/dev/godot/servers/rendering/rendering_device.cpp:5868 (discriminator 3))
[4] RenderingDevice::submit() (/media/juan/NTFS1/dev/godot/servers/rendering/rendering_device.cpp:5646)
[5] LightmapperRD::bake(Lightmapper::BakeQuality, bool, float, int, int, float, float, int, bool, bool, Lightmapper::GenerateProbes, Ref<Image> const&, Basis const&, bool (*)(float, String const&, void*, bool), void*, float) (/media/juan/NTFS1/dev/godot/modules/lightmapper_rd/lightmapper_rd.cpp:1734)
[6] LightmapGI::bake(Node*, String, bool (*)(float, String const&, void*, bool), void*) (/media/juan/NTFS1/dev/godot/scene/3d/lightmap_gi.cpp:1118 (discriminator 1))
[7] LightmapGIEditorPlugin::_bake_select_file(String const&) (/media/juan/NTFS1/dev/godot/editor/plugins/lightmap_gi_editor_plugin.cpp:71 (discriminator 2))
[8] LightmapGIEditorPlugin::_bake() (/media/juan/NTFS1/dev/godot/editor/plugins/lightmap_gi_editor_plugin.cpp:123 (discriminator 2))
[9] void call_with_variant_args_helper<__UnexistingClass>(__UnexistingClass*, void (__UnexistingClass::*)(), Variant const**, Callable::CallError&, IndexSequence<>) (/media/juan/NTFS1/dev/godot/./core/variant/binder_common.h:309)
[10] void call_with_variant_args_dv<__UnexistingClass>(__UnexistingClass*, void (__UnexistingClass::*)(), Variant const**, int, Callable::CallError&, Vector<Variant> const&) (/media/juan/NTFS1/dev/godot/./core/variant/binder_common.h:452)
[11] MethodBindT<>::call(Object*, Variant const**, int, Callable::CallError&) const (/media/juan/NTFS1/dev/godot/./core/object/method_bind.h:345 (discriminator 1))
[12] Object::callp(StringName const&, Variant const**, int, Callable::CallError&) (/media/juan/NTFS1/dev/godot/core/object/object.cpp:813 (discriminator 1))
[13] Callable::callp(Variant const**, int, Variant&, Callable::CallError&) const (/media/juan/NTFS1/dev/godot/core/variant/callable.cpp:69 (discriminator 1))
[14] Object::emit_signalp(StringName const&, Variant const**, int) (/media/juan/NTFS1/dev/godot/core/object/object.cpp:1201)
[15] Node::emit_signalp(StringName const&, Variant const**, int) (/media/juan/NTFS1/dev/godot/scene/main/node.cpp:3974)
[16] Error Object::emit_signal<>(StringName const&) (/media/juan/NTFS1/dev/godot/./core/object/object.h:920)
[17] BaseButton::_pressed() (/media/juan/NTFS1/dev/godot/scene/gui/base_button.cpp:139)
[18] BaseButton::on_action_event(Ref<InputEvent>) (/media/juan/NTFS1/dev/godot/scene/gui/base_button.cpp:179)
[19] BaseButton::gui_input(Ref<InputEvent> const&) (/media/juan/NTFS1/dev/godot/scene/gui/base_button.cpp:69 (discriminator 2))
[20] Control::_call_gui_input(Ref<InputEvent> const&) (/media/juan/NTFS1/dev/godot/scene/gui/control.cpp:1823)
[21] Viewport::_gui_call_input(Control*, Ref<InputEvent> const&) (/media/juan/NTFS1/dev/godot/scene/main/viewport.cpp:1576)
[22] Viewport::_gui_input_event(Ref<InputEvent>) (/media/juan/NTFS1/dev/godot/scene/main/viewport.cpp:1837 (discriminator 2))
[23] Viewport::push_input(Ref<InputEvent> const&, bool) (/media/juan/NTFS1/dev/godot/scene/main/viewport.cpp:3176 (discriminator 2))
[24] Window::_window_input(Ref<InputEvent> const&) (/media/juan/NTFS1/dev/godot/scene/main/window.cpp:1680)
[25] void call_with_variant_args_helper<Window, Ref<InputEvent> const&, 0ul>(Window*, void (Window::*)(Ref<InputEvent> const&), Variant const**, Callable::CallError&, IndexSequence<0ul>) (/media/juan/NTFS1/dev/godot/./core/variant/binder_common.h:304 (discriminator 2))
[26] void call_with_variant_args<Window, Ref<InputEvent> const&>(Window*, void (Window::*)(Ref<InputEvent> const&), Variant const**, int, Callable::CallError&) (/media/juan/NTFS1/dev/godot/./core/variant/binder_common.h:419)
[27] CallableCustomMethodPointer<Window, void, Ref<InputEvent> const&>::call(Variant const**, int, Variant&, Callable::CallError&) const (/media/juan/NTFS1/dev/godot/./core/object/callable_method_pointer.h:111)
[28] Callable::callp(Variant const**, int, Variant&, Callable::CallError&) const (/media/juan/NTFS1/dev/godot/core/variant/callable.cpp:57)
[29] Variant Callable::call<Ref<InputEvent> >(Ref<InputEvent>) const (/media/juan/NTFS1/dev/godot/./core/variant/variant.h:893)
[30] DisplayServerX11::_dispatch_input_event(Ref<InputEvent> const&) (/media/juan/NTFS1/dev/godot/platform/linuxbsd/x11/display_server_x11.cpp:4063 (discriminator 2))
[31] DisplayServerX11::_dispatch_input_events(Ref<InputEvent> const&) (/media/juan/NTFS1/dev/godot/platform/linuxbsd/x11/display_server_x11.cpp:4040)
[32] Input::_parse_input_event_impl(Ref<InputEvent> const&, bool) (/media/juan/NTFS1/dev/godot/core/input/input.cpp:803)
[33] Input::flush_buffered_events() (/media/juan/NTFS1/dev/godot/core/input/input.cpp:1084)
[34] DisplayServerX11::process_events() (/media/juan/NTFS1/dev/godot/platform/linuxbsd/x11/display_server_x11.cpp:5200)
[35] OS_LinuxBSD::run() (/media/juan/NTFS1/dev/godot/platform/linuxbsd/os_linuxbsd.cpp:960)
[36] /media/juan/NTFS1/dev/godot/bin/godot.linuxbsd.editor.dev.x86_64(main+0x190) [0x60232bcce1e9] (/media/juan/NTFS1/dev/godot/platform/linuxbsd/godot_linuxbsd.cpp:85)
[37] /lib/x86_64-linux-gnu/libc.so.6(+0x28150) [0x73ae1d028150] (??:0)
[38] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x89) [0x73ae1d028209] (??:0)
[39] /media/juan/NTFS1/dev/godot/bin/godot.linuxbsd.editor.dev.x86_64(_start+0x25) [0x60232bccdf95] (??:?)
-- END OF BACKTRACE --
================================================================

Steps to reproduce

Bake Lightmaps with 5 bounces, low quality, 1.5 texel density

Minimal reproduction project (MRP)

TPSDemo

@Calinou
Copy link
Member

Calinou commented Oct 17, 2024

I can't reproduce this with https://github.com/godotengine/tps-demo on 4.4.dev 04692d8 (Linux, GeForce RTX 4090 with NVIDIA 560.35.03).

VRAM utilization goes up to 9.6 GB while baking lightmaps, so you probably need a GPU with at least 10 GB of VRAM for the bake to succeed.

@clayjohn
Copy link
Member

@DarioSamo Could the local rendering device be holding on to intermediate resources and never freeing anything until the local rendering device is freed?

I know we have issues on the main rendering device when we aren't swapping frames. So is it possible that by doing doing a submit + sync, we never end up freeing temporary resources?

@DarioSamo
Copy link
Contributor

DarioSamo commented Oct 24, 2024

@DarioSamo Could the local rendering device be holding on to intermediate resources and never freeing anything until the local rendering device is freed?

I know we have issues on the main rendering device when we aren't swapping frames. So is it possible that by doing doing a submit + sync, we never end up freeing temporary resources?

The only difference would be the execution of swap_buffers() vs submit() and sync(), and upon a short review, the only difference is one presents to the swap chain and the other doesn't. Both call into the exact same set of functions. I don't think there's a difference from that aspect at least.

@jcostello
Copy link
Contributor Author

This have been aggravated since the fastest features added to the lighmap. Baking even a faction of the lumberyard bistro scene has been impossible

@BlueCube3310
Copy link
Contributor

BlueCube3310 commented Dec 23, 2024

4.4 dev7: This doesn't seem to be related to the available VRAM amount, I had a crash when baking the TPS demo at a lower texel density and it only took 4 GB out of the 16 GB available in total. It looks like the crash occurs if the bake process takes too long

Edit: On 4.3 stable the crash doesn't occur with the same settings, it's most likely an issue introduced in 4.4

@Zireael07
Copy link
Contributor

@Calinou paging so that this gets regression tag in light of the above comment

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants