Short description of the issue
The experimental Vulkan backend in 26.2 fragments its rendering pipeline by issuing 45+ dynamic render passes (vkCmdBeginRendering) and blits per frame inside a single command buffer. While command submission batching is functioning correctly (only 1-2 vkQueueSubmit calls per frame), the sheer volume of distinct render passes causes a severe performance penalty on Tile-Based Deferred Rendering (TBDR) architectures like Apple Silicon. Because MoltenVK translates each vkCmdBeginRendering into a separate MTLRenderCommandEncoder, the GPU is forced to repeatedly flush its ultra-fast, on-chip tile memory out to system RAM, completely bottlenecking memory bandwidth.
Steps to reproduce the issue
Launch Minecraft Java Edition version 26.2.
Enable the Vulkan rendering backend in the graphics options.
Load into a world and capture a Metal System Trace using Xcode Instruments.
Expand a single
vkQueueSubmit MTLCommandBufferin the trace hierarchy.Observe the 45+ independent
vkCmdBeginRendering RenderEncoderandBlitEncoderinstances executing sequentially within that single command buffer.
Expected result
Vulkan draw commands are consolidated into a minimal number of unified dynamic rendering passes. Intermediate data (like depth or G-buffers) remains in on-chip tile memory rather than being flushed to main memory between dozens of micro-passes.
Actual result
The pipeline issues 45+ isolated vkCmdBeginRendering calls per frame. On Apple Silicon and other mobile architectures, this forces constant, expensive hardware memory flushes that saturate bandwidth and cripple framerates.
Environment
macOS 26, Apple M1
Attachments
Comments 6
Are you still getting issues in the latest snapshot? Vulkan performance has been damn good for me since 26.3 Snapshot 6, while OpenGL performance saw a regression in Snapshot 4 (see MC-310154).
When encountering performance issues in a given full release which were not present in a previous one, it is always good to see if they have already been fixed in a snapshot, since these sorts of things change all the time.
With the latest snapshot (26.3 Snapshot 10) I am getting higher FPS but according to Xcode Instruments, there is still a lot of vkCmdBeginRendering calls (but it did decrease from ~45 to ~33)
Thanks for replying. I myself am getting ~50 calls per frame in 26.3 Snapshot 10, so I’ll mark this as Confirmed. It’s exciting that there’s still so much potential for performance improvements in this game.
Can you confirm if the performance in the latest snapshot is better or worse than with OpenGL?
Whilst we agree that performance still can be improved significantly, we are considering this bug only as “it is worse than OpenGL” and not “it is not as good as it could be” - we are still aiming to improve performance as much as we can, but that is tracked internally and not on the bug tracker.
I posted a performance comparison to MC-310154, demonstrating that Vulkan remains vastly superior to OpenGL on my system (M3 Max). It seems likely that Vulkan is also the better choice on M1 given the similarity of the architecture, however I myself cannot confirm this.
Thank you for helping us improve Minecraft! We saved your files: