You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This is a prototype for adding functions within spirv_std to query SPIR-V builtin read-only global variables. This is the very first part of #449.
Currently, the prototype in this PR adds the function spirv_std::builtin::compute::local_invocation_id() -> UVec3 to query the local_invocation_id without having to pass it through from the entry point declaration. Interestingly, the linker infrastructure for this to work was already in place for other reasons (dynamically adding OpVariables during codegen), so this PR just needs to adds the function with the correct inline assembly.
Will using such functions instead of arguments mean lower register usage overall, or how do those things interact with each other across function calls?
It emits semantically the same spirv code as previously: define a builtin global variable and read it. Just that you can now do this anywhere in your codebase, rather than having to pass it down from the entry point and have to hope noone accidentally passes the wrong thing.
Register usage heavily depends on the target platform. See AMD RDNA3 ISA pdf on "3.5. Initial Wave State", there you'll see compute shaders use 4 scalar registers (SGPR, once per workgroup) for workgroup_id plus some bitflags. For local_invocation_id they seem to have been changes in RDNA3, it seems like it only uses 1 vector register (VGPR, once per invocation / thread) now (even though the table in the pdf defines it for GS (eg. mesh shaders) not CS, I assume it's the same), whereas RDNA2 used 3 VGPRs, one for each axis (see "3.12.2. SGPR Initialization").
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
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.
This is a prototype for adding functions within spirv_std to query SPIR-V builtin read-only global variables. This is the very first part of #449.
Currently, the prototype in this PR adds the function
spirv_std::builtin::compute::local_invocation_id() -> UVec3to query thelocal_invocation_idwithout having to pass it through from the entry point declaration. Interestingly, the linker infrastructure for this to work was already in place for other reasons (dynamically addingOpVariables during codegen), so this PR just needs to adds the function with the correct inline assembly.More functions to come.