-
Notifications
You must be signed in to change notification settings - Fork 712
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[SPIR-V] Implement WaveMatch intrinsic support #6545
Comments
Adds support for the WaveMatch() intrinsic function from Shader Model 6.5 using the OpGroupNonUniformPartitionNV instruction from the SPV_NV_shader_subgroup_partitioned extension. Requires KhronosGroup/SPIRV-Tools#5648 Fixes microsoft#6545
Shall we add an option for DXC to specify the targeted vendor? |
Is "vendor" the right thing to slice on, or should it be on which extensions should be allowed? |
I’d like to have a larger discussion about the design for something like this. I see the utility, but I wonder if there is a better way to express it (perhaps in terms of which extensions a user wants to enable)? We should also make sure whatever we do for this aligns with LLVM/Clang so that we can avoid introducing a feature that would be difficult to support in the future. |
There is already a SPIR-V flag to specify the list of extension you are allowed to use. Yes, this issue might not be the best location to discuss this. |
Right, we already support slicing on which extensions are allowed, realizing that has drawbacks and is difficult to use. Vulkan profiles will probably provide a more user-friendly way to express which capability are supported by a target environment, and is tentatively our plan for future upstream work, but it's not something we're likely to change in DXC right now, and is definitely outside the scope of this PR. |
All KHR subgroup ops except for Arithmetic, Quad and Clustered are pretty much ubiquitous across all shader stages on Desktop when targetting Vulkan 1.3 Not sure you need Clustered (aka NV partitioned) ops for this? |
Unfortunately I don't think there is a substitute for |
Ah yeah I see that you're after partitioning according to an arbitrary ballot. There's Subgroup Clustered ops, but that partitions into sets of consecutive invocations of power-of-two, i.e 4, 8, 16 |
Adds support for the WaveMatch() intrinsic function from Shader Model 6.5 using the OpGroupNonUniformPartitionNV instruction from the SPV_NV_shader_subgroup_partitioned extension. Requires KhronosGroup/SPIRV-Tools#5648 Fixes microsoft#6545
Adds support for the `WaveMatch()` intrinsic function from Shader Model 6.5 using the `OpGroupNonUniformPartitionNV` instruction from the `SPV_NV_shader_subgroup_partitioned` extension. SPIRV-Tools bumped to include: KhronosGroup/SPIRV-Tools#5648 Fixes #6545
The WaveMatch() Function was introduced in shader model 6.5 but is not yet supported by the SPIR-V backend. It should be implemented using: https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/main/extensions/NV/SPV_NV_shader_subgroup_partitioned.html
The text was updated successfully, but these errors were encountered: