From bc392f9dbfb8cb6c359bb890fb85b831e49bfd55 Mon Sep 17 00:00:00 2001 From: Tim Foley Date: Thu, 22 Aug 2019 09:49:11 -0700 Subject: Update signatures for Shader Model 6 functions (#1029) * Update signatures for Shader Model 6 functions We originally culled out list of Shader Model 6 function prototypes from some combination of MSDN and the dxc wiki, but this was when things were in a pre-release state and the names of many functions changed (as well as some functions being added/removed). For this change, I initially tried to look at MSDN, but the documentation there was internally inconsistent and included things like misspellings in function names (which I *hoped* weren't accurate to the real implementation). Instead, I looked at the meta-program input that dxc uses to generate its intrinsic definitions and used that to discover the updated function names along with what was added/removed, a few signature differences, and some extra functions that don't even seem to be documented at all on MSDN> These have *not* been tested in any meaningful way, so this is really a best-effort thing. Given that most of the old functions had the wrong names there was no way for them to be used in working code anyway, so this is unlikely to cause breakage. * fixup: quadLaneID is a uint --- source/slang/hlsl.meta.slang | 122 +++++++++++++++++++++++++--------------- source/slang/hlsl.meta.slang.h | 124 +++++++++++++++++++++++++---------------- 2 files changed, 153 insertions(+), 93 deletions(-) (limited to 'source') diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index 7c7c2c7fc..9bd1c2928 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -1307,61 +1307,67 @@ __generic matrix T QuadReadLaneAt(T sourceValue, uint quadLaneID); +__generic vector QuadReadLaneAt(vector sourceValue, uint quadLaneID); +__generic matrix QuadReadLaneAt(matrix sourceValue, uint quadLaneID); -__generic T QuadReadLaneAt(T sourceValue, int quadLaneID); -__generic vector QuadReadLaneAt(vector sourceValue, int quadLaneID); -__generic matrix QuadReadLaneAt(matrix sourceValue, int quadLaneID); +__generic T QuadReadAcrossX(T localValue); +__generic vector QuadReadAcrossX(vector localValue); +__generic matrix QuadReadAcrossX(matrix localValue); -__generic T QuadSwapX(T localValue); -__generic vector QuadSwapX(vector localValue); -__generic matrix QuadSwapX(matrix localValue); +__generic T QuadReadAcrossY(T localValue); +__generic vector QuadReadAcrossY(vector localValue); +__generic matrix QuadReadAcrossY(matrix localValue); -__generic T QuadSwapY(T localValue); -__generic vector QuadSwapY(vector localValue); -__generic matrix QuadSwapY(matrix localValue); +__generic T QuadReadAcrossDiagonal(T localValue); +__generic vector QuadReadAcrossDiagonal(vector localValue); +__generic matrix QuadReadAcrossDiagonal(matrix localValue); -__generic T WaveAllBitAnd(T expr); -__generic vector WaveAllBitAnd(vector expr); -__generic matrix WaveAllBitAnd(matrix expr); +__generic T WaveActiveBitAnd(T expr); +__generic vector WaveActiveBitAnd(vector expr); +__generic matrix WaveActiveBitAnd(matrix expr); -__generic T WaveAllBitOr(T expr); -__generic vector WaveAllBitOr(vector expr); -__generic matrix WaveAllBitOr(matrix expr); +__generic T WaveActiveBitOr(T expr); +__generic vector WaveActiveBitOr(vector expr); +__generic matrix WaveActiveBitOr(matrix expr); -__generic T WaveAllBitXor(T expr); -__generic vector WaveAllBitXor(vector expr); -__generic matrix WaveAllBitXor(matrix expr); +__generic T WaveActiveBitXor(T expr); +__generic vector WaveActiveBitXor(vector expr); +__generic matrix WaveActiveBitXor(matrix expr); -__generic T WaveAllMax(T expr); -__generic vector WaveAllMax(vector expr); -__generic matrix WaveAllMax(matrix expr); +__generic T WaveActiveMax(T expr); +__generic vector WaveActiveMax(vector expr); +__generic matrix WaveActiveMax(matrix expr); -__generic T WaveAllMin(T expr); -__generic vector WaveAllMin(vector expr); -__generic matrix WaveAllMin(matrix expr); +__generic T WaveActiveMin(T expr); +__generic vector WaveActiveMin(vector expr); +__generic matrix WaveActiveMin(matrix expr); -__generic T WaveAllProduct(T expr); -__generic vector WaveAllProduct(vector expr); -__generic matrix WaveAllProduct(matrix expr); +__generic T WaveActiveProduct(T expr); +__generic vector WaveActiveProduct(vector expr); +__generic matrix WaveActiveProduct(matrix expr); -__generic T WaveAllSum(T expr); -__generic vector WaveAllSum(vector expr); -__generic matrix WaveAllSum(matrix expr); +__generic T WaveActiveSum(T expr); +__generic vector WaveActiveSum(vector expr); +__generic matrix WaveActiveSum(matrix expr); -bool WaveAllEqual(bool expr); -bool WaveAllTrue(bool expr); -bool WaveAnyTrue(bool expr); +__generic bool WaveActiveAllEqual(T value); +__generic vector WaveActiveAllEqual(vector value); +__generic matrix WaveActiveAllEqual(matrix value); -uint64_t WaveBallot(bool expr); +__generic uint4 WaveMatch(T value); +__generic uint4 WaveMatch(vector value); +__generic uint4 WaveMatch(matrix value); -uint WaveGetLaneCount(); -uint WaveGetLaneIndex(); -uint WaveGetOrderedIndex(); +bool WaveActiveAllTrue(bool condition); +bool WaveActiveAnyTrue(bool condition); -bool WaveIsHelperLane(); +uint4 WaveActiveBallot(bool condition); +uint WaveActiveCountBits(bool value); -bool WaveOnce(); +uint WaveGetLaneCount(); +uint WaveGetLaneIndex(); +bool WaveIsFirstLane(); __generic T WavePrefixProduct(T expr); __generic vector WavePrefixProduct(vector expr); @@ -1371,13 +1377,37 @@ __generic T WavePrefixSum(T expr); __generic vector WavePrefixSum(vector expr); __generic matrix WavePrefixSum(matrix expr); -__generic T WaveReadFirstLane(T expr); -__generic vector WaveReadFirstLane(vector expr); -__generic matrix WaveReadFirstLane(matrix expr); +__generic T WaveMultiPrefixBitAnd(T expr); +__generic vector WaveMultiPrefixBitAnd(vector expr); +__generic matrix WaveMultiPrefixBitAnd(matrix expr); + +__generic T WaveMultiPrefixBitOr(T expr); +__generic vector WaveMultiPrefixBitOr(vector expr); +__generic matrix WaveMultiPrefixBitOr(matrix expr); + +__generic T WaveMultiPrefixBitXor(T expr); +__generic vector WaveMultiPrefixBitXor(vector expr); +__generic matrix WaveMultiPrefixBitXor(matrix expr); + +uint WavePrefixCountBits(bool value); +uint WaveMultiPrefixCountBits(bool value, uint4 mask); + +__generic T WaveMultiPrefixProduct(T value, uint4 mask); +__generic vector WaveMultiPrefixProduct(vector value, uint4 mask); +__generic matrix WaveMultiPrefixProduct(matrix value, uint4 mask); + +__generic T WaveMultiPrefixSum(T value, uint4 mask); +__generic vector WaveMultiPrefixSum(vector value, uint4 mask); +__generic matrix WaveMultiPrefixSum(matrix value, uint4 mask); + +__generic T WaveReadLaneFirst(T expr); +__generic vector WaveReadLaneFirst(vector expr); +__generic matrix WaveReadLaneFirst(matrix expr); + +__generic T WaveReadLaneAt(T value, int lane); +__generic vector WaveReadLaneAt(vector value, int lane); +__generic matrix WaveReadLaneAt(matrix value, int lane); -__generic T WaveReadLaneAt(T expr, int laneIndex); -__generic vector WaveReadLaneAt(vector expr, int laneIndex); -__generic matrix WaveReadLaneAt(matrix expr, int laneIndex); // `typedef`s to help with the fact that HLSL has been sorta-kinda case insensitive at various points typedef Texture2D texture2D; diff --git a/source/slang/hlsl.meta.slang.h b/source/slang/hlsl.meta.slang.h index 84778f876..9989915f0 100644 --- a/source/slang/hlsl.meta.slang.h +++ b/source/slang/hlsl.meta.slang.h @@ -1383,61 +1383,67 @@ SLANG_RAW("__generic m SLANG_RAW("\n") SLANG_RAW("// Shader model 6.0 stuff\n") SLANG_RAW("\n") -SLANG_RAW("uint GlobalOrderedCountIncrement(uint countToAppendForThisLane);\n") +SLANG_RAW("__generic T QuadReadLaneAt(T sourceValue, uint quadLaneID);\n") +SLANG_RAW("__generic vector QuadReadLaneAt(vector sourceValue, uint quadLaneID);\n") +SLANG_RAW("__generic matrix QuadReadLaneAt(matrix sourceValue, uint quadLaneID);\n") SLANG_RAW("\n") -SLANG_RAW("__generic T QuadReadLaneAt(T sourceValue, int quadLaneID);\n") -SLANG_RAW("__generic vector QuadReadLaneAt(vector sourceValue, int quadLaneID);\n") -SLANG_RAW("__generic matrix QuadReadLaneAt(matrix sourceValue, int quadLaneID);\n") +SLANG_RAW("__generic T QuadReadAcrossX(T localValue);\n") +SLANG_RAW("__generic vector QuadReadAcrossX(vector localValue);\n") +SLANG_RAW("__generic matrix QuadReadAcrossX(matrix localValue);\n") SLANG_RAW("\n") -SLANG_RAW("__generic T QuadSwapX(T localValue);\n") -SLANG_RAW("__generic vector QuadSwapX(vector localValue);\n") -SLANG_RAW("__generic matrix QuadSwapX(matrix localValue);\n") +SLANG_RAW("__generic T QuadReadAcrossY(T localValue);\n") +SLANG_RAW("__generic vector QuadReadAcrossY(vector localValue);\n") +SLANG_RAW("__generic matrix QuadReadAcrossY(matrix localValue);\n") SLANG_RAW("\n") -SLANG_RAW("__generic T QuadSwapY(T localValue);\n") -SLANG_RAW("__generic vector QuadSwapY(vector localValue);\n") -SLANG_RAW("__generic matrix QuadSwapY(matrix localValue);\n") +SLANG_RAW("__generic T QuadReadAcrossDiagonal(T localValue);\n") +SLANG_RAW("__generic vector QuadReadAcrossDiagonal(vector localValue);\n") +SLANG_RAW("__generic matrix QuadReadAcrossDiagonal(matrix localValue);\n") SLANG_RAW("\n") -SLANG_RAW("__generic T WaveAllBitAnd(T expr);\n") -SLANG_RAW("__generic vector WaveAllBitAnd(vector expr);\n") -SLANG_RAW("__generic matrix WaveAllBitAnd(matrix expr);\n") +SLANG_RAW("__generic T WaveActiveBitAnd(T expr);\n") +SLANG_RAW("__generic vector WaveActiveBitAnd(vector expr);\n") +SLANG_RAW("__generic matrix WaveActiveBitAnd(matrix expr);\n") SLANG_RAW("\n") -SLANG_RAW("__generic T WaveAllBitOr(T expr);\n") -SLANG_RAW("__generic vector WaveAllBitOr(vector expr);\n") -SLANG_RAW("__generic matrix WaveAllBitOr(matrix expr);\n") +SLANG_RAW("__generic T WaveActiveBitOr(T expr);\n") +SLANG_RAW("__generic vector WaveActiveBitOr(vector expr);\n") +SLANG_RAW("__generic matrix WaveActiveBitOr(matrix expr);\n") SLANG_RAW("\n") -SLANG_RAW("__generic T WaveAllBitXor(T expr);\n") -SLANG_RAW("__generic vector WaveAllBitXor(vector expr);\n") -SLANG_RAW("__generic matrix WaveAllBitXor(matrix expr);\n") +SLANG_RAW("__generic T WaveActiveBitXor(T expr);\n") +SLANG_RAW("__generic vector WaveActiveBitXor(vector expr);\n") +SLANG_RAW("__generic matrix WaveActiveBitXor(matrix expr);\n") SLANG_RAW("\n") -SLANG_RAW("__generic T WaveAllMax(T expr);\n") -SLANG_RAW("__generic vector WaveAllMax(vector expr);\n") -SLANG_RAW("__generic matrix WaveAllMax(matrix expr);\n") +SLANG_RAW("__generic T WaveActiveMax(T expr);\n") +SLANG_RAW("__generic vector WaveActiveMax(vector expr);\n") +SLANG_RAW("__generic matrix WaveActiveMax(matrix expr);\n") SLANG_RAW("\n") -SLANG_RAW("__generic T WaveAllMin(T expr);\n") -SLANG_RAW("__generic vector WaveAllMin(vector expr);\n") -SLANG_RAW("__generic matrix WaveAllMin(matrix expr);\n") +SLANG_RAW("__generic T WaveActiveMin(T expr);\n") +SLANG_RAW("__generic vector WaveActiveMin(vector expr);\n") +SLANG_RAW("__generic matrix WaveActiveMin(matrix expr);\n") SLANG_RAW("\n") -SLANG_RAW("__generic T WaveAllProduct(T expr);\n") -SLANG_RAW("__generic vector WaveAllProduct(vector expr);\n") -SLANG_RAW("__generic matrix WaveAllProduct(matrix expr);\n") +SLANG_RAW("__generic T WaveActiveProduct(T expr);\n") +SLANG_RAW("__generic vector WaveActiveProduct(vector expr);\n") +SLANG_RAW("__generic matrix WaveActiveProduct(matrix expr);\n") SLANG_RAW("\n") -SLANG_RAW("__generic T WaveAllSum(T expr);\n") -SLANG_RAW("__generic vector WaveAllSum(vector expr);\n") -SLANG_RAW("__generic matrix WaveAllSum(matrix expr);\n") +SLANG_RAW("__generic T WaveActiveSum(T expr);\n") +SLANG_RAW("__generic vector WaveActiveSum(vector expr);\n") +SLANG_RAW("__generic matrix WaveActiveSum(matrix expr);\n") SLANG_RAW("\n") -SLANG_RAW("bool WaveAllEqual(bool expr);\n") -SLANG_RAW("bool WaveAllTrue(bool expr);\n") -SLANG_RAW("bool WaveAnyTrue(bool expr);\n") +SLANG_RAW("__generic bool WaveActiveAllEqual(T value);\n") +SLANG_RAW("__generic vector WaveActiveAllEqual(vector value);\n") +SLANG_RAW("__generic matrix WaveActiveAllEqual(matrix value);\n") SLANG_RAW("\n") -SLANG_RAW("uint64_t WaveBallot(bool expr);\n") +SLANG_RAW("__generic uint4 WaveMatch(T value);\n") +SLANG_RAW("__generic uint4 WaveMatch(vector value);\n") +SLANG_RAW("__generic uint4 WaveMatch(matrix value);\n") SLANG_RAW("\n") -SLANG_RAW("uint WaveGetLaneCount();\n") -SLANG_RAW("uint WaveGetLaneIndex();\n") -SLANG_RAW("uint WaveGetOrderedIndex();\n") +SLANG_RAW("bool WaveActiveAllTrue(bool condition);\n") +SLANG_RAW("bool WaveActiveAnyTrue(bool condition);\n") SLANG_RAW("\n") -SLANG_RAW("bool WaveIsHelperLane();\n") +SLANG_RAW("uint4 WaveActiveBallot(bool condition);\n") +SLANG_RAW("uint WaveActiveCountBits(bool value);\n") SLANG_RAW("\n") -SLANG_RAW("bool WaveOnce();\n") +SLANG_RAW("uint WaveGetLaneCount();\n") +SLANG_RAW("uint WaveGetLaneIndex();\n") +SLANG_RAW("bool WaveIsFirstLane();\n") SLANG_RAW("\n") SLANG_RAW("__generic T WavePrefixProduct(T expr);\n") SLANG_RAW("__generic vector WavePrefixProduct(vector expr);\n") @@ -1447,13 +1453,37 @@ SLANG_RAW("__generic T WavePrefixSum(T expr);\n") SLANG_RAW("__generic vector WavePrefixSum(vector expr);\n") SLANG_RAW("__generic matrix WavePrefixSum(matrix expr);\n") SLANG_RAW("\n") -SLANG_RAW("__generic T WaveReadFirstLane(T expr);\n") -SLANG_RAW("__generic vector WaveReadFirstLane(vector expr);\n") -SLANG_RAW("__generic matrix WaveReadFirstLane(matrix expr);\n") +SLANG_RAW("__generic T WaveMultiPrefixBitAnd(T expr);\n") +SLANG_RAW("__generic vector WaveMultiPrefixBitAnd(vector expr);\n") +SLANG_RAW("__generic matrix WaveMultiPrefixBitAnd(matrix expr);\n") +SLANG_RAW("\n") +SLANG_RAW("__generic T WaveMultiPrefixBitOr(T expr);\n") +SLANG_RAW("__generic vector WaveMultiPrefixBitOr(vector expr);\n") +SLANG_RAW("__generic matrix WaveMultiPrefixBitOr(matrix expr);\n") +SLANG_RAW("\n") +SLANG_RAW("__generic T WaveMultiPrefixBitXor(T expr);\n") +SLANG_RAW("__generic vector WaveMultiPrefixBitXor(vector expr);\n") +SLANG_RAW("__generic matrix WaveMultiPrefixBitXor(matrix expr);\n") +SLANG_RAW("\n") +SLANG_RAW("uint WavePrefixCountBits(bool value);\n") +SLANG_RAW("uint WaveMultiPrefixCountBits(bool value, uint4 mask);\n") +SLANG_RAW("\n") +SLANG_RAW("__generic T WaveMultiPrefixProduct(T value, uint4 mask);\n") +SLANG_RAW("__generic vector WaveMultiPrefixProduct(vector value, uint4 mask);\n") +SLANG_RAW("__generic matrix WaveMultiPrefixProduct(matrix value, uint4 mask);\n") +SLANG_RAW("\n") +SLANG_RAW("__generic T WaveMultiPrefixSum(T value, uint4 mask);\n") +SLANG_RAW("__generic vector WaveMultiPrefixSum(vector value, uint4 mask);\n") +SLANG_RAW("__generic matrix WaveMultiPrefixSum(matrix value, uint4 mask);\n") +SLANG_RAW("\n") +SLANG_RAW("__generic T WaveReadLaneFirst(T expr);\n") +SLANG_RAW("__generic vector WaveReadLaneFirst(vector expr);\n") +SLANG_RAW("__generic matrix WaveReadLaneFirst(matrix expr);\n") +SLANG_RAW("\n") +SLANG_RAW("__generic T WaveReadLaneAt(T value, int lane);\n") +SLANG_RAW("__generic vector WaveReadLaneAt(vector value, int lane);\n") +SLANG_RAW("__generic matrix WaveReadLaneAt(matrix value, int lane);\n") SLANG_RAW("\n") -SLANG_RAW("__generic T WaveReadLaneAt(T expr, int laneIndex);\n") -SLANG_RAW("__generic vector WaveReadLaneAt(vector expr, int laneIndex);\n") -SLANG_RAW("__generic matrix WaveReadLaneAt(matrix expr, int laneIndex);\n") SLANG_RAW("\n") SLANG_RAW("// `typedef`s to help with the fact that HLSL has been sorta-kinda case insensitive at various points\n") SLANG_RAW("typedef Texture2D texture2D;\n") @@ -1538,7 +1568,7 @@ for (int aa = 0; aa < kBaseBufferAccessLevelCount; ++aa) sb << "};\n"; } -SLANG_RAW("#line 1465 \"hlsl.meta.slang\"") +SLANG_RAW("#line 1495 \"hlsl.meta.slang\"") SLANG_RAW("\n") SLANG_RAW("\n") SLANG_RAW("\n") -- cgit v1.2.3