godotengine / godot

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

Vulkan: "The vertex format used to create the pipeline does not match the vertex format bound." error appears randomly at model load #50962

Open everythingandnothingdev opened 3 years ago

everythingandnothingdev commented 3 years ago

Godot version

4.0dev (1f69582)

System information

Windows 10, Vulkan, RTX 2080

Issue description

Sometimes I load a 3D model and I see this repeated in the console:

drivers/vulkan/rendering_device_vulkan.cpp:7201 - Condition "!vertex_array" is true.
Vertex amount (22901) must be a multiple of the amount of vertices required by the render primitive (3).
drivers/vulkan/rendering_device_vulkan.cpp:7201 - Condition "!vertex_array" is true.
The vertex format used to create the pipeline does not match the vertex format bound.

image

This is usually accompanied by one of the materials in the scene not loading.

Steps to reproduce

Unfortunately this does not happen consistently. If I load models in the background using ResourceLoader.load_threaded_request and add them to the scene one by one, it seems to be random as to which model this error occurs on. But it always starts showing the moment one of the models load.

I'm not sure where to start in terms of debugging this.

Minimal reproduction project

No response

Calinou commented 3 years ago

@everythingandnothingdev Please upload a minimal reproduction project to make this easier to troubleshoot.

akien-mga commented 3 years ago

It's not minimal but I can reproduce the errors with this demo: https://github.com/everythingandnothingdev/godot-blender-2.81-splash

In that demo, errors are spammed on every single frame:

Project FPS: 14 (71.4 mspf)
ERROR: Attempted to use an unused shader variant (shader is null),
   at: get_render_pipeline (./servers/rendering/renderer_rd/pipeline_cache_rd.h:74)
ERROR: Condition "!pipeline" is true.
   at: draw_list_bind_render_pipeline (drivers/vulkan/rendering_device_vulkan.cpp:7078)
ERROR: The vertex format used to create the pipeline does not match the vertex format bound.
   at: draw_list_draw (drivers/vulkan/rendering_device_vulkan.cpp:7284)
ERROR: Attempted to use an unused shader variant (shader is null),
   at: get_render_pipeline (./servers/rendering/renderer_rd/pipeline_cache_rd.h:74)
ERROR: Condition "!pipeline" is true.
   at: draw_list_bind_render_pipeline (drivers/vulkan/rendering_device_vulkan.cpp:7078)
ERROR: The vertex format used to create the pipeline does not match the vertex format bound.
   at: draw_list_draw (drivers/vulkan/rendering_device_vulkan.cpp:7284)
ERROR: Attempted to use an unused shader variant (shader is null),
   at: get_render_pipeline (./servers/rendering/renderer_rd/pipeline_cache_rd.h:74)
ERROR: Condition "!pipeline" is true.
   at: draw_list_bind_render_pipeline (drivers/vulkan/rendering_device_vulkan.cpp:7078)
ERROR: The vertex format used to create the pipeline does not match the vertex format bound.
   at: draw_list_draw (drivers/vulkan/rendering_device_vulkan.cpp:7284)
ERROR: Attempted to use an unused shader variant (shader is null),
   at: get_render_pipeline (./servers/rendering/renderer_rd/pipeline_cache_rd.h:74)
ERROR: Condition "!pipeline" is true.
   at: draw_list_bind_render_pipeline (drivers/vulkan/rendering_device_vulkan.cpp:7078)
ERROR: The vertex format used to create the pipeline does not match the vertex format bound.
   at: draw_list_draw (drivers/vulkan/rendering_device_vulkan.cpp:7284)
ERROR: Attempted to use an unused shader variant (shader is null),
   at: get_render_pipeline (./servers/rendering/renderer_rd/pipeline_cache_rd.h:74)
ERROR: Condition "!pipeline" is true.
   at: draw_list_bind_render_pipeline (drivers/vulkan/rendering_device_vulkan.cpp:7078)
ERROR: The vertex format used to create the pipeline does not match the vertex format bound.
   at: draw_list_draw (drivers/vulkan/rendering_device_vulkan.cpp:7284)
ERROR: Attempted to use an unused shader variant (shader is null),
   at: get_render_pipeline (./servers/rendering/renderer_rd/pipeline_cache_rd.h:74)
ERROR: Condition "!pipeline" is true.
   at: draw_list_bind_render_pipeline (drivers/vulkan/rendering_device_vulkan.cpp:7078)
ERROR: The vertex format used to create the pipeline does not match the vertex format bound.
   at: draw_list_draw (drivers/vulkan/rendering_device_vulkan.cpp:7284)
ERROR: Attempted to use an unused shader variant (shader is null),
   at: get_render_pipeline (./servers/rendering/renderer_rd/pipeline_cache_rd.h:74)
ERROR: Condition "!pipeline" is true.
   at: draw_list_bind_render_pipeline (drivers/vulkan/rendering_device_vulkan.cpp:7078)
ERROR: The vertex format used to create the pipeline does not match the vertex format bound.
   at: draw_list_draw (drivers/vulkan/rendering_device_vulkan.cpp:7284)
ERROR: Attempted to use an unused shader variant (shader is null),
   at: get_render_pipeline (./servers/rendering/renderer_rd/pipeline_cache_rd.h:74)
ERROR: Condition "!pipeline" is true.
   at: draw_list_bind_render_pipeline (drivers/vulkan/rendering_device_vulkan.cpp:7078)
ERROR: The vertex format used to create the pipeline does not match the vertex format bound.
   at: draw_list_draw (drivers/vulkan/rendering_device_vulkan.cpp:7284)
ERROR: Attempted to use an unused shader variant (shader is null),
   at: get_render_pipeline (./servers/rendering/renderer_rd/pipeline_cache_rd.h:74)
ERROR: Condition "!pipeline" is true.
   at: draw_list_bind_render_pipeline (drivers/vulkan/rendering_device_vulkan.cpp:7078)
ERROR: The vertex format used to create the pipeline does not match the vertex format bound.
   at: draw_list_draw (drivers/vulkan/rendering_device_vulkan.cpp:7284)
ERROR: Attempted to use an unused shader variant (shader is null),
   at: get_render_pipeline (./servers/rendering/renderer_rd/pipeline_cache_rd.h:74)
ERROR: Condition "!pipeline" is true.
   at: draw_list_bind_render_pipeline (drivers/vulkan/rendering_device_vulkan.cpp:7078)
ERROR: The vertex format used to create the pipeline does not match the vertex format bound.
   at: draw_list_draw (drivers/vulkan/rendering_device_vulkan.cpp:7284)
ERROR: Attempted to use an unused shader variant (shader is null),
   at: get_render_pipeline (./servers/rendering/renderer_rd/pipeline_cache_rd.h:74)
ERROR: Condition "!pipeline" is true.
   at: draw_list_bind_render_pipeline (drivers/vulkan/rendering_device_vulkan.cpp:7078)
ERROR: The vertex format used to create the pipeline does not match the vertex format bound.
   at: draw_list_draw (drivers/vulkan/rendering_device_vulkan.cpp:7284)
ERROR: Attempted to use an unused shader variant (shader is null),
   at: get_render_pipeline (./servers/rendering/renderer_rd/pipeline_cache_rd.h:74)
ERROR: Condition "!pipeline" is true.
   at: draw_list_bind_render_pipeline (drivers/vulkan/rendering_device_vulkan.cpp:7078)
ERROR: The vertex format used to create the pipeline does not match the vertex format bound.
   at: draw_list_draw (drivers/vulkan/rendering_device_vulkan.cpp:7284)
ERROR: Attempted to use an unused shader variant (shader is null),
   at: get_render_pipeline (./servers/rendering/renderer_rd/pipeline_cache_rd.h:74)
ERROR: Condition "!pipeline" is true.
   at: draw_list_bind_render_pipeline (drivers/vulkan/rendering_device_vulkan.cpp:7078)
ERROR: The vertex format used to create the pipeline does not match the vertex format bound.
   at: draw_list_draw (drivers/vulkan/rendering_device_vulkan.cpp:7284)
Project FPS: 13 (76.9 mspf)
everythingandnothingdev commented 3 years ago

In that project specifically the errors show consistently when the VoxelGI node is enabled. It's a bit different problem from it showing randomly on model load, but perhaps they are related.

BraqueDown commented 3 years ago

I get similar errors as @akien-mga when VoxelGI is used (f3ab09413), the console is flooded, and CPU time in the editor nosedives.

image

Weirdly, neither the errors nor perf hit occur when previewing a camera. image

Calinou commented 2 years ago

When opening the project in 4.0.alpha 1839cae8a or https://github.com/godotengine/godot/commit/c80540f9a20b45d107b9bed1e749571a83492337, I get a crash with the following backtrace (even after removing the .godot/ folder that was committed to version control):

#0  StringName::StringName (this=0x7fffa0021000) at ./core/string/string_name.h:72
#1  0x0000000004d3625b in CowData<StringName>::resize<false> (this=0x7fffa6ffb630, p_size=1668505455) at ./core/templates/cowdata.h:310
#2  0x0000000004d35d3f in Vector<StringName>::resize (this=0x7fffa6ffb628, p_size=1668505455) at ./core/templates/vector.h:91
#3  0x00000000096dd9da in ResourceLoaderBinary::open (this=0x7fffa6ffb5c8, p_f=..., p_no_resources=false, p_keep_uuid_paths=true) at core/io/resource_format_binary.cpp:1025
#4  0x00000000096de5c3 in ResourceLoaderBinary::get_dependencies (this=0x7fffa6ffb5c8, p_f=..., p_dependencies=0x7fffa6ffb850, p_add_types=false) at core/io/resource_format_binary.cpp:924
#5  0x00000000096df4ef in ResourceFormatLoaderBinary::get_dependencies (this=0xa921030, p_path=..., p_dependencies=0x7fffa6ffb850, p_add_types=false)
    at core/io/resource_format_binary.cpp:1185
#6  0x00000000096fc55a in ResourceLoader::get_dependencies (p_path=..., p_dependencies=0x7fffa6ffb850, p_add_types=false) at core/io/resource_loader.cpp:731
#7  0x000000000654d6fe in EditorFileSystem::_get_dependencies (this=0xf1c9260, p_path=...) at editor/editor_file_system.cpp:1470
#8  0x0000000006548b85 in EditorFileSystem::_scan_new_dir (this=0xf1c9260, p_dir=0x7fffa0002ee0, da=..., p_progress=...) at editor/editor_file_system.cpp:905
#9  0x0000000006547927 in EditorFileSystem::_scan_new_dir (this=0xf1c9260, p_dir=0x7fffa0001360, da=..., p_progress=...) at editor/editor_file_system.cpp:792
#10 0x0000000006547927 in EditorFileSystem::_scan_new_dir (this=0xf1c9260, p_dir=0x7fffa0000f40, da=..., p_progress=...) at editor/editor_file_system.cpp:792
#11 0x0000000006547109 in EditorFileSystem::_scan_filesystem (this=0xf1c9260) at editor/editor_file_system.cpp:320
#12 0x000000000654a34d in EditorFileSystem::_thread_func (_userdata=0xf1c9260) at editor/editor_file_system.cpp:346
#13 0x000000000955653f in Thread::callback (p_self=0xf1c9668, p_settings=..., p_callback=0x654a330 <EditorFileSystem::_thread_func(void*)>, p_userdata=0xf1c9260) at core/os/thread.cpp:75
#14 0x00000000095573ea in std::__invoke_impl<void, void (*)(Thread*, Thread::Settings const&, void (*)(void*), void*), Thread*, Thread::Settings, void (*)(void*), void*> (
    __f=@0x1f75ce68: 0x95564c0 <Thread::callback(Thread*, Thread::Settings const&, void (*)(void*), void*)>, __args=@0x1f75ce48: 0xf1c9260, __args=@0x1f75ce48: 0xf1c9260, 
    __args=@0x1f75ce48: 0xf1c9260, __args=@0x1f75ce48: 0xf1c9260) at /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/invoke.h:61
#15 0x0000000009557261 in std::__invoke<void (*)(Thread*, Thread::Settings const&, void (*)(void*), void*), Thread*, Thread::Settings, void (*)(void*), void*> (
    __fn=@0x1f75ce68: 0x95564c0 <Thread::callback(Thread*, Thread::Settings const&, void (*)(void*), void*)>, __args=@0x1f75ce48: 0xf1c9260, __args=@0x1f75ce48: 0xf1c9260, 
    __args=@0x1f75ce48: 0xf1c9260, __args=@0x1f75ce48: 0xf1c9260) at /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/invoke.h:96
#16 0x00000000095571dd in std::thread::_Invoker<std::tuple<void (*)(Thread*, Thread::Settings const&, void (*)(void*), void*), Thread*, Thread::Settings, void (*)(void*), void*> >::_M_invoke<0ul, 1ul, 2ul, 3ul, 4ul> (this=0x1f75ce48) at /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/std_thread.h:252
#17 0x0000000009557145 in std::thread::_Invoker<std::tuple<void (*)(Thread*, Thread::Settings const&, void (*)(void*), void*), Thread*, Thread::Settings, void (*)(void*), void*> >::operator() (this=0x1f75ce48) at /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/std_thread.h:259
#18 0x0000000009556db9 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(Thread*, Thread::Settings const&, void (*)(void*), void*), Thread*, Thread::Settings, void (*)(void*), void*> > >::_M_run (this=0x1f75ce40) at /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/std_thread.h:210
#19 0x000000000a04dea3 in execute_native_thread_routine ()
#20 0x00007ffff7a8ce2d in start_thread () from /lib64/libc.so.6
#21 0x00007ffff7b121b0 in clone3 () from /lib64/libc.so.6

Built-in crash handler fails to kick in, so I used gdb here.