#123481·godot

Issue with macOS (v26) and Godot (4.7.1) deadlocking when compiling CanvasShaderRD on M4/5 silicon

Author: Ikadzuchi77Created Sep 14, 2026Updated Sep 28, 2026
Labelsbugplatform:macostopic:platformsneeds testingregression

Tested versions

  • Issue occurs on 4.7.1.stable.mono.official using both native Metal and--rendering-driver vulkan (moltenVK 1.4.1).

  • 4.6.3 Metal on Mac does not hang compiling the shaders, and the title screen remains functions and animated, though the 4.7.1 project isn’t fully playable on 4.6.3.

  • Also runs 4.7.1 using --rendering-method gl_compatbility --rendering-driver opengl3.

  • Zero issues with Windows builds.

Downloaded Godot versions: 4.7.1 a13da4feb 4.6.3 7d41c59c4

Macs:

  • Both on macOS 26.6.2 (25G83)
  • MacBook Pro, M5, AGXMetalG17G
  • Mac mini, M4, AGXMetalG16G_B0

System information

macOS 26.6.2, MacBook Pro M5 and Mac mini M4, Metal and Vulcan.

Issue description

We came across an interesting issue when trying to draw canvas/compute shaders to the screen when using Metal on macOS 26 + Godot 4.7.1. Once the shaders are read and then the pipeline is being built, the entire game deadlocks and requires a force close.

Log examples...

Mac mini M4: godot_vulkan_hang_sample_2026-08-24_tsuki_m4.txt godot_metal_hang_sample_2026-08-24_tsuki_m4.txt MacBook Pro M5: godot_metal_hang_sample_2026-08-24.txt

Steps to reproduce

Steps:

  • Starting Godot using "--path ." or from within Godot itself, same issue.

  • Clean booting without using a save file.

  • Splash screen shows as normal but is not animated.

  • Startup fails during compile.

  • CPU drops to 0% on Godot after ~15 seconds

  • Godot needs to be force-quit

  • Log shows the last hit as... Shader cache miss for CanvasShaderRD/1ac5f6c8d534ebab572b3f886e38134784245fbd5fa01c7cbb6cc452e5400080/ and then compute GLSL, then nothing else gets appended.

  • Threasd stuck sample... com.apple.MTLCompilerConnectionQueue

  • stack... newRenderPipelineStateWithDescriptor > createFragmentProgramVariant > compileFunction_Impl > MTLCompilerSchdulr::buildRequest

  • Main thread... std::condition_variable::wait

Other notes:

  • samples have no .NET frames.
  • I checked these and they're not the same:

#106757 (slow first compile, eventually finishes) #119436 (runtime fence timeout) #120566 (Metal 2D crash)... Vulkan is working here, we're getting the hardlock trying it.

Engine log: Metal 4.0 - Forward+ - Using Device #0: Apple - Apple M4 (Apple9)... [M5 on the MacBook Pro]

Tried these in testing:

  • Tested an empty Forward+ ColorRect on 4.7.1 Metal and it boots normally.
  • Loading of the shaders but not drawing them boots, preload_done is fine, the hang occurs when Metal goes to actually build the GPU pipeline for the shader, then the hardlock.
  • We load a lot of 2D canvas shaders on an "LED Lattice" (think a virtual TV screen), plus RenderingDevice compute .glsl, and many CanvasShaderRD variants drawn.

OpenGL is our fallback, but we'd like to use Metal to be more performant on Macs.

Minimal reproduction project (MRP)

CanvasShaderRD_Metal_Hang_MRP.zip Apologies, accidently let an extra folder in the zip file... it's late, that's my lame excuse.

If you need more in the MRP, please let me know.