diff options
| author | Tim Foley <tfoleyNV@users.noreply.github.com> | 2019-08-22 09:49:11 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-08-22 09:49:11 -0700 |
| commit | bc392f9dbfb8cb6c359bb890fb85b831e49bfd55 (patch) | |
| tree | 8c18c2a38d7ba648797b0509ec8f160d3ae87a75 /source | |
| parent | 7258ef4ddebd021208a019f6ee73edcda57a88f7 (diff) | |
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
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/hlsl.meta.slang | 122 | ||||
| -rw-r--r-- | source/slang/hlsl.meta.slang.h | 124 |
2 files changed, 153 insertions, 93 deletions
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<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M // Shader model 6.0 stuff -uint GlobalOrderedCountIncrement(uint countToAppendForThisLane); +__generic<T : __BuiltinType> T QuadReadLaneAt(T sourceValue, uint quadLaneID); +__generic<T : __BuiltinType, let N : int> vector<T,N> QuadReadLaneAt(vector<T,N> sourceValue, uint quadLaneID); +__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> QuadReadLaneAt(matrix<T,N,M> sourceValue, uint quadLaneID); -__generic<T : __BuiltinType> T QuadReadLaneAt(T sourceValue, int quadLaneID); -__generic<T : __BuiltinType, let N : int> vector<T,N> QuadReadLaneAt(vector<T,N> sourceValue, int quadLaneID); -__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> QuadReadLaneAt(matrix<T,N,M> sourceValue, int quadLaneID); +__generic<T : __BuiltinType> T QuadReadAcrossX(T localValue); +__generic<T : __BuiltinType, let N : int> vector<T,N> QuadReadAcrossX(vector<T,N> localValue); +__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> QuadReadAcrossX(matrix<T,N,M> localValue); -__generic<T : __BuiltinType> T QuadSwapX(T localValue); -__generic<T : __BuiltinType, let N : int> vector<T,N> QuadSwapX(vector<T,N> localValue); -__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> QuadSwapX(matrix<T,N,M> localValue); +__generic<T : __BuiltinType> T QuadReadAcrossY(T localValue); +__generic<T : __BuiltinType, let N : int> vector<T,N> QuadReadAcrossY(vector<T,N> localValue); +__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> QuadReadAcrossY(matrix<T,N,M> localValue); -__generic<T : __BuiltinType> T QuadSwapY(T localValue); -__generic<T : __BuiltinType, let N : int> vector<T,N> QuadSwapY(vector<T,N> localValue); -__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> QuadSwapY(matrix<T,N,M> localValue); +__generic<T : __BuiltinType> T QuadReadAcrossDiagonal(T localValue); +__generic<T : __BuiltinType, let N : int> vector<T,N> QuadReadAcrossDiagonal(vector<T,N> localValue); +__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> QuadReadAcrossDiagonal(matrix<T,N,M> localValue); -__generic<T : __BuiltinIntegerType> T WaveAllBitAnd(T expr); -__generic<T : __BuiltinIntegerType, let N : int> vector<T,N> WaveAllBitAnd(vector<T,N> expr); -__generic<T : __BuiltinIntegerType, let N : int, let M : int> matrix<T,N,M> WaveAllBitAnd(matrix<T,N,M> expr); +__generic<T : __BuiltinIntegerType> T WaveActiveBitAnd(T expr); +__generic<T : __BuiltinIntegerType, let N : int> vector<T,N> WaveActiveBitAnd(vector<T,N> expr); +__generic<T : __BuiltinIntegerType, let N : int, let M : int> matrix<T,N,M> WaveActiveBitAnd(matrix<T,N,M> expr); -__generic<T : __BuiltinIntegerType> T WaveAllBitOr(T expr); -__generic<T : __BuiltinIntegerType, let N : int> vector<T,N> WaveAllBitOr(vector<T,N> expr); -__generic<T : __BuiltinIntegerType, let N : int, let M : int> matrix<T,N,M> WaveAllBitOr(matrix<T,N,M> expr); +__generic<T : __BuiltinIntegerType> T WaveActiveBitOr(T expr); +__generic<T : __BuiltinIntegerType, let N : int> vector<T,N> WaveActiveBitOr(vector<T,N> expr); +__generic<T : __BuiltinIntegerType, let N : int, let M : int> matrix<T,N,M> WaveActiveBitOr(matrix<T,N,M> expr); -__generic<T : __BuiltinIntegerType> T WaveAllBitXor(T expr); -__generic<T : __BuiltinIntegerType, let N : int> vector<T,N> WaveAllBitXor(vector<T,N> expr); -__generic<T : __BuiltinIntegerType, let N : int, let M : int> matrix<T,N,M> WaveAllBitXor(matrix<T,N,M> expr); +__generic<T : __BuiltinIntegerType> T WaveActiveBitXor(T expr); +__generic<T : __BuiltinIntegerType, let N : int> vector<T,N> WaveActiveBitXor(vector<T,N> expr); +__generic<T : __BuiltinIntegerType, let N : int, let M : int> matrix<T,N,M> WaveActiveBitXor(matrix<T,N,M> expr); -__generic<T : __BuiltinArithmeticType> T WaveAllMax(T expr); -__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveAllMax(vector<T,N> expr); -__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveAllMax(matrix<T,N,M> expr); +__generic<T : __BuiltinArithmeticType> T WaveActiveMax(T expr); +__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveActiveMax(vector<T,N> expr); +__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveActiveMax(matrix<T,N,M> expr); -__generic<T : __BuiltinArithmeticType> T WaveAllMin(T expr); -__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveAllMin(vector<T,N> expr); -__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveAllMin(matrix<T,N,M> expr); +__generic<T : __BuiltinArithmeticType> T WaveActiveMin(T expr); +__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveActiveMin(vector<T,N> expr); +__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveActiveMin(matrix<T,N,M> expr); -__generic<T : __BuiltinArithmeticType> T WaveAllProduct(T expr); -__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveAllProduct(vector<T,N> expr); -__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveAllProduct(matrix<T,N,M> expr); +__generic<T : __BuiltinArithmeticType> T WaveActiveProduct(T expr); +__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveActiveProduct(vector<T,N> expr); +__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveActiveProduct(matrix<T,N,M> expr); -__generic<T : __BuiltinArithmeticType> T WaveAllSum(T expr); -__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveAllSum(vector<T,N> expr); -__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveAllSum(matrix<T,N,M> expr); +__generic<T : __BuiltinArithmeticType> T WaveActiveSum(T expr); +__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveActiveSum(vector<T,N> expr); +__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveActiveSum(matrix<T,N,M> expr); -bool WaveAllEqual(bool expr); -bool WaveAllTrue(bool expr); -bool WaveAnyTrue(bool expr); +__generic<T : __BuiltinType> bool WaveActiveAllEqual(T value); +__generic<T : __BuiltinType, let N : int> vector<bool,N> WaveActiveAllEqual(vector<T,N> value); +__generic<T : __BuiltinType, let N : int, let M : int> matrix<bool,N,M> WaveActiveAllEqual(matrix<T,N,M> value); -uint64_t WaveBallot(bool expr); +__generic<T : __BuiltinType> uint4 WaveMatch(T value); +__generic<T : __BuiltinType, let N : int> uint4 WaveMatch(vector<T,N> value); +__generic<T : __BuiltinType, let N : int, let M : int> uint4 WaveMatch(matrix<T,N,M> 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 : __BuiltinArithmeticType> T WavePrefixProduct(T expr); __generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WavePrefixProduct(vector<T,N> expr); @@ -1371,13 +1377,37 @@ __generic<T : __BuiltinArithmeticType> T WavePrefixSum(T expr); __generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WavePrefixSum(vector<T,N> expr); __generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WavePrefixSum(matrix<T,N,M> expr); -__generic<T : __BuiltinType> T WaveReadFirstLane(T expr); -__generic<T : __BuiltinType, let N : int> vector<T,N> WaveReadFirstLane(vector<T,N> expr); -__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> WaveReadFirstLane(matrix<T,N,M> expr); +__generic<T : __BuiltinArithmeticType> T WaveMultiPrefixBitAnd(T expr); +__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveMultiPrefixBitAnd(vector<T,N> expr); +__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveMultiPrefixBitAnd(matrix<T,N,M> expr); + +__generic<T : __BuiltinArithmeticType> T WaveMultiPrefixBitOr(T expr); +__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveMultiPrefixBitOr(vector<T,N> expr); +__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveMultiPrefixBitOr(matrix<T,N,M> expr); + +__generic<T : __BuiltinArithmeticType> T WaveMultiPrefixBitXor(T expr); +__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveMultiPrefixBitXor(vector<T,N> expr); +__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveMultiPrefixBitXor(matrix<T,N,M> expr); + +uint WavePrefixCountBits(bool value); +uint WaveMultiPrefixCountBits(bool value, uint4 mask); + +__generic<T : __BuiltinArithmeticType> T WaveMultiPrefixProduct(T value, uint4 mask); +__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveMultiPrefixProduct(vector<T,N> value, uint4 mask); +__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveMultiPrefixProduct(matrix<T,N,M> value, uint4 mask); + +__generic<T : __BuiltinArithmeticType> T WaveMultiPrefixSum(T value, uint4 mask); +__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveMultiPrefixSum(vector<T,N> value, uint4 mask); +__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveMultiPrefixSum(matrix<T,N,M> value, uint4 mask); + +__generic<T : __BuiltinType> T WaveReadLaneFirst(T expr); +__generic<T : __BuiltinType, let N : int> vector<T,N> WaveReadLaneFirst(vector<T,N> expr); +__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> WaveReadLaneFirst(matrix<T,N,M> expr); + +__generic<T : __BuiltinType> T WaveReadLaneAt(T value, int lane); +__generic<T : __BuiltinType, let N : int> vector<T,N> WaveReadLaneAt(vector<T,N> value, int lane); +__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> WaveReadLaneAt(matrix<T,N,M> value, int lane); -__generic<T : __BuiltinType> T WaveReadLaneAt(T expr, int laneIndex); -__generic<T : __BuiltinType, let N : int> vector<T,N> WaveReadLaneAt(vector<T,N> expr, int laneIndex); -__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> WaveReadLaneAt(matrix<T,N,M> 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<T : __BuiltinFloatingPointType, let N : int, let M : int> 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 : __BuiltinType> T QuadReadLaneAt(T sourceValue, uint quadLaneID);\n") +SLANG_RAW("__generic<T : __BuiltinType, let N : int> vector<T,N> QuadReadLaneAt(vector<T,N> sourceValue, uint quadLaneID);\n") +SLANG_RAW("__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> QuadReadLaneAt(matrix<T,N,M> sourceValue, uint quadLaneID);\n") SLANG_RAW("\n") -SLANG_RAW("__generic<T : __BuiltinType> T QuadReadLaneAt(T sourceValue, int quadLaneID);\n") -SLANG_RAW("__generic<T : __BuiltinType, let N : int> vector<T,N> QuadReadLaneAt(vector<T,N> sourceValue, int quadLaneID);\n") -SLANG_RAW("__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> QuadReadLaneAt(matrix<T,N,M> sourceValue, int quadLaneID);\n") +SLANG_RAW("__generic<T : __BuiltinType> T QuadReadAcrossX(T localValue);\n") +SLANG_RAW("__generic<T : __BuiltinType, let N : int> vector<T,N> QuadReadAcrossX(vector<T,N> localValue);\n") +SLANG_RAW("__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> QuadReadAcrossX(matrix<T,N,M> localValue);\n") SLANG_RAW("\n") -SLANG_RAW("__generic<T : __BuiltinType> T QuadSwapX(T localValue);\n") -SLANG_RAW("__generic<T : __BuiltinType, let N : int> vector<T,N> QuadSwapX(vector<T,N> localValue);\n") -SLANG_RAW("__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> QuadSwapX(matrix<T,N,M> localValue);\n") +SLANG_RAW("__generic<T : __BuiltinType> T QuadReadAcrossY(T localValue);\n") +SLANG_RAW("__generic<T : __BuiltinType, let N : int> vector<T,N> QuadReadAcrossY(vector<T,N> localValue);\n") +SLANG_RAW("__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> QuadReadAcrossY(matrix<T,N,M> localValue);\n") SLANG_RAW("\n") -SLANG_RAW("__generic<T : __BuiltinType> T QuadSwapY(T localValue);\n") -SLANG_RAW("__generic<T : __BuiltinType, let N : int> vector<T,N> QuadSwapY(vector<T,N> localValue);\n") -SLANG_RAW("__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> QuadSwapY(matrix<T,N,M> localValue);\n") +SLANG_RAW("__generic<T : __BuiltinType> T QuadReadAcrossDiagonal(T localValue);\n") +SLANG_RAW("__generic<T : __BuiltinType, let N : int> vector<T,N> QuadReadAcrossDiagonal(vector<T,N> localValue);\n") +SLANG_RAW("__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> QuadReadAcrossDiagonal(matrix<T,N,M> localValue);\n") SLANG_RAW("\n") -SLANG_RAW("__generic<T : __BuiltinIntegerType> T WaveAllBitAnd(T expr);\n") -SLANG_RAW("__generic<T : __BuiltinIntegerType, let N : int> vector<T,N> WaveAllBitAnd(vector<T,N> expr);\n") -SLANG_RAW("__generic<T : __BuiltinIntegerType, let N : int, let M : int> matrix<T,N,M> WaveAllBitAnd(matrix<T,N,M> expr);\n") +SLANG_RAW("__generic<T : __BuiltinIntegerType> T WaveActiveBitAnd(T expr);\n") +SLANG_RAW("__generic<T : __BuiltinIntegerType, let N : int> vector<T,N> WaveActiveBitAnd(vector<T,N> expr);\n") +SLANG_RAW("__generic<T : __BuiltinIntegerType, let N : int, let M : int> matrix<T,N,M> WaveActiveBitAnd(matrix<T,N,M> expr);\n") SLANG_RAW("\n") -SLANG_RAW("__generic<T : __BuiltinIntegerType> T WaveAllBitOr(T expr);\n") -SLANG_RAW("__generic<T : __BuiltinIntegerType, let N : int> vector<T,N> WaveAllBitOr(vector<T,N> expr);\n") -SLANG_RAW("__generic<T : __BuiltinIntegerType, let N : int, let M : int> matrix<T,N,M> WaveAllBitOr(matrix<T,N,M> expr);\n") +SLANG_RAW("__generic<T : __BuiltinIntegerType> T WaveActiveBitOr(T expr);\n") +SLANG_RAW("__generic<T : __BuiltinIntegerType, let N : int> vector<T,N> WaveActiveBitOr(vector<T,N> expr);\n") +SLANG_RAW("__generic<T : __BuiltinIntegerType, let N : int, let M : int> matrix<T,N,M> WaveActiveBitOr(matrix<T,N,M> expr);\n") SLANG_RAW("\n") -SLANG_RAW("__generic<T : __BuiltinIntegerType> T WaveAllBitXor(T expr);\n") -SLANG_RAW("__generic<T : __BuiltinIntegerType, let N : int> vector<T,N> WaveAllBitXor(vector<T,N> expr);\n") -SLANG_RAW("__generic<T : __BuiltinIntegerType, let N : int, let M : int> matrix<T,N,M> WaveAllBitXor(matrix<T,N,M> expr);\n") +SLANG_RAW("__generic<T : __BuiltinIntegerType> T WaveActiveBitXor(T expr);\n") +SLANG_RAW("__generic<T : __BuiltinIntegerType, let N : int> vector<T,N> WaveActiveBitXor(vector<T,N> expr);\n") +SLANG_RAW("__generic<T : __BuiltinIntegerType, let N : int, let M : int> matrix<T,N,M> WaveActiveBitXor(matrix<T,N,M> expr);\n") SLANG_RAW("\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType> T WaveAllMax(T expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveAllMax(vector<T,N> expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveAllMax(matrix<T,N,M> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType> T WaveActiveMax(T expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveActiveMax(vector<T,N> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveActiveMax(matrix<T,N,M> expr);\n") SLANG_RAW("\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType> T WaveAllMin(T expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveAllMin(vector<T,N> expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveAllMin(matrix<T,N,M> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType> T WaveActiveMin(T expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveActiveMin(vector<T,N> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveActiveMin(matrix<T,N,M> expr);\n") SLANG_RAW("\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType> T WaveAllProduct(T expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveAllProduct(vector<T,N> expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveAllProduct(matrix<T,N,M> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType> T WaveActiveProduct(T expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveActiveProduct(vector<T,N> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveActiveProduct(matrix<T,N,M> expr);\n") SLANG_RAW("\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType> T WaveAllSum(T expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveAllSum(vector<T,N> expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveAllSum(matrix<T,N,M> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType> T WaveActiveSum(T expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveActiveSum(vector<T,N> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveActiveSum(matrix<T,N,M> 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<T : __BuiltinType> bool WaveActiveAllEqual(T value);\n") +SLANG_RAW("__generic<T : __BuiltinType, let N : int> vector<bool,N> WaveActiveAllEqual(vector<T,N> value);\n") +SLANG_RAW("__generic<T : __BuiltinType, let N : int, let M : int> matrix<bool,N,M> WaveActiveAllEqual(matrix<T,N,M> value);\n") SLANG_RAW("\n") -SLANG_RAW("uint64_t WaveBallot(bool expr);\n") +SLANG_RAW("__generic<T : __BuiltinType> uint4 WaveMatch(T value);\n") +SLANG_RAW("__generic<T : __BuiltinType, let N : int> uint4 WaveMatch(vector<T,N> value);\n") +SLANG_RAW("__generic<T : __BuiltinType, let N : int, let M : int> uint4 WaveMatch(matrix<T,N,M> 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 : __BuiltinArithmeticType> T WavePrefixProduct(T expr);\n") SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WavePrefixProduct(vector<T,N> expr);\n") @@ -1447,13 +1453,37 @@ SLANG_RAW("__generic<T : __BuiltinArithmeticType> T WavePrefixSum(T expr);\n") SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WavePrefixSum(vector<T,N> expr);\n") SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WavePrefixSum(matrix<T,N,M> expr);\n") SLANG_RAW("\n") -SLANG_RAW("__generic<T : __BuiltinType> T WaveReadFirstLane(T expr);\n") -SLANG_RAW("__generic<T : __BuiltinType, let N : int> vector<T,N> WaveReadFirstLane(vector<T,N> expr);\n") -SLANG_RAW("__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> WaveReadFirstLane(matrix<T,N,M> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType> T WaveMultiPrefixBitAnd(T expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveMultiPrefixBitAnd(vector<T,N> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveMultiPrefixBitAnd(matrix<T,N,M> expr);\n") +SLANG_RAW("\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType> T WaveMultiPrefixBitOr(T expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveMultiPrefixBitOr(vector<T,N> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveMultiPrefixBitOr(matrix<T,N,M> expr);\n") +SLANG_RAW("\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType> T WaveMultiPrefixBitXor(T expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveMultiPrefixBitXor(vector<T,N> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveMultiPrefixBitXor(matrix<T,N,M> 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 : __BuiltinArithmeticType> T WaveMultiPrefixProduct(T value, uint4 mask);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveMultiPrefixProduct(vector<T,N> value, uint4 mask);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveMultiPrefixProduct(matrix<T,N,M> value, uint4 mask);\n") +SLANG_RAW("\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType> T WaveMultiPrefixSum(T value, uint4 mask);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveMultiPrefixSum(vector<T,N> value, uint4 mask);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveMultiPrefixSum(matrix<T,N,M> value, uint4 mask);\n") +SLANG_RAW("\n") +SLANG_RAW("__generic<T : __BuiltinType> T WaveReadLaneFirst(T expr);\n") +SLANG_RAW("__generic<T : __BuiltinType, let N : int> vector<T,N> WaveReadLaneFirst(vector<T,N> expr);\n") +SLANG_RAW("__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> WaveReadLaneFirst(matrix<T,N,M> expr);\n") +SLANG_RAW("\n") +SLANG_RAW("__generic<T : __BuiltinType> T WaveReadLaneAt(T value, int lane);\n") +SLANG_RAW("__generic<T : __BuiltinType, let N : int> vector<T,N> WaveReadLaneAt(vector<T,N> value, int lane);\n") +SLANG_RAW("__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> WaveReadLaneAt(matrix<T,N,M> value, int lane);\n") SLANG_RAW("\n") -SLANG_RAW("__generic<T : __BuiltinType> T WaveReadLaneAt(T expr, int laneIndex);\n") -SLANG_RAW("__generic<T : __BuiltinType, let N : int> vector<T,N> WaveReadLaneAt(vector<T,N> expr, int laneIndex);\n") -SLANG_RAW("__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> WaveReadLaneAt(matrix<T,N,M> 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") |
