summaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2020-03-27 16:16:27 -0400
committerGitHub <noreply@github.com>2020-03-27 16:16:27 -0400
commite267ce24e37b9b7f98921f75abc150c1463b1d6d (patch)
tree331660a83ae0b72116b79b5cc8bf7a9c06555db5 /docs
parent5b0b8436123aa2faa9b682ed45efe2bd7edbf01b (diff)
Adds WaveShuffle intrinsic (#1298)
* Support for WaveReadLaneAt with dynamic (but uniform across Wave) on Vk by enabling VK1.4. Fixed wave-lane-at.slang test to test with laneId that is uniform across the Wave. * Added WaveShuffle intrinsic. Test for WaveShuffle intrinsic. * Added some documentation on WaveShuffle * Fix that version required for subgroupBroadcast to be non constexpr is actually 1.5
Diffstat (limited to 'docs')
-rw-r--r--docs/target-compatibility.md11
1 files changed, 11 insertions, 0 deletions
diff --git a/docs/target-compatibility.md b/docs/target-compatibility.md
index e8edeeaf5..6967f7454 100644
--- a/docs/target-compatibility.md
+++ b/docs/target-compatibility.md
@@ -20,6 +20,7 @@ Items with ^ means there is some discussion about support later in the document
| SM6.0 Wave Intrinsics | No | Yes | Partial | Yes | No
| SM6.0 Quad Intrinsics | No | Yes | No + | No | No
| SM6.5 Wave Intrinsics | No | Yes ^ | No + | Yes | No
+| WaveShuffle | No | Limited ^ | Yes + | Yes | No
| Tesselation | Yes ^ | Yes ^ | No + | No | No
| Graphics Pipeline | Yes | Yes | Yes | No | No
| Ray Tracing DXR 1.0 | No | Yes ^ | Yes ^ | No | No
@@ -56,6 +57,16 @@ tex.GetDimensions is the GetDimensions method on 'texture' objects. This is not
SM6.5 Wave Intrinsics are supported, but requires a downstream DXC compiler that supports SM6.5. As it stands the DXC shipping with windows does not.
+## WaveShuffle
+
+WaveShuffle is an intrinsic added to the Slang stdlibrary to expose the glsl `subgroupShuffle` intrinsics and allow loosened requirements on laneId.
+
+`HLSL` uses `WaveReadLaneAt` and this requires the `laneId` must be 'dynamically uniform' across the wave. WaveShuffle has the same functionality but relaxes this restriction.
+
+`WaveReadLaneAt` most obviously maps to `subgroupBroadcast` in GLSL. This has the extra restriction the index must be compile time consts. With SPIR-V 1.5 it is allowed to be 'dynamically uniform', but doesn't work on current glslang.
+
+NOTE! That using WaveShuffle to target `HLSL` will produce `WaveReadLaneAt` - that means strictly speaking the restriction *still applies*, and the correct behavior will only be seen on hardware that allows the loosed requirements of laneId, on hardware that does not result of `WaveShuffle` is the same as `WaveReadLaneId` which is undefined.
+
## Tesselation
Although tesselation stages should work on D3D11 and D3D12 they are not tested within our test framework, and may have problems.