godot: Vulkan: GPUParticles3D crash when duplicating 128 at once

Godot version

4.0 Beta 10

System information

Linux Mint 21, Vulkan, Intel Iris Xe (Intel i5-1135G7)

Issue description

Godot throws this pair of errors two times when “Z-Billboard” or “View Depth” flags are checked in GPUParticle3D properties, and when you switch to a scene that contains them:

E 0:03:11:0898   compute_list_bind_uniform_set: Condition "!uniform_set" is true.
  <C++ Source>   drivers/vulkan/rendering_device_vulkan.cpp:7807 @ compute_list_bind_uniform_set()
E 0:03:11:0898   compute_list_dispatch: Uniforms were never supplied for set (2) at the time of drawing, which are required by the pipeline
  <C++ Error>    Method/function failed.
  <C++ Source>   drivers/vulkan/rendering_device_vulkan.cpp:8006 @ compute_list_dispatch()

Also, whenever there’s a big enough amount of such particle system nodes in the scene (in reproduction project it’s between 128 and 256), Godot freezes, console showing errors:

ERROR: Only one draw/compute list can be active at the same time.
   at: compute_list_begin (drivers/vulkan/rendering_device_vulkan.cpp:7715)
ERROR: Only one draw/compute list can be active at the same time.
   at: compute_list_begin (drivers/vulkan/rendering_device_vulkan.cpp:7715)
ERROR: Condition "p_list != ID_TYPE_COMPUTE_LIST" is true.
   at: compute_list_bind_compute_pipeline (drivers/vulkan/rendering_device_vulkan.cpp:7728)
ERROR: Condition "p_list != ID_TYPE_COMPUTE_LIST" is true.
   at: compute_list_bind_compute_pipeline (drivers/vulkan/rendering_device_vulkan.cpp:7728)
ERROR: Condition "p_list != ID_TYPE_COMPUTE_LIST" is true.
   at: compute_list_bind_uniform_set (drivers/vulkan/rendering_device_vulkan.cpp:7792)
ERROR: Condition "p_list != ID_TYPE_COMPUTE_LIST" is true.
   at: compute_list_bind_uniform_set (drivers/vulkan/rendering_device_vulkan.cpp:7792)
ERROR: Condition "p_list != ID_TYPE_COMPUTE_LIST" is true.
   at: compute_list_bind_uniform_set (drivers/vulkan/rendering_device_vulkan.cpp:7792)
ERROR: Condition "p_list != ID_TYPE_COMPUTE_LIST" is true.
   at: compute_list_bind_uniform_set (drivers/vulkan/rendering_device_vulkan.cpp:7792)
ERROR: Condition "p_list != ID_TYPE_COMPUTE_LIST" is true.
   at: compute_list_set_push_constant (drivers/vulkan/rendering_device_vulkan.cpp:7946)
ERROR: Condition "p_list != ID_TYPE_COMPUTE_LIST" is true.
   at: compute_list_dispatch_threads (drivers/vulkan/rendering_device_vulkan.cpp:8026)
ERROR: Condition "p_list != ID_TYPE_COMPUTE_LIST" is true.
   at: compute_list_bind_uniform_set (drivers/vulkan/rendering_device_vulkan.cpp:7792)
ERROR: Condition "p_list != ID_TYPE_COMPUTE_LIST" is true.
   at: compute_list_bind_uniform_set (drivers/vulkan/rendering_device_vulkan.cpp:7792)
ERROR: Condition "p_list != ID_TYPE_COMPUTE_LIST" is true.
   at: compute_list_set_push_constant (drivers/vulkan/rendering_device_vulkan.cpp:7946)
ERROR: Condition "p_list != ID_TYPE_COMPUTE_LIST" is true.
   at: compute_list_dispatch_threads (drivers/vulkan/rendering_device_vulkan.cpp:8026)
ERROR: Condition "!compute_list" is true.
   at: compute_list_end (drivers/vulkan/rendering_device_vulkan.cpp:8117)

Could be related to #63315 as I’m also using Linux on an integrated Intel GPU.

Steps to reproduce

  1. Make any working particle system
  2. Check “View Depth” flag in draw order OR “Z-Billboard” flag in transform align
  3. Switch to scene with the particle system from any other scene to get “Uniforms were never supplied” error message
  4. Duplicate particled systems (whether instances or local) until there is ~128-256 of them to get the freeze

Minimal reproduction project

testdebug.zip

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Reactions: 7
  • Comments: 20 (5 by maintainers)

Most upvoted comments

@IvanIG3 @zicman666 If you aren’t duplicating a lot of nodes, these are likely unrelated issues. Please open a separate issue with a minimal reproduction project attached, and describe what you were trying to achieve there.

I had this issue when running one big GPUParticles3D emitting 1000 particles alongside 100 smaller GPUParticles3D each emitting 3 particles. I had Billboard enabled in the ParticleProcess Material, and crashed with the “compute_list” errors. I then disabled Billboard in the ParticleProcess material and instead enabled it in my Draw Pass 1 Mesh’s material, and I haven’t crashed since. - Godot 4.0.3-mono

I also found this bug. At a random time, Godot freezes and throws a bunch of errors. I’m using Godot 4.0.3.

godot_bug