Files
mtgodot-poc/test/rendering/particle-leak

Particle shader lifetime reproducer

Independent Godot project: no game assets, autoloads, GDExtension, network, EffectPlayer, or particles emitter. Eight short-lived ParticleProcessMaterials cycle through three emission shapes. Weak references must all be dead before exit; a RenderingServer synchronization also runs before quitting.

Export this project with the installed macOS template using --export-release and --export-debug into separate directories under the repository's build/. Run each exported executable and preserve both stdout and stderr until process exit. A run is clean only if ISOLATED_PARTICLE_EXIT alive=0 is present and no shader/RID error follows. The success marker alone is not a clean-exit verdict.

2026-09-10, Godot 4.7.1 official, Apple M4/Metal:

  • Release: zero surviving materials, three ParticlesShaderRD/Shader RID leaks.
  • Debug: zero surviving materials, no shader/RID leak.

Logs: build/rendering/particle-isolated-release.log and build/rendering/particle-isolated-debug.log. Path overrides (--main-pack, external --script) are not supported by the installed release template; export a standalone app instead. This project contains no copyrighted artwork and may be used as a minimal upstream reproduction if separately authorized.

2026-09-11: an unmodified same-revision arm64 release build using debug_symbols=yes optimize=speed lto=none vulkan=no exits cleanly in this project and in two complete game package checks. Rebuild it with bash script/build_macos_release_engine.sh arm64 from the repository root. This is a verified alternative build path, not proof of a specific compiler bug or a source fix to the installed official template. Intel and Vulkan are outside this result.