- Fix an infinite loop when removing a shader from the middle of a cache chain (the list traversal never advanced).
- Vulkan direct-access path: record the bound vertex-buffer offset so the redundant-bind check works; previously one vkCmdBindVertexBuffers per buffer group was issued on every draw.
- Fix an out-of-bounds __m256i lane read in the clang texture-hash path.
- Fix a use-after-free read in the texture-readback queue and an inverted fetch-shader cache assertion.
- Initialize MetalRenderer commit-threshold fields; avoid re-strlen'ing the shader source when assigning it.
- MemMapperUnix: mmap returns MAP_FAILED (not NULL) on failure; translate it to nullptr so the existing '!ptr' checks in the memory backend actually detect a failed reservation.
- coreinit: bound writes to the fixed 256-entry active-thread array.
- betype: operator|(betype) returned a reference to a local temporary; return by value like the sibling overload.
- WUD: compute the index-table size in 64-bit and validate it against the file size before allocating, and null-check the allocation. A crafted uncompressedSize could previously overflow a 32-bit size and under-allocate, leading to out-of-bounds access.
- WUHB: guard against a zero-sized hash table (division by zero) and cap hash-chain traversal to avoid an infinite loop on cyclic chains.
- WUHB directory listing and FSA ReadDir: use bounded, always-NUL-terminated name copies (a 128-255 byte filename could overflow the guest response).
- Verify the SHA-256 of the downloaded MoltenVK tarball before extracting it (macOS jobs).
- Add concurrency cancellation so superseded PR/push builds stop instead of running the full matrix to completion.
- Replace the removed ::set-output workflow command with $GITHUB_OUTPUT in the release version calculation.
Requires both VK_EXT_attachment_feedback_loop and VK_EXT_attachment_feedback_loop_dynamic_state to be provided by the driver. Otherwise it will fall back to the old code. Main benefit is for improving performance as it makes barriers cheaper and doesn't force us to unnecessarily interrupt renderpasses
Skips the overhead of having to lookup each shader stage individually. Additionally, having whole sets as a lookup key gives us a more trustworthy heuristic than if we only have independent information for each shader stage. We can use this to skip shader hashing most of the time when they are part of a known set.
When coreinit exit() is hit, then Cemu will only close when the game was launched directly via command line parameters (-g or -t). Otherwise it returns to the game list. In the case where Cemu closes it will forward the coreinit exit status code as it's own exit status code. This is useful for cases where Cemu is used as a CLI tool for testing homebrew