naga: fix panic parsing SPIR-V subgroup reduce/scan/ballot ops - #9957
Merged
Conversation
jimblandy
requested changes
Jul 29, 2026
jimblandy
left a comment
Member
There was a problem hiding this comment.
This looks fine, but please trim the snapshot output languages.
nazar-pc
force-pushed
the
naga-spirv-parsing-fix
branch
from
July 29, 2026 15:59
05cfd9b to
604bb60
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Connections
Fixes #8389.
Description
Disclaimer: this PR was mostly done using a clanker and I do not fully understand the code changes, but I have reasonably high confidence in their correctness.
Several
OpGroupNonUniform*handlers in the SPIR-V frontend calledemitter.finish()before reading their argument operand viaget_expr_handle!. When the argument's defining expression came from a control-flow body that had already closed (e.g. a value computed inside a loop and used after it),get_expr_handleneeds to spill the value through a temporary local variable, which requires callingemitter.finish()itself. Since the emitter had already been finished, this second call unwrapped aNoneand panicked.Move the
emitter.finish()call to after the argument expression handle(s) are obtained forOpGroupNonUniformBallot, the arithmetic/logical reduce-scan ops, the broadcast/shuffle ops, andOpGroupNonUniformQuadSwap.Testing
Existing CI tests pass, new regression test was added and original SPIR-V file from #8389 no longer crashes naga CLI. The project where I originally hit this issue also passes all tests with this fix applied (Linux, AMDGPU, Vulkan).
Checklist
wgpumay be affected behaviorally.CHANGELOG.mdentries for the user-facing effects of this change are present.