diff options
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/core.meta.slang | 27 | ||||
| -rw-r--r-- | source/slang/core.meta.slang.h | 27 | ||||
| -rw-r--r-- | source/slang/hlsl.meta.slang | 760 | ||||
| -rw-r--r-- | source/slang/hlsl.meta.slang.h | 760 |
4 files changed, 750 insertions, 824 deletions
diff --git a/source/slang/core.meta.slang b/source/slang/core.meta.slang index 8accc83a4..f36b53227 100644 --- a/source/slang/core.meta.slang +++ b/source/slang/core.meta.slang @@ -444,13 +444,6 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) sb << ")\")\n"; - - - // TIM: Making `GetDimensions` *not* be marked as - // an intrinsic, just so we can see how defining - // things as `extern` functions would work. -// sb << "__intrinsic_op\n"; - } char const* t = isFloat ? "out float " : "out uint "; @@ -524,7 +517,6 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) { sb << "__target_intrinsic(glsl, \"texelFetch($$P, ($0)." << kGLSLLoadCoordsSwizzle[loadCoordCount] << ", ($0)." << kGLSLLoadLODSwizzle[loadCoordCount] << ")\")\n"; } - sb << "__intrinsic_op\n"; sb << "T Load("; sb << "int" << loadCoordCount << " location"; if(isMultisample) @@ -541,7 +533,6 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) { sb << "__target_intrinsic(glsl, \"texelFetch($$P, ($0)." << kGLSLLoadCoordsSwizzle[loadCoordCount] << ", ($0)." << kGLSLLoadLODSwizzle[loadCoordCount] << ", $1)\")\n"; } - sb << "__intrinsic_op\n"; sb << "T Load("; sb << "int" << loadCoordCount << " location"; if(isMultisample) @@ -569,7 +560,7 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) // this should have both `get` and `set` accessors. // subscript operator - sb << "__intrinsic_op __subscript(uint"; + sb << "__subscript(uint"; if(kBaseTextureTypes[tt].coordCount + isArray > 1) { sb << kBaseTextureTypes[tt].coordCount + isArray; @@ -584,16 +575,14 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) sb << "__target_intrinsic(glsl, \"texture($$p, $1)\")\n"; // TODO: only enable if IR is being used? - sb << "__intrinsic_op(sample)\n"; +// sb << "__intrinsic_op(sample)\n"; - sb << "__intrinsic_op\n"; sb << "T Sample(SamplerState s, "; sb << "float" << kBaseTextureTypes[tt].coordCount + isArray << " location);\n"; if( baseShape != TextureType::ShapeCube ) { sb << "__target_intrinsic(glsl, \"textureOffset($$p, $1, $2)\")\n"; - sb << "__intrinsic_op\n"; sb << "T Sample(SamplerState s, "; sb << "float" << kBaseTextureTypes[tt].coordCount + isArray << " location, "; sb << "int" << kBaseTextureTypes[tt].coordCount << " offset);\n"; @@ -618,14 +607,12 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) // `SampleBias()` sb << "__target_intrinsic(glsl, \"texture($$p, $1, $2)\")\n"; - sb << "__intrinsic_op\n"; sb << "T SampleBias(SamplerState s, "; sb << "float" << kBaseTextureTypes[tt].coordCount + isArray << " location, float bias);\n"; if( baseShape != TextureType::ShapeCube ) { sb << "__target_intrinsic(glsl, \"textureOffset($$p, $1, $2, $3)\")\n"; - sb << "__intrinsic_op\n"; sb << "T SampleBias(SamplerState s, "; sb << "float" << kBaseTextureTypes[tt].coordCount + isArray << " location, float bias, "; sb << "int" << kBaseTextureTypes[tt].coordCount << " offset);\n"; @@ -678,7 +665,6 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) sb << ", vec" << baseCoordCount << "(0.0)"; sb << ")\")\n"; } - sb << "__intrinsic_op\n"; sb << "T SampleCmpLevelZero(SamplerComparisonState s, "; sb << "float" << kBaseTextureTypes[tt].coordCount + isArray << " location, "; sb << "float compareValue"; @@ -706,7 +692,7 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) sb << "__target_intrinsic(glsl, \"textureGrad($$p, $1, $2, $3)\")\n"; - sb << "__intrinsic_op(sampleGrad)\n"; +// sb << "__intrinsic_op(sampleGrad)\n"; sb << "T SampleGrad(SamplerState s, "; sb << "float" << kBaseTextureTypes[tt].coordCount + isArray << " location, "; sb << "float" << kBaseTextureTypes[tt].coordCount << " gradX, "; @@ -716,7 +702,7 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) if( baseShape != TextureType::ShapeCube ) { sb << "__target_intrinsic(glsl, \"textureGradOffset($$p, $1, $2, $3, $4)\")\n"; - sb << "__intrinsic_op(sampleGrad)\n"; +// sb << "__intrinsic_op(sampleGrad)\n"; sb << "T SampleGrad(SamplerState s, "; sb << "float" << kBaseTextureTypes[tt].coordCount + isArray << " location, "; sb << "float" << kBaseTextureTypes[tt].coordCount << " gradX, "; @@ -727,7 +713,6 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) // `SampleLevel` sb << "__target_intrinsic(glsl, \"textureLod($$p, $1, $2)\")\n"; - sb << "__intrinsic_op\n"; sb << "T SampleLevel(SamplerState s, "; sb << "float" << kBaseTextureTypes[tt].coordCount + isArray << " location, "; sb << "float level);\n"; @@ -735,7 +720,6 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) if( baseShape != TextureType::ShapeCube ) { sb << "__target_intrinsic(glsl, \"textureLodOffset($$p, $1, $2, $3)\")\n"; - sb << "__intrinsic_op\n"; sb << "T SampleLevel(SamplerState s, "; sb << "float" << kBaseTextureTypes[tt].coordCount + isArray << " location, "; sb << "float level, "; @@ -803,13 +787,11 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) EMIT_LINE_DIRECTIVE(); sb << "__target_intrinsic(glsl, \"textureGather($$p, $1, " << componentIndex << ")\")\n"; - sb << "__intrinsic_op\n"; sb << "vector<T, 4> Gather" << componentName << "(SamplerState s, "; sb << "float" << kBaseTextureTypes[tt].coordCount << " location);\n"; EMIT_LINE_DIRECTIVE(); sb << "__target_intrinsic(glsl, \"textureGatherOffset($$p, $1, $2, " << componentIndex << ")\")\n"; - sb << "__intrinsic_op\n"; sb << "vector<T, 4> Gather" << componentName << "(SamplerState s, "; sb << "float" << kBaseTextureTypes[tt].coordCount << " location, "; sb << "int" << kBaseTextureTypes[tt].coordCount << " offset);\n"; @@ -822,7 +804,6 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) EMIT_LINE_DIRECTIVE(); sb << "__target_intrinsic(glsl, \"textureGatherOffsets($$p, $1, int" << kBaseTextureTypes[tt].coordCount << "[]($2, $3, $4, $5), " << componentIndex << ")\")\n"; - sb << "__intrinsic_op\n"; sb << "vector<T, 4> Gather" << componentName << "(SamplerState s, "; sb << "float" << kBaseTextureTypes[tt].coordCount << " location, "; sb << "int" << kBaseTextureTypes[tt].coordCount << " offset1, "; diff --git a/source/slang/core.meta.slang.h b/source/slang/core.meta.slang.h index 6b60d2896..1c0f28b26 100644 --- a/source/slang/core.meta.slang.h +++ b/source/slang/core.meta.slang.h @@ -447,13 +447,6 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) sb << ")\")\n"; - - - // TIM: Making `GetDimensions` *not* be marked as - // an intrinsic, just so we can see how defining - // things as `extern` functions would work. -// sb << "__intrinsic_op\n"; - } char const* t = isFloat ? "out float " : "out uint "; @@ -527,7 +520,6 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) { sb << "__target_intrinsic(glsl, \"texelFetch($P, ($0)." << kGLSLLoadCoordsSwizzle[loadCoordCount] << ", ($0)." << kGLSLLoadLODSwizzle[loadCoordCount] << ")\")\n"; } - sb << "__intrinsic_op\n"; sb << "T Load("; sb << "int" << loadCoordCount << " location"; if(isMultisample) @@ -544,7 +536,6 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) { sb << "__target_intrinsic(glsl, \"texelFetch($P, ($0)." << kGLSLLoadCoordsSwizzle[loadCoordCount] << ", ($0)." << kGLSLLoadLODSwizzle[loadCoordCount] << ", $1)\")\n"; } - sb << "__intrinsic_op\n"; sb << "T Load("; sb << "int" << loadCoordCount << " location"; if(isMultisample) @@ -572,7 +563,7 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) // this should have both `get` and `set` accessors. // subscript operator - sb << "__intrinsic_op __subscript(uint"; + sb << "__subscript(uint"; if(kBaseTextureTypes[tt].coordCount + isArray > 1) { sb << kBaseTextureTypes[tt].coordCount + isArray; @@ -587,16 +578,14 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) sb << "__target_intrinsic(glsl, \"texture($p, $1)\")\n"; // TODO: only enable if IR is being used? - sb << "__intrinsic_op(sample)\n"; +// sb << "__intrinsic_op(sample)\n"; - sb << "__intrinsic_op\n"; sb << "T Sample(SamplerState s, "; sb << "float" << kBaseTextureTypes[tt].coordCount + isArray << " location);\n"; if( baseShape != TextureType::ShapeCube ) { sb << "__target_intrinsic(glsl, \"textureOffset($p, $1, $2)\")\n"; - sb << "__intrinsic_op\n"; sb << "T Sample(SamplerState s, "; sb << "float" << kBaseTextureTypes[tt].coordCount + isArray << " location, "; sb << "int" << kBaseTextureTypes[tt].coordCount << " offset);\n"; @@ -621,14 +610,12 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) // `SampleBias()` sb << "__target_intrinsic(glsl, \"texture($p, $1, $2)\")\n"; - sb << "__intrinsic_op\n"; sb << "T SampleBias(SamplerState s, "; sb << "float" << kBaseTextureTypes[tt].coordCount + isArray << " location, float bias);\n"; if( baseShape != TextureType::ShapeCube ) { sb << "__target_intrinsic(glsl, \"textureOffset($p, $1, $2, $3)\")\n"; - sb << "__intrinsic_op\n"; sb << "T SampleBias(SamplerState s, "; sb << "float" << kBaseTextureTypes[tt].coordCount + isArray << " location, float bias, "; sb << "int" << kBaseTextureTypes[tt].coordCount << " offset);\n"; @@ -681,7 +668,6 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) sb << ", vec" << baseCoordCount << "(0.0)"; sb << ")\")\n"; } - sb << "__intrinsic_op\n"; sb << "T SampleCmpLevelZero(SamplerComparisonState s, "; sb << "float" << kBaseTextureTypes[tt].coordCount + isArray << " location, "; sb << "float compareValue"; @@ -709,7 +695,7 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) sb << "__target_intrinsic(glsl, \"textureGrad($p, $1, $2, $3)\")\n"; - sb << "__intrinsic_op(sampleGrad)\n"; +// sb << "__intrinsic_op(sampleGrad)\n"; sb << "T SampleGrad(SamplerState s, "; sb << "float" << kBaseTextureTypes[tt].coordCount + isArray << " location, "; sb << "float" << kBaseTextureTypes[tt].coordCount << " gradX, "; @@ -719,7 +705,7 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) if( baseShape != TextureType::ShapeCube ) { sb << "__target_intrinsic(glsl, \"textureGradOffset($p, $1, $2, $3, $4)\")\n"; - sb << "__intrinsic_op(sampleGrad)\n"; +// sb << "__intrinsic_op(sampleGrad)\n"; sb << "T SampleGrad(SamplerState s, "; sb << "float" << kBaseTextureTypes[tt].coordCount + isArray << " location, "; sb << "float" << kBaseTextureTypes[tt].coordCount << " gradX, "; @@ -730,7 +716,6 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) // `SampleLevel` sb << "__target_intrinsic(glsl, \"textureLod($p, $1, $2)\")\n"; - sb << "__intrinsic_op\n"; sb << "T SampleLevel(SamplerState s, "; sb << "float" << kBaseTextureTypes[tt].coordCount + isArray << " location, "; sb << "float level);\n"; @@ -738,7 +723,6 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) if( baseShape != TextureType::ShapeCube ) { sb << "__target_intrinsic(glsl, \"textureLodOffset($p, $1, $2, $3)\")\n"; - sb << "__intrinsic_op\n"; sb << "T SampleLevel(SamplerState s, "; sb << "float" << kBaseTextureTypes[tt].coordCount + isArray << " location, "; sb << "float level, "; @@ -806,13 +790,11 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) EMIT_LINE_DIRECTIVE(); sb << "__target_intrinsic(glsl, \"textureGather($p, $1, " << componentIndex << ")\")\n"; - sb << "__intrinsic_op\n"; sb << "vector<T, 4> Gather" << componentName << "(SamplerState s, "; sb << "float" << kBaseTextureTypes[tt].coordCount << " location);\n"; EMIT_LINE_DIRECTIVE(); sb << "__target_intrinsic(glsl, \"textureGatherOffset($p, $1, $2, " << componentIndex << ")\")\n"; - sb << "__intrinsic_op\n"; sb << "vector<T, 4> Gather" << componentName << "(SamplerState s, "; sb << "float" << kBaseTextureTypes[tt].coordCount << " location, "; sb << "int" << kBaseTextureTypes[tt].coordCount << " offset);\n"; @@ -825,7 +807,6 @@ for (int tt = 0; tt < kBaseTextureTypeCount; ++tt) EMIT_LINE_DIRECTIVE(); sb << "__target_intrinsic(glsl, \"textureGatherOffsets($p, $1, int" << kBaseTextureTypes[tt].coordCount << "[]($2, $3, $4, $5), " << componentIndex << ")\")\n"; - sb << "__intrinsic_op\n"; sb << "vector<T, 4> Gather" << componentName << "(SamplerState s, "; sb << "float" << kBaseTextureTypes[tt].coordCount << " location, "; sb << "int" << kBaseTextureTypes[tt].coordCount << " offset1, "; diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index dc1d4d8e8..cdf720006 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -4,29 +4,29 @@ typedef uint UINT; __generic<T> __magic_type(HLSLAppendStructuredBufferType) struct AppendStructuredBuffer { - __intrinsic_op void Append(T value); + void Append(T value); - __intrinsic_op void GetDimensions( + void GetDimensions( out uint numStructs, out uint stride); }; __magic_type(HLSLByteAddressBufferType) struct ByteAddressBuffer { - __intrinsic_op void GetDimensions( + void GetDimensions( out uint dim); - __intrinsic_op uint Load(int location); - __intrinsic_op uint Load(int location, out uint status); + uint Load(int location); + uint Load(int location, out uint status); - __intrinsic_op uint2 Load2(int location); - __intrinsic_op uint2 Load2(int location, out uint status); + uint2 Load2(int location); + uint2 Load2(int location, out uint status); - __intrinsic_op uint3 Load3(int location); - __intrinsic_op uint3 Load3(int location, out uint status); + uint3 Load3(int location); + uint3 Load3(int location, out uint status); - __intrinsic_op uint4 Load4(int location); - __intrinsic_op uint4 Load4(int location, out uint status); + uint4 Load4(int location); + uint4 Load4(int location, out uint status); }; __generic<T> @@ -37,12 +37,12 @@ __intrinsic_type(${{ }}) struct StructuredBuffer { - __intrinsic_op void GetDimensions( + void GetDimensions( out uint numStructs, out uint stride); - __intrinsic_op T Load(int location); - __intrinsic_op T Load(int location, out uint status); + T Load(int location); + T Load(int location, out uint status); __intrinsic_op(bufferLoad) __subscript(uint index) -> T; @@ -50,21 +50,21 @@ struct StructuredBuffer __generic<T> __magic_type(HLSLConsumeStructuredBufferType) struct ConsumeStructuredBuffer { - __intrinsic_op T Consume(); + T Consume(); - __intrinsic_op void GetDimensions( + void GetDimensions( out uint numStructs, out uint stride); }; __generic<T, let N : int> __magic_type(HLSLInputPatchType) struct InputPatch { - __intrinsic_op __subscript(uint index) -> T; + __subscript(uint index) -> T; }; __generic<T, let N : int> __magic_type(HLSLOutputPatchType) struct OutputPatch { - __intrinsic_op __subscript(uint index) -> T { set; } + __subscript(uint index) -> T { set; } }; __magic_type(HLSLRWByteAddressBufferType) struct RWByteAddressBuffer @@ -72,110 +72,110 @@ __magic_type(HLSLRWByteAddressBufferType) struct RWByteAddressBuffer // Note(tfoley): supports alll operations from `ByteAddressBuffer` // TODO(tfoley): can this be made a sub-type? - __intrinsic_op void GetDimensions( + void GetDimensions( out uint dim); - __intrinsic_op uint Load(int location); - __intrinsic_op uint Load(int location, out uint status); + uint Load(int location); + uint Load(int location, out uint status); - __intrinsic_op uint2 Load2(int location); - __intrinsic_op uint2 Load2(int location, out uint status); + uint2 Load2(int location); + uint2 Load2(int location, out uint status); - __intrinsic_op uint3 Load3(int location); - __intrinsic_op uint3 Load3(int location, out uint status); + uint3 Load3(int location); + uint3 Load3(int location, out uint status); - __intrinsic_op uint4 Load4(int location); - __intrinsic_op uint4 Load4(int location, out uint status); + uint4 Load4(int location); + uint4 Load4(int location, out uint status); // Added operations: - __intrinsic_op void InterlockedAdd( + void InterlockedAdd( UINT dest, UINT value, out UINT original_value); - __intrinsic_op void InterlockedAdd( + void InterlockedAdd( UINT dest, UINT value); - __intrinsic_op void InterlockedAnd( + void InterlockedAnd( UINT dest, UINT value, out UINT original_value); - __intrinsic_op void InterlockedAnd( + void InterlockedAnd( UINT dest, UINT value); - __intrinsic_op void InterlockedCompareExchange( + void InterlockedCompareExchange( UINT dest, UINT compare_value, UINT value, out UINT original_value); - __intrinsic_op void InterlockedCompareExchange( + void InterlockedCompareExchange( UINT dest, UINT compare_value, UINT value); - __intrinsic_op void InterlockedCompareStore( + void InterlockedCompareStore( UINT dest, UINT compare_value, UINT value); - __intrinsic_op void InterlockedCompareStore( + void InterlockedCompareStore( UINT dest, UINT compare_value); - __intrinsic_op void InterlockedExchange( + void InterlockedExchange( UINT dest, UINT value, out UINT original_value); - __intrinsic_op void InterlockedExchange( + void InterlockedExchange( UINT dest, UINT value); - __intrinsic_op void InterlockedMax( + void InterlockedMax( UINT dest, UINT value, out UINT original_value); - __intrinsic_op void InterlockedMax( + void InterlockedMax( UINT dest, UINT value); - __intrinsic_op void InterlockedMin( + void InterlockedMin( UINT dest, UINT value, out UINT original_value); - __intrinsic_op void InterlockedMin( + void InterlockedMin( UINT dest, UINT value); - __intrinsic_op void InterlockedOr( + void InterlockedOr( UINT dest, UINT value, out UINT original_value); - __intrinsic_op void InterlockedOr( + void InterlockedOr( UINT dest, UINT value); - __intrinsic_op void InterlockedXor( + void InterlockedXor( UINT dest, UINT value, out UINT original_value); - __intrinsic_op void InterlockedXor( + void InterlockedXor( UINT dest, UINT value); - __intrinsic_op void Store( + void Store( uint address, uint value); - __intrinsic_op void Store2( + void Store2( uint address, uint2 value); - __intrinsic_op void Store3( + void Store3( uint address, uint3 value); - __intrinsic_op void Store4( + void Store4( uint address, uint4 value); }; @@ -188,18 +188,17 @@ __intrinsic_type(${{ }}) struct RWStructuredBuffer { - __intrinsic_op uint DecrementCounter(); + uint DecrementCounter(); - __intrinsic_op void GetDimensions( + void GetDimensions( out uint numStructs, out uint stride); - __intrinsic_op uint IncrementCounter(); + uint IncrementCounter(); - __intrinsic_op T Load(int location); - __intrinsic_op T Load(int location, out uint status); + T Load(int location); + T Load(int location, out uint status); - __intrinsic_op __subscript(uint index) -> T { __intrinsic_op(bufferLoad) @@ -231,99 +230,96 @@ __generic<T> __magic_type(HLSLTriangleStreamType) struct TriangleStream // Note(tfoley): Trying to systematically add all the HLSL builtins // Try to terminate the current draw or dispatch call (HLSL SM 4.0) -__intrinsic_op void abort(); +void abort(); // Absolute value (HLSL SM 1.0) -__generic<T : __BuiltinSignedArithmeticType> __intrinsic_op T abs(T x); -__generic<T : __BuiltinSignedArithmeticType, let N : int> __intrinsic_op vector<T,N> abs(vector<T,N> x); -__generic<T : __BuiltinSignedArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> abs(matrix<T,N,M> x); +__generic<T : __BuiltinSignedArithmeticType> T abs(T x); +__generic<T : __BuiltinSignedArithmeticType, let N : int> vector<T,N> abs(vector<T,N> x); +__generic<T : __BuiltinSignedArithmeticType, let N : int, let M : int> matrix<T,N,M> abs(matrix<T,N,M> x); // Inverse cosine (HLSL SM 1.0) -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T acos(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> acos(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> acos(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> T acos(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> acos(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> acos(matrix<T,N,M> x); // Test if all components are non-zero (HLSL SM 1.0) -__generic<T : __BuiltinType> __intrinsic_op T all(T x); -__generic<T : __BuiltinType, let N : int> __intrinsic_op vector<T,N> all(vector<T,N> x); -__generic<T : __BuiltinType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> all(matrix<T,N,M> x); +__generic<T : __BuiltinType> T all(T x); +__generic<T : __BuiltinType, let N : int> vector<T,N> all(vector<T,N> x); +__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> all(matrix<T,N,M> x); // Barrier for writes to all memory spaces (HLSL SM 5.0) -__intrinsic_op void AllMemoryBarrier(); +void AllMemoryBarrier(); // Thread-group sync and barrier for writes to all memory spaces (HLSL SM 5.0) -__intrinsic_op void AllMemoryBarrierWithGroupSync(); +void AllMemoryBarrierWithGroupSync(); // Test if any components is non-zero (HLSL SM 1.0) -__generic<T : __BuiltinType> __intrinsic_op T any(T x); -__generic<T : __BuiltinType, let N : int> __intrinsic_op vector<T,N> any(vector<T,N> x); -__generic<T : __BuiltinType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> any(matrix<T,N,M> x); +__generic<T : __BuiltinType> T any(T x); +__generic<T : __BuiltinType, let N : int> vector<T,N> any(vector<T,N> x); +__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> any(matrix<T,N,M> x); // Reinterpret bits as a double (HLSL SM 5.0) -__intrinsic_op double asdouble(uint lowbits, uint highbits); +double asdouble(uint lowbits, uint highbits); // Reinterpret bits as a float (HLSL SM 4.0) -__intrinsic_op float asfloat( int x); -__intrinsic_op float asfloat(uint x); -__generic<let N : int> __intrinsic_op vector<float,N> asfloat(vector< int,N> x); -__generic<let N : int> __intrinsic_op vector<float,N> asfloat(vector<uint,N> x); -__generic<let N : int, let M : int> __intrinsic_op matrix<float,N,M> asfloat(matrix< int,N,M> x); -__generic<let N : int, let M : int> __intrinsic_op matrix<float,N,M> asfloat(matrix<uint,N,M> x); +float asfloat( int x); +float asfloat(uint x); +__generic<let N : int> vector<float,N> asfloat(vector< int,N> x); +__generic<let N : int> vector<float,N> asfloat(vector<uint,N> x); +__generic<let N : int, let M : int> matrix<float,N,M> asfloat(matrix< int,N,M> x); +__generic<let N : int, let M : int> matrix<float,N,M> asfloat(matrix<uint,N,M> x); // Inverse sine (HLSL SM 1.0) -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T asin(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> asin(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> asin(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> T asin(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> asin(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> asin(matrix<T,N,M> x); // Reinterpret bits as an int (HLSL SM 4.0) -__intrinsic_op int asint(float x); -__intrinsic_op int asint(uint x); -__generic<let N : int> __intrinsic_op vector<int,N> asint(vector<float,N> x); -__generic<let N : int> __intrinsic_op vector<int,N> asint(vector<uint,N> x); -__generic<let N : int, let M : int> __intrinsic_op matrix<int,N,M> asint(matrix<float,N,M> x); -__generic<let N : int, let M : int> __intrinsic_op matrix<int,N,M> asint(matrix<uint,N,M> x); +int asint(float x); +int asint(uint x); +__generic<let N : int> vector<int,N> asint(vector<float,N> x); +__generic<let N : int> vector<int,N> asint(vector<uint,N> x); +__generic<let N : int, let M : int> matrix<int,N,M> asint(matrix<float,N,M> x); +__generic<let N : int, let M : int> matrix<int,N,M> asint(matrix<uint,N,M> x); // Reinterpret bits of double as a uint (HLSL SM 5.0) -__intrinsic_op void asuint(double value, out uint lowbits, out uint highbits); +void asuint(double value, out uint lowbits, out uint highbits); // Reinterpret bits as a uint (HLSL SM 4.0) -__intrinsic_op uint asuint(float x); -__intrinsic_op uint asuint(int x); -__generic<let N : int> __intrinsic_op vector<uint,N> asuint(vector<float,N> x); -__generic<let N : int> __intrinsic_op vector<uint,N> asuint(vector<int,N> x); -__generic<let N : int, let M : int> __intrinsic_op matrix<uint,N,M> asuint(matrix<float,N,M> x); -__generic<let N : int, let M : int> __intrinsic_op matrix<uint,N,M> asuint(matrix<int,N,M> x); +uint asuint(float x); +uint asuint(int x); +__generic<let N : int> vector<uint,N> asuint(vector<float,N> x); +__generic<let N : int> vector<uint,N> asuint(vector<int,N> x); +__generic<let N : int, let M : int> matrix<uint,N,M> asuint(matrix<float,N,M> x); +__generic<let N : int, let M : int> matrix<uint,N,M> asuint(matrix<int,N,M> x); // Inverse tangent (HLSL SM 1.0) -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T atan(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> atan(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> atan(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> T atan(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> atan(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> atan(matrix<T,N,M> x); __generic<T : __BuiltinFloatingPointType> __target_intrinsic(glsl,"atan($0,$1)") -__intrinsic_op T atan2(T y, T x); __generic<T : __BuiltinFloatingPointType, let N : int> __target_intrinsic(glsl,"atan($0,$1)") -__intrinsic_op vector<T,N> atan2(vector<T,N> y, vector<T,N> x); __generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __target_intrinsic(glsl,"atan($0,$1)") -__intrinsic_op matrix<T,N,M> atan2(matrix<T,N,M> y, matrix<T,N,M> x); // Ceiling (HLSL SM 1.0) -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T ceil(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> ceil(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> ceil(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> T ceil(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> ceil(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> ceil(matrix<T,N,M> x); // Check access status to tiled resource -__intrinsic_op bool CheckAccessFullyMapped(uint status); +bool CheckAccessFullyMapped(uint status); // Clamp (HLSL SM 1.0) __generic<T : __BuiltinArithmeticType> T clamp(T x, T min, T max); @@ -331,9 +327,9 @@ __generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> clamp(vector<T,N __generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> clamp(matrix<T,N,M> x, matrix<T,N,M> min, matrix<T,N,M> max); // Clip (discard) fragment conditionally -__generic<T : __BuiltinFloatingPointType> __intrinsic_op void clip(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op void clip(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op void clip(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> void clip(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> void clip(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> void clip(matrix<T,N,M> x); // Cosine __generic<T : __BuiltinFloatingPointType> T cos(T x); @@ -341,360 +337,348 @@ __generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> cos(vector<T, __generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> cos(matrix<T,N,M> x); // Hyperbolic cosine -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T cosh(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> cosh(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> cosh(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> T cosh(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> cosh(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> cosh(matrix<T,N,M> x); // Population count -__intrinsic_op uint countbits(uint value); +uint countbits(uint value); // Cross product -__generic<T : __BuiltinArithmeticType> __intrinsic_op vector<T,3> cross(vector<T,3> x, vector<T,3> y); +__generic<T : __BuiltinArithmeticType> vector<T,3> cross(vector<T,3> x, vector<T,3> y); // Convert encoded color -__intrinsic_op int4 D3DCOLORtoUBYTE4(float4 x); +int4 D3DCOLORtoUBYTE4(float4 x); // Partial-difference derivatives __generic<T : __BuiltinFloatingPointType> __target_intrinsic(glsl, dFdx) -__intrinsic_op T ddx(T x); + __generic<T : __BuiltinFloatingPointType, let N : int> __target_intrinsic(glsl, dFdx) -__intrinsic_op vector<T,N> ddx(vector<T,N> x); + __generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __target_intrinsic(glsl, dFdx) -__intrinsic_op matrix<T,N,M> ddx(matrix<T,N,M> x); __generic<T : __BuiltinFloatingPointType> __glsl_extension(GL_ARB_derivative_control) __target_intrinsic(glsl, dFdxCoarse) -__intrinsic_op T ddx_coarse(T x); + __generic<T : __BuiltinFloatingPointType, let N : int> __glsl_extension(GL_ARB_derivative_control) __target_intrinsic(glsl, dFdxCoarse) -__intrinsic_op vector<T,N> ddx_coarse(vector<T,N> x); + __generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __glsl_extension(GL_ARB_derivative_control) __target_intrinsic(glsl, dFdxCoarse) -__intrinsic_op matrix<T,N,M> ddx_coarse(matrix<T,N,M> x); __generic<T : __BuiltinFloatingPointType> __glsl_extension(GL_ARB_derivative_control) __target_intrinsic(glsl, dFdxFine) -__intrinsic_op T ddx_fine(T x); + __generic<T : __BuiltinFloatingPointType, let N : int> __glsl_extension(GL_ARB_derivative_control) __target_intrinsic(glsl, dFdxFine) -__intrinsic_op vector<T,N> ddx_fine(vector<T,N> x); + __generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __glsl_extension(GL_ARB_derivative_control) __target_intrinsic(glsl, dFdxFine) -__intrinsic_op matrix<T,N,M> ddx_fine(matrix<T,N,M> x); __generic<T : __BuiltinFloatingPointType> __target_intrinsic(glsl, dFdy) -__intrinsic_op T ddy(T x); + __generic<T : __BuiltinFloatingPointType, let N : int> __target_intrinsic(glsl, dFdy) -__intrinsic_op vector<T,N> ddy(vector<T,N> x); + __generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __target_intrinsic(glsl, dFdy) -__intrinsic_op matrix<T,N,M> ddy(matrix<T,N,M> x); __generic<T : __BuiltinFloatingPointType> __glsl_extension(GL_ARB_derivative_control) __target_intrinsic(glsl, dFdyCoarse) -__intrinsic_op T ddy_coarse(T x); + __generic<T : __BuiltinFloatingPointType, let N : int> __glsl_extension(GL_ARB_derivative_control) __target_intrinsic(glsl, dFdyCoarse) -__intrinsic_op vector<T,N> ddy_coarse(vector<T,N> x); + __generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __glsl_extension(GL_ARB_derivative_control) __target_intrinsic(glsl, dFdyCoarse) -__intrinsic_op matrix<T,N,M> ddy_coarse(matrix<T,N,M> x); __generic<T : __BuiltinFloatingPointType> __glsl_extension(GL_ARB_derivative_control) __target_intrinsic(glsl, dFdyFine) -__intrinsic_op T ddy_fine(T x); + __generic<T : __BuiltinFloatingPointType, let N : int> __glsl_extension(GL_ARB_derivative_control) __target_intrinsic(glsl, dFdyFine) -__intrinsic_op vector<T,N> ddy_fine(vector<T,N> x); + __generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __glsl_extension(GL_ARB_derivative_control) __target_intrinsic(glsl, dFdyFine) -__intrinsic_op matrix<T,N,M> ddy_fine(matrix<T,N,M> x); // Radians to degrees -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T degrees(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> degrees(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> degrees(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> T degrees(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> degrees(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> degrees(matrix<T,N,M> x); // Matrix determinant -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op T determinant(matrix<T,N,N> m); +__generic<T : __BuiltinFloatingPointType, let N : int> T determinant(matrix<T,N,N> m); // Barrier for device memory -__intrinsic_op void DeviceMemoryBarrier(); -__intrinsic_op void DeviceMemoryBarrierWithGroupSync(); +void DeviceMemoryBarrier(); +void DeviceMemoryBarrierWithGroupSync(); // Vector distance -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op T distance(vector<T,N> x, vector<T,N> y); +__generic<T : __BuiltinFloatingPointType, let N : int> T distance(vector<T,N> x, vector<T,N> y); // Vector dot product -__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op T dot(vector<T,N> x, vector<T,N> y); +__generic<T : __BuiltinArithmeticType, let N : int> T dot(vector<T,N> x, vector<T,N> y); // Helper for computing distance terms for lighting (obsolete) -__generic<T : __BuiltinFloatingPointType> __intrinsic_op vector<T,4> dst(vector<T,4> x, vector<T,4> y); +__generic<T : __BuiltinFloatingPointType> vector<T,4> dst(vector<T,4> x, vector<T,4> y); // Error message -// __intrinsic_op void errorf( string format, ... ); +// void errorf( string format, ... ); // Attribute evaluation -__generic<T : __BuiltinArithmeticType> __intrinsic_op T EvaluateAttributeAtCentroid(T x); -__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> EvaluateAttributeAtCentroid(vector<T,N> x); -__generic<T : __BuiltinArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> EvaluateAttributeAtCentroid(matrix<T,N,M> x); +__generic<T : __BuiltinArithmeticType> T EvaluateAttributeAtCentroid(T x); +__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> EvaluateAttributeAtCentroid(vector<T,N> x); +__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> EvaluateAttributeAtCentroid(matrix<T,N,M> x); -__generic<T : __BuiltinArithmeticType> __intrinsic_op T EvaluateAttributeAtSample(T x, uint sampleindex); -__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> EvaluateAttributeAtSample(vector<T,N> x, uint sampleindex); -__generic<T : __BuiltinArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> EvaluateAttributeAtSample(matrix<T,N,M> x, uint sampleindex); +__generic<T : __BuiltinArithmeticType> T EvaluateAttributeAtSample(T x, uint sampleindex); +__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> EvaluateAttributeAtSample(vector<T,N> x, uint sampleindex); +__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> EvaluateAttributeAtSample(matrix<T,N,M> x, uint sampleindex); -__generic<T : __BuiltinArithmeticType> __intrinsic_op T EvaluateAttributeSnapped(T x, int2 offset); -__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> EvaluateAttributeSnapped(vector<T,N> x, int2 offset); -__generic<T : __BuiltinArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> EvaluateAttributeSnapped(matrix<T,N,M> x, int2 offset); +__generic<T : __BuiltinArithmeticType> T EvaluateAttributeSnapped(T x, int2 offset); +__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> EvaluateAttributeSnapped(vector<T,N> x, int2 offset); +__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> EvaluateAttributeSnapped(matrix<T,N,M> x, int2 offset); // Base-e exponent -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T exp(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> exp(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> exp(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> T exp(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> exp(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> exp(matrix<T,N,M> x); // Base-2 exponent -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T exp2(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> exp2(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> exp2(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> T exp2(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> exp2(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> exp2(matrix<T,N,M> x); // Convert 16-bit float stored in low bits of integer -__intrinsic_op float f16tof32(uint value); -__generic<let N : int> __intrinsic_op vector<float,N> f16tof32(vector<uint,N> value); +float f16tof32(uint value); +__generic<let N : int> vector<float,N> f16tof32(vector<uint,N> value); // Convert to 16-bit float stored in low bits of integer -__intrinsic_op uint f32tof16(float value); -__generic<let N : int> __intrinsic_op vector<uint,N> f32tof16(vector<float,N> value); +uint f32tof16(float value); +__generic<let N : int> vector<uint,N> f32tof16(vector<float,N> value); // Flip surface normal to face forward, if needed -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> faceforward(vector<T,N> n, vector<T,N> i, vector<T,N> ng); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> faceforward(vector<T,N> n, vector<T,N> i, vector<T,N> ng); // Find first set bit starting at high bit and working down -__intrinsic_op int firstbithigh(int value); -__generic<let N : int> __intrinsic_op vector<int,N> firstbithigh(vector<int,N> value); +int firstbithigh(int value); +__generic<let N : int> vector<int,N> firstbithigh(vector<int,N> value); -__intrinsic_op uint firstbithigh(uint value); -__generic<let N : int> __intrinsic_op vector<uint,N> firstbithigh(vector<uint,N> value); +uint firstbithigh(uint value); +__generic<let N : int> vector<uint,N> firstbithigh(vector<uint,N> value); // Find first set bit starting at low bit and working up -__intrinsic_op int firstbitlow(int value); -__generic<let N : int> __intrinsic_op vector<int,N> firstbitlow(vector<int,N> value); +int firstbitlow(int value); +__generic<let N : int> vector<int,N> firstbitlow(vector<int,N> value); -__intrinsic_op uint firstbitlow(uint value); -__generic<let N : int> __intrinsic_op vector<uint,N> firstbitlow(vector<uint,N> value); +uint firstbitlow(uint value); +__generic<let N : int> vector<uint,N> firstbitlow(vector<uint,N> value); // Floor (HLSL SM 1.0) -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T floor(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> floor(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> floor(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> T floor(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> floor(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> floor(matrix<T,N,M> x); // Fused multiply-add for doubles -__intrinsic_op double fma(double a, double b, double c); -__generic<let N : int> __intrinsic_op vector<double, N> fma(vector<double, N> a, vector<double, N> b, vector<double, N> c); -__generic<let N : int, let M : int> __intrinsic_op matrix<double,N,M> fma(matrix<double,N,M> a, matrix<double,N,M> b, matrix<double,N,M> c); +double fma(double a, double b, double c); +__generic<let N : int> vector<double, N> fma(vector<double, N> a, vector<double, N> b, vector<double, N> c); +__generic<let N : int, let M : int> matrix<double,N,M> fma(matrix<double,N,M> a, matrix<double,N,M> b, matrix<double,N,M> c); // Floating point remainder of x/y -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T fmod(T x, T y); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> fmod(vector<T,N> x, vector<T,N> y); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> fmod(matrix<T,N,M> x, matrix<T,N,M> y); +__generic<T : __BuiltinFloatingPointType> T fmod(T x, T y); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> fmod(vector<T,N> x, vector<T,N> y); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> fmod(matrix<T,N,M> x, matrix<T,N,M> y); // Fractional part __generic<T : __BuiltinFloatingPointType> __target_intrinsic(glsl, fract) -__intrinsic_op T frac(T x); __generic<T : __BuiltinFloatingPointType, let N : int> __target_intrinsic(glsl, fract) -__intrinsic_op vector<T,N> frac(vector<T,N> x); __generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __target_intrinsic(glsl, fract) -__intrinsic_op matrix<T,N,M> frac(matrix<T,N,M> x); // Split float into mantissa and exponent -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T frexp(T x, out T exp); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> frexp(vector<T,N> x, out vector<T,N> exp); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> frexp(matrix<T,N,M> x, out matrix<T,N,M> exp); +__generic<T : __BuiltinFloatingPointType> T frexp(T x, out T exp); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> frexp(vector<T,N> x, out vector<T,N> exp); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> frexp(matrix<T,N,M> x, out matrix<T,N,M> exp); // Texture filter width -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T fwidth(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> fwidth(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> fwidth(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> T fwidth(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> fwidth(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> fwidth(matrix<T,N,M> x); // Get number of samples in render target -__intrinsic_op uint GetRenderTargetSampleCount(); +uint GetRenderTargetSampleCount(); // Get position of given sample -__intrinsic_op float2 GetRenderTargetSamplePosition(int Index); +float2 GetRenderTargetSamplePosition(int Index); // Group memory barrier -__intrinsic_op void GroupMemoryBarrier(); -__intrinsic_op void GroupMemoryBarrierWithGroupSync(); +void GroupMemoryBarrier(); +void GroupMemoryBarrierWithGroupSync(); // Atomics -__intrinsic_op void InterlockedAdd(in out int dest, int value, out int original_value); -__intrinsic_op void InterlockedAdd(in out uint dest, uint value, out uint original_value); +void InterlockedAdd(in out int dest, int value, out int original_value); +void InterlockedAdd(in out uint dest, uint value, out uint original_value); -__intrinsic_op void InterlockedAnd(in out int dest, int value, out int original_value); -__intrinsic_op void InterlockedAnd(in out uint dest, uint value, out uint original_value); +void InterlockedAnd(in out int dest, int value, out int original_value); +void InterlockedAnd(in out uint dest, uint value, out uint original_value); -__intrinsic_op void InterlockedCompareExchange(in out int dest, int compare_value, int value, out int original_value); -__intrinsic_op void InterlockedCompareExchange(in out uint dest, uint compare_value, uint value, out uint original_value); +void InterlockedCompareExchange(in out int dest, int compare_value, int value, out int original_value); +void InterlockedCompareExchange(in out uint dest, uint compare_value, uint value, out uint original_value); -__intrinsic_op void InterlockedCompareStore(in out int dest, int compare_value, int value); -__intrinsic_op void InterlockedCompareStore(in out uint dest, uint compare_value, uint value); +void InterlockedCompareStore(in out int dest, int compare_value, int value); +void InterlockedCompareStore(in out uint dest, uint compare_value, uint value); -__intrinsic_op void InterlockedExchange(in out int dest, int value, out int original_value); -__intrinsic_op void InterlockedExchange(in out uint dest, uint value, out uint original_value); +void InterlockedExchange(in out int dest, int value, out int original_value); +void InterlockedExchange(in out uint dest, uint value, out uint original_value); -__intrinsic_op void InterlockedMax(in out int dest, int value, out int original_value); -__intrinsic_op void InterlockedMax(in out uint dest, uint value, out uint original_value); +void InterlockedMax(in out int dest, int value, out int original_value); +void InterlockedMax(in out uint dest, uint value, out uint original_value); -__intrinsic_op void InterlockedMin(in out int dest, int value, out int original_value); -__intrinsic_op void InterlockedMin(in out uint dest, uint value, out uint original_value); +void InterlockedMin(in out int dest, int value, out int original_value); +void InterlockedMin(in out uint dest, uint value, out uint original_value); -__intrinsic_op void InterlockedOr(in out int dest, int value, out int original_value); -__intrinsic_op void InterlockedOr(in out uint dest, uint value, out uint original_value); +void InterlockedOr(in out int dest, int value, out int original_value); +void InterlockedOr(in out uint dest, uint value, out uint original_value); -__intrinsic_op void InterlockedXor(in out int dest, int value, out int original_value); -__intrinsic_op void InterlockedXor(in out uint dest, uint value, out uint original_value); +void InterlockedXor(in out int dest, int value, out int original_value); +void InterlockedXor(in out uint dest, uint value, out uint original_value); // Is floating-point value finite? -__generic<T : __BuiltinFloatingPointType> __intrinsic_op bool isfinite(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<bool,N> isfinite(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<bool,N,M> isfinite(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> bool isfinite(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<bool,N> isfinite(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<bool,N,M> isfinite(matrix<T,N,M> x); // Is floating-point value infinite? -__generic<T : __BuiltinFloatingPointType> __intrinsic_op bool isinf(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<bool,N> isinf(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<bool,N,M> isinf(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> bool isinf(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<bool,N> isinf(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<bool,N,M> isinf(matrix<T,N,M> x); // Is floating-point value not-a-number? -__generic<T : __BuiltinFloatingPointType> __intrinsic_op bool isnan(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<bool,N> isnan(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<bool,N,M> isnan(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> bool isnan(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<bool,N> isnan(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<bool,N,M> isnan(matrix<T,N,M> x); // Construct float from mantissa and exponent -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T ldexp(T x, T exp); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> ldexp(vector<T,N> x, vector<T,N> exp); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> ldexp(matrix<T,N,M> x, matrix<T,N,M> exp); +__generic<T : __BuiltinFloatingPointType> T ldexp(T x, T exp); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> ldexp(vector<T,N> x, vector<T,N> exp); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> ldexp(matrix<T,N,M> x, matrix<T,N,M> exp); // Vector length -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op T length(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int> T length(vector<T,N> x); // Linear interpolation __generic<T : __BuiltinFloatingPointType> __target_intrinsic(glsl, mix) -__intrinsic_op T lerp(T x, T y, T s); __generic<T : __BuiltinFloatingPointType, let N : int> __target_intrinsic(glsl, mix) -__intrinsic_op vector<T,N> lerp(vector<T,N> x, vector<T,N> y, vector<T,N> s); __generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __target_intrinsic(glsl, mix) -__intrinsic_op matrix<T,N,M> lerp(matrix<T,N,M> x, matrix<T,N,M> y, matrix<T,N,M> s); // Legacy lighting function (obsolete) -__intrinsic_op float4 lit(float n_dot_l, float n_dot_h, float m); +float4 lit(float n_dot_l, float n_dot_h, float m); // Base-e logarithm -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T log(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> log(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> log(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> T log(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> log(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> log(matrix<T,N,M> x); // Base-10 logarithm -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T log10(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> log10(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> log10(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> T log10(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> log10(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> log10(matrix<T,N,M> x); // Base-2 logarithm -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T log2(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> log2(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> log2(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> T log2(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> log2(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> log2(matrix<T,N,M> x); // multiply-add -__generic<T : __BuiltinArithmeticType> __intrinsic_op T mad(T mvalue, T avalue, T bvalue); -__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> mad(vector<T,N> mvalue, vector<T,N> avalue, vector<T,N> bvalue); -__generic<T : __BuiltinArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> mad(matrix<T,N,M> mvalue, matrix<T,N,M> avalue, matrix<T,N,M> bvalue); +__generic<T : __BuiltinArithmeticType> T mad(T mvalue, T avalue, T bvalue); +__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> mad(vector<T,N> mvalue, vector<T,N> avalue, vector<T,N> bvalue); +__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> mad(matrix<T,N,M> mvalue, matrix<T,N,M> avalue, matrix<T,N,M> bvalue); // maximum -__generic<T : __BuiltinArithmeticType> __intrinsic_op T max(T x, T y); -__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> max(vector<T,N> x, vector<T,N> y); -__generic<T : __BuiltinArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> max(matrix<T,N,M> x, matrix<T,N,M> y); +__generic<T : __BuiltinArithmeticType> T max(T x, T y); +__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> max(vector<T,N> x, vector<T,N> y); +__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> max(matrix<T,N,M> x, matrix<T,N,M> y); // minimum -__generic<T : __BuiltinArithmeticType> __intrinsic_op T min(T x, T y); -__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> min(vector<T,N> x, vector<T,N> y); -__generic<T : __BuiltinArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> min(matrix<T,N,M> x, matrix<T,N,M> y); +__generic<T : __BuiltinArithmeticType> T min(T x, T y); +__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> min(vector<T,N> x, vector<T,N> y); +__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> min(matrix<T,N,M> x, matrix<T,N,M> y); // split into integer and fractional parts (both with same sign) -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T modf(T x, out T ip); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> modf(vector<T,N> x, out vector<T,N> ip); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> modf(matrix<T,N,M> x, out matrix<T,N,M> ip); +__generic<T : __BuiltinFloatingPointType> T modf(T x, out T ip); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> modf(vector<T,N> x, out vector<T,N> ip); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> modf(matrix<T,N,M> x, out matrix<T,N,M> ip); // msad4 (whatever that is) -__intrinsic_op uint4 msad4(uint reference, uint2 source, uint4 accum); +uint4 msad4(uint reference, uint2 source, uint4 accum); // General inner products // scalar-scalar -__generic<T : __BuiltinArithmeticType> __intrinsic_op T mul(T x, T y); +__generic<T : __BuiltinArithmeticType> T mul(T x, T y); // scalar-vector and vector-scalar -__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> mul(vector<T,N> x, T y); -__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> mul(T x, vector<T,N> y); +__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> mul(vector<T,N> x, T y); +__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> mul(T x, vector<T,N> y); // scalar-matrix and matrix-scalar -__generic<T : __BuiltinArithmeticType, let N : int, let M :int> __intrinsic_op matrix<T,N,M> mul(matrix<T,N,M> x, T y); -__generic<T : __BuiltinArithmeticType, let N : int, let M :int> __intrinsic_op matrix<T,N,M> mul(T x, matrix<T,N,M> y); +__generic<T : __BuiltinArithmeticType, let N : int, let M :int> matrix<T,N,M> mul(matrix<T,N,M> x, T y); +__generic<T : __BuiltinArithmeticType, let N : int, let M :int> matrix<T,N,M> mul(T x, matrix<T,N,M> y); // vector-vector (dot product) __generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op(dot) T mul(vector<T,N> x, vector<T,N> y); @@ -709,86 +693,86 @@ __generic<T : __BuiltinArithmeticType, let N : int, let M : int> __intrinsic_op( __generic<T : __BuiltinArithmeticType, let R : int, let N : int, let C : int> __intrinsic_op(mulMatrixMatrix) matrix<T,R,C> mul(matrix<T,R,N> x, matrix<T,N,C> y); // noise (deprecated) -__intrinsic_op float noise(float x); -__generic<let N : int> __intrinsic_op float noise(vector<float, N> x); +float noise(float x); +__generic<let N : int> float noise(vector<float, N> x); // Normalize a vector -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> normalize(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> normalize(vector<T,N> x); // Raise to a power -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T pow(T x, T y); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> pow(vector<T,N> x, vector<T,N> y); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> pow(matrix<T,N,M> x, matrix<T,N,M> y); +__generic<T : __BuiltinFloatingPointType> T pow(T x, T y); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> pow(vector<T,N> x, vector<T,N> y); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> pow(matrix<T,N,M> x, matrix<T,N,M> y); // Output message -// __intrinsic_op void printf( string format, ... ); +// void printf( string format, ... ); // Tessellation factor fixup routines -__intrinsic_op void Process2DQuadTessFactorsAvg( +void Process2DQuadTessFactorsAvg( in float4 RawEdgeFactors, in float2 InsideScale, out float4 RoundedEdgeTessFactors, out float2 RoundedInsideTessFactors, out float2 UnroundedInsideTessFactors); -__intrinsic_op void Process2DQuadTessFactorsMax( +void Process2DQuadTessFactorsMax( in float4 RawEdgeFactors, in float2 InsideScale, out float4 RoundedEdgeTessFactors, out float2 RoundedInsideTessFactors, out float2 UnroundedInsideTessFactors); -__intrinsic_op void Process2DQuadTessFactorsMin( +void Process2DQuadTessFactorsMin( in float4 RawEdgeFactors, in float2 InsideScale, out float4 RoundedEdgeTessFactors, out float2 RoundedInsideTessFactors, out float2 UnroundedInsideTessFactors); -__intrinsic_op void ProcessIsolineTessFactors( +void ProcessIsolineTessFactors( in float RawDetailFactor, in float RawDensityFactor, out float RoundedDetailFactor, out float RoundedDensityFactor); -__intrinsic_op void ProcessQuadTessFactorsAvg( +void ProcessQuadTessFactorsAvg( in float4 RawEdgeFactors, in float InsideScale, out float4 RoundedEdgeTessFactors, out float2 RoundedInsideTessFactors, out float2 UnroundedInsideTessFactors); -__intrinsic_op void ProcessQuadTessFactorsMax( +void ProcessQuadTessFactorsMax( in float4 RawEdgeFactors, in float InsideScale, out float4 RoundedEdgeTessFactors, out float2 RoundedInsideTessFactors, out float2 UnroundedInsideTessFactors); -__intrinsic_op void ProcessQuadTessFactorsMin( +void ProcessQuadTessFactorsMin( in float4 RawEdgeFactors, in float InsideScale, out float4 RoundedEdgeTessFactors, out float2 RoundedInsideTessFactors, out float2 UnroundedInsideTessFactors); -__intrinsic_op void ProcessTriTessFactorsAvg( +void ProcessTriTessFactorsAvg( in float3 RawEdgeFactors, in float InsideScale, out float3 RoundedEdgeTessFactors, out float RoundedInsideTessFactor, out float UnroundedInsideTessFactor); -__intrinsic_op void ProcessTriTessFactorsMax( +void ProcessTriTessFactorsMax( in float3 RawEdgeFactors, in float InsideScale, out float3 RoundedEdgeTessFactors, out float RoundedInsideTessFactor, out float UnroundedInsideTessFactor); -__intrinsic_op void ProcessTriTessFactorsMin( +void ProcessTriTessFactorsMin( in float3 RawEdgeFactors, in float InsideScale, out float3 RoundedEdgeTessFactors, @@ -796,38 +780,36 @@ __intrinsic_op void ProcessTriTessFactorsMin( out float UnroundedInsideTessFactors); // Degrees to radians -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T radians(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> radians(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> radians(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> T radians(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> radians(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> radians(matrix<T,N,M> x); // Approximate reciprocal -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T rcp(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> rcp(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> rcp(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> T rcp(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> rcp(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> rcp(matrix<T,N,M> x); // Reflect incident vector across plane with given normal __generic<T : __BuiltinFloatingPointType, let N : int> -__intrinsic_op vector<T,N> reflect(vector<T,N> i, vector<T,N> n); // Refract incident vector given surface normal and index of refraction __generic<T : __BuiltinFloatingPointType, let N : int> -__intrinsic_op vector<T,N> refract(vector<T,N> i, vector<T,N> n, float eta); // Reverse order of bits -__intrinsic_op uint reversebits(uint value); +uint reversebits(uint value); __generic<let N : int> vector<uint,N> reversebits(vector<uint,N> value); // Round-to-nearest -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T round(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> round(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> round(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> T round(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> round(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> round(matrix<T,N,M> x); // Reciprocal of square root -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T rsqrt(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> rsqrt(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> rsqrt(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> T rsqrt(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> rsqrt(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> rsqrt(matrix<T,N,M> x); // Clamp value to [0,1] range __generic<T : __BuiltinFloatingPointType> @@ -875,9 +857,9 @@ matrix<T,N,M> saturate(matrix<T,N,M> x) // Extract sign of value -__generic<T : __BuiltinSignedArithmeticType> __intrinsic_op int sign(T x); -__generic<T : __BuiltinSignedArithmeticType, let N : int> __intrinsic_op vector<int,N> sign(vector<T,N> x); -__generic<T : __BuiltinSignedArithmeticType, let N : int, let M : int> __intrinsic_op matrix<int,N,M> sign(matrix<T,N,M> x); +__generic<T : __BuiltinSignedArithmeticType> int sign(T x); +__generic<T : __BuiltinSignedArithmeticType, let N : int> vector<int,N> sign(vector<T,N> x); +__generic<T : __BuiltinSignedArithmeticType, let N : int, let M : int> matrix<int,N,M> sign(matrix<T,N,M> x); // Sine @@ -886,127 +868,127 @@ __generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> sin(vector<T, __generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> sin(matrix<T,N,M> x); // Sine and cosine -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op void sincos(T x, out T s, out T c); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op void sincos(vector<T,N> x, out vector<T,N> s, out vector<T,N> c); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op void sincos(matrix<T,N,M> x, out matrix<T,N,M> s, out matrix<T,N,M> c); +__generic<T : __BuiltinFloatingPointType, let N : int> void sincos(T x, out T s, out T c); +__generic<T : __BuiltinFloatingPointType, let N : int> void sincos(vector<T,N> x, out vector<T,N> s, out vector<T,N> c); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> void sincos(matrix<T,N,M> x, out matrix<T,N,M> s, out matrix<T,N,M> c); // Hyperbolic Sine -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T sinh(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> sinh(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> sinh(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> T sinh(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> sinh(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> sinh(matrix<T,N,M> x); // Smooth step (Hermite interpolation) -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T smoothstep(T min, T max, T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> smoothstep(vector<T,N> min, vector<T,N> max, vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> smoothstep(matrix<T,N,M> min, matrix<T,N,M> max, matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> T smoothstep(T min, T max, T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> smoothstep(vector<T,N> min, vector<T,N> max, vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> smoothstep(matrix<T,N,M> min, matrix<T,N,M> max, matrix<T,N,M> x); // Square root -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T sqrt(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> sqrt(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> sqrt(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> T sqrt(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> sqrt(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> sqrt(matrix<T,N,M> x); // Step function -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T step(T y, T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> step(vector<T,N> y, vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> step(matrix<T,N,M> y, matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> T step(T y, T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> step(vector<T,N> y, vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> step(matrix<T,N,M> y, matrix<T,N,M> x); // Tangent -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T tan(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> tan(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> tan(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> T tan(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> tan(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> tan(matrix<T,N,M> x); // Hyperbolic tangent -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T tanh(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> tanh(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> tanh(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> T tanh(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> tanh(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> tanh(matrix<T,N,M> x); // Legacy texture-fetch operations /* -__intrinsic_op float4 tex1D(sampler1D s, float t); -__intrinsic_op float4 tex1D(sampler1D s, float t, float ddx, float ddy); -__intrinsic_op float4 tex1Dbias(sampler1D s, float4 t); -__intrinsic_op float4 tex1Dgrad(sampler1D s, float t, float ddx, float ddy); -__intrinsic_op float4 tex1Dlod(sampler1D s, float4 t); -__intrinsic_op float4 tex1Dproj(sampler1D s, float4 t); - -__intrinsic_op float4 tex2D(sampler2D s, float2 t); -__intrinsic_op float4 tex2D(sampler2D s, float2 t, float2 ddx, float2 ddy); -__intrinsic_op float4 tex2Dbias(sampler2D s, float4 t); -__intrinsic_op float4 tex2Dgrad(sampler2D s, float2 t, float2 ddx, float2 ddy); -__intrinsic_op float4 tex2Dlod(sampler2D s, float4 t); -__intrinsic_op float4 tex2Dproj(sampler2D s, float4 t); - -__intrinsic_op float4 tex3D(sampler3D s, float3 t); -__intrinsic_op float4 tex3D(sampler3D s, float3 t, float3 ddx, float3 ddy); -__intrinsic_op float4 tex3Dbias(sampler3D s, float4 t); -__intrinsic_op float4 tex3Dgrad(sampler3D s, float3 t, float3 ddx, float3 ddy); -__intrinsic_op float4 tex3Dlod(sampler3D s, float4 t); -__intrinsic_op float4 tex3Dproj(sampler3D s, float4 t); - -__intrinsic_op float4 texCUBE(samplerCUBE s, float3 t); -__intrinsic_op float4 texCUBE(samplerCUBE s, float3 t, float3 ddx, float3 ddy); -__intrinsic_op float4 texCUBEbias(samplerCUBE s, float4 t); -__intrinsic_op float4 texCUBEgrad(samplerCUBE s, float3 t, float3 ddx, float3 ddy); -__intrinsic_op float4 texCUBElod(samplerCUBE s, float4 t); -__intrinsic_op float4 texCUBEproj(samplerCUBE s, float4 t); +float4 tex1D(sampler1D s, float t); +float4 tex1D(sampler1D s, float t, float ddx, float ddy); +float4 tex1Dbias(sampler1D s, float4 t); +float4 tex1Dgrad(sampler1D s, float t, float ddx, float ddy); +float4 tex1Dlod(sampler1D s, float4 t); +float4 tex1Dproj(sampler1D s, float4 t); + +float4 tex2D(sampler2D s, float2 t); +float4 tex2D(sampler2D s, float2 t, float2 ddx, float2 ddy); +float4 tex2Dbias(sampler2D s, float4 t); +float4 tex2Dgrad(sampler2D s, float2 t, float2 ddx, float2 ddy); +float4 tex2Dlod(sampler2D s, float4 t); +float4 tex2Dproj(sampler2D s, float4 t); + +float4 tex3D(sampler3D s, float3 t); +float4 tex3D(sampler3D s, float3 t, float3 ddx, float3 ddy); +float4 tex3Dbias(sampler3D s, float4 t); +float4 tex3Dgrad(sampler3D s, float3 t, float3 ddx, float3 ddy); +float4 tex3Dlod(sampler3D s, float4 t); +float4 tex3Dproj(sampler3D s, float4 t); + +float4 texCUBE(samplerCUBE s, float3 t); +float4 texCUBE(samplerCUBE s, float3 t, float3 ddx, float3 ddy); +float4 texCUBEbias(samplerCUBE s, float4 t); +float4 texCUBEgrad(samplerCUBE s, float3 t, float3 ddx, float3 ddy); +float4 texCUBElod(samplerCUBE s, float4 t); +float4 texCUBEproj(samplerCUBE s, float4 t); */ // Matrix transpose -__generic<T : __BuiltinType, let N : int, let M : int> __intrinsic_op matrix<T,M,N> transpose(matrix<T,N,M> x); +__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,M,N> transpose(matrix<T,N,M> x); // Truncate to integer -__generic<T : __BuiltinFloatingPointType> __intrinsic_op T trunc(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> trunc(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> trunc(matrix<T,N,M> x); +__generic<T : __BuiltinFloatingPointType> T trunc(T x); +__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> trunc(vector<T,N> x); +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> trunc(matrix<T,N,M> x); // Shader model 6.0 stuff -__intrinsic_op uint GlobalOrderedCountIncrement(uint countToAppendForThisLane); +uint GlobalOrderedCountIncrement(uint countToAppendForThisLane); -__generic<T : __BuiltinType> __intrinsic_op T QuadReadLaneAt(T sourceValue, int quadLaneID); -__generic<T : __BuiltinType, let N : int> __intrinsic_op vector<T,N> QuadReadLaneAt(vector<T,N> sourceValue, int quadLaneID); -__generic<T : __BuiltinType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> QuadReadLaneAt(matrix<T,N,M> sourceValue, int 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> __intrinsic_op T QuadSwapX(T localValue); -__generic<T : __BuiltinType, let N : int> __intrinsic_op vector<T,N> QuadSwapX(vector<T,N> localValue); -__generic<T : __BuiltinType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> QuadSwapX(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> __intrinsic_op T QuadSwapY(T localValue); -__generic<T : __BuiltinType, let N : int> __intrinsic_op vector<T,N> QuadSwapY(vector<T,N> localValue); -__generic<T : __BuiltinType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> QuadSwapY(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 : __BuiltinIntegerType> __intrinsic_op T WaveAllBitAnd(T expr); -__generic<T : __BuiltinIntegerType, let N : int> __intrinsic_op vector<T,N> WaveAllBitAnd(vector<T,N> expr); -__generic<T : __BuiltinIntegerType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> WaveAllBitAnd(matrix<T,N,M> expr); +__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> __intrinsic_op T WaveAllBitOr(T expr); -__generic<T : __BuiltinIntegerType, let N : int> __intrinsic_op vector<T,N> WaveAllBitOr(vector<T,N> expr); -__generic<T : __BuiltinIntegerType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> WaveAllBitOr(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> __intrinsic_op T WaveAllBitXor(T expr); -__generic<T : __BuiltinIntegerType, let N : int> __intrinsic_op vector<T,N> WaveAllBitXor(vector<T,N> expr); -__generic<T : __BuiltinIntegerType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> WaveAllBitXor(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 : __BuiltinArithmeticType> __intrinsic_op T WaveAllMax(T expr); -__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> WaveAllMax(vector<T,N> expr); -__generic<T : __BuiltinArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> WaveAllMax(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> __intrinsic_op T WaveAllMin(T expr); -__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> WaveAllMin(vector<T,N> expr); -__generic<T : __BuiltinArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> WaveAllMin(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> __intrinsic_op T WaveAllProduct(T expr); -__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> WaveAllProduct(vector<T,N> expr); -__generic<T : __BuiltinArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> WaveAllProduct(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> __intrinsic_op T WaveAllSum(T expr); -__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> WaveAllSum(vector<T,N> expr); -__generic<T : __BuiltinArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> WaveAllSum(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); -__intrinsic_op bool WaveAllEqual(bool expr); -__intrinsic_op bool WaveAllTrue(bool expr); -__intrinsic_op bool WaveAnyTrue(bool expr); +bool WaveAllEqual(bool expr); +bool WaveAllTrue(bool expr); +bool WaveAnyTrue(bool expr); uint64_t WaveBallot(bool expr); @@ -1018,21 +1000,21 @@ bool WaveIsHelperLane(); bool WaveOnce(); -__generic<T : __BuiltinArithmeticType> __intrinsic_op T WavePrefixProduct(T expr); -__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> WavePrefixProduct(vector<T,N> expr); -__generic<T : __BuiltinArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> WavePrefixProduct(matrix<T,N,M> expr); +__generic<T : __BuiltinArithmeticType> T WavePrefixProduct(T expr); +__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WavePrefixProduct(vector<T,N> expr); +__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WavePrefixProduct(matrix<T,N,M> expr); -__generic<T : __BuiltinArithmeticType> __intrinsic_op T WavePrefixSum(T expr); -__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> WavePrefixSum(vector<T,N> expr); -__generic<T : __BuiltinArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> WavePrefixSum(matrix<T,N,M> expr); +__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> __intrinsic_op T WaveReadFirstLane(T expr); -__generic<T : __BuiltinType, let N : int> __intrinsic_op vector<T,N> WaveReadFirstLane(vector<T,N> expr); -__generic<T : __BuiltinType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> WaveReadFirstLane(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 : __BuiltinType> __intrinsic_op T WaveReadLaneAt(T expr, int laneIndex); -__generic<T : __BuiltinType, let N : int> __intrinsic_op vector<T,N> WaveReadLaneAt(vector<T,N> expr, int laneIndex); -__generic<T : __BuiltinType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> WaveReadLaneAt(matrix<T,N,M> expr, int laneIndex); +__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; @@ -1092,15 +1074,15 @@ for (int aa = 0; aa < kBaseBufferAccessLevelCount; ++aa) sb << kBaseBufferAccessLevels[aa].name; sb << "Buffer {\n"; - sb << "__intrinsic_op void GetDimensions(out uint dim);\n"; + sb << "void GetDimensions(out uint dim);\n"; sb << "__target_intrinsic(glsl, \"texelFetch($$P, $0)$$z\")\n"; - sb << "__intrinsic_op T Load(int location);\n"; + sb << "T Load(int location);\n"; - sb << "__intrinsic_op T Load(int location, out uint status);\n"; + sb << "T Load(int location, out uint status);\n"; sb << "__target_intrinsic(glsl, \"texelFetch($$P, int($0))$$z\")\n"; - sb << "__intrinsic_op __subscript(uint index) -> T"; + sb << "__subscript(uint index) -> T"; if (kBaseBufferAccessLevels[aa].access != SLANG_RESOURCE_ACCESS_READ) { diff --git a/source/slang/hlsl.meta.slang.h b/source/slang/hlsl.meta.slang.h index dfbdbe57b..c9ccfcc81 100644 --- a/source/slang/hlsl.meta.slang.h +++ b/source/slang/hlsl.meta.slang.h @@ -4,29 +4,29 @@ sb << "typedef uint UINT;\n"; sb << "\n"; sb << "__generic<T> __magic_type(HLSLAppendStructuredBufferType) struct AppendStructuredBuffer\n"; sb << "{\n"; -sb << " __intrinsic_op void Append(T value);\n"; +sb << " void Append(T value);\n"; sb << "\n"; -sb << " __intrinsic_op void GetDimensions(\n"; +sb << " void GetDimensions(\n"; sb << " out uint numStructs,\n"; sb << " out uint stride);\n"; sb << "};\n"; sb << "\n"; sb << "__magic_type(HLSLByteAddressBufferType) struct ByteAddressBuffer\n"; sb << "{\n"; -sb << " __intrinsic_op void GetDimensions(\n"; +sb << " void GetDimensions(\n"; sb << " out uint dim);\n"; sb << "\n"; -sb << " __intrinsic_op uint Load(int location);\n"; -sb << " __intrinsic_op uint Load(int location, out uint status);\n"; +sb << " uint Load(int location);\n"; +sb << " uint Load(int location, out uint status);\n"; sb << "\n"; -sb << " __intrinsic_op uint2 Load2(int location);\n"; -sb << " __intrinsic_op uint2 Load2(int location, out uint status);\n"; +sb << " uint2 Load2(int location);\n"; +sb << " uint2 Load2(int location, out uint status);\n"; sb << "\n"; -sb << " __intrinsic_op uint3 Load3(int location);\n"; -sb << " __intrinsic_op uint3 Load3(int location, out uint status);\n"; +sb << " uint3 Load3(int location);\n"; +sb << " uint3 Load3(int location, out uint status);\n"; sb << "\n"; -sb << " __intrinsic_op uint4 Load4(int location);\n"; -sb << " __intrinsic_op uint4 Load4(int location, out uint status);\n"; +sb << " uint4 Load4(int location);\n"; +sb << " uint4 Load4(int location, out uint status);\n"; sb << "};\n"; sb << "\n"; sb << "__generic<T>\n"; @@ -38,12 +38,12 @@ sb << "__intrinsic_type("; sb << ")\n"; sb << "struct StructuredBuffer\n"; sb << "{\n"; -sb << " __intrinsic_op void GetDimensions(\n"; +sb << " void GetDimensions(\n"; sb << " out uint numStructs,\n"; sb << " out uint stride);\n"; sb << "\n"; -sb << " __intrinsic_op T Load(int location);\n"; -sb << " __intrinsic_op T Load(int location, out uint status);\n"; +sb << " T Load(int location);\n"; +sb << " T Load(int location, out uint status);\n"; sb << "\n"; sb << " __intrinsic_op(bufferLoad)\n"; sb << " __subscript(uint index) -> T;\n"; @@ -51,21 +51,21 @@ sb << "};\n"; sb << "\n"; sb << "__generic<T> __magic_type(HLSLConsumeStructuredBufferType) struct ConsumeStructuredBuffer\n"; sb << "{\n"; -sb << " __intrinsic_op T Consume();\n"; +sb << " T Consume();\n"; sb << "\n"; -sb << " __intrinsic_op void GetDimensions(\n"; +sb << " void GetDimensions(\n"; sb << " out uint numStructs,\n"; sb << " out uint stride);\n"; sb << "};\n"; sb << "\n"; sb << "__generic<T, let N : int> __magic_type(HLSLInputPatchType) struct InputPatch\n"; sb << "{\n"; -sb << " __intrinsic_op __subscript(uint index) -> T;\n"; +sb << " __subscript(uint index) -> T;\n"; sb << "};\n"; sb << "\n"; sb << "__generic<T, let N : int> __magic_type(HLSLOutputPatchType) struct OutputPatch\n"; sb << "{\n"; -sb << " __intrinsic_op __subscript(uint index) -> T { set; }\n"; +sb << " __subscript(uint index) -> T { set; }\n"; sb << "};\n"; sb << "\n"; sb << "__magic_type(HLSLRWByteAddressBufferType) struct RWByteAddressBuffer\n"; @@ -73,110 +73,110 @@ sb << "{\n"; sb << " // Note(tfoley): supports alll operations from `ByteAddressBuffer`\n"; sb << " // TODO(tfoley): can this be made a sub-type?\n"; sb << "\n"; -sb << " __intrinsic_op void GetDimensions(\n"; +sb << " void GetDimensions(\n"; sb << " out uint dim);\n"; sb << "\n"; -sb << " __intrinsic_op uint Load(int location);\n"; -sb << " __intrinsic_op uint Load(int location, out uint status);\n"; +sb << " uint Load(int location);\n"; +sb << " uint Load(int location, out uint status);\n"; sb << "\n"; -sb << " __intrinsic_op uint2 Load2(int location);\n"; -sb << " __intrinsic_op uint2 Load2(int location, out uint status);\n"; +sb << " uint2 Load2(int location);\n"; +sb << " uint2 Load2(int location, out uint status);\n"; sb << "\n"; -sb << " __intrinsic_op uint3 Load3(int location);\n"; -sb << " __intrinsic_op uint3 Load3(int location, out uint status);\n"; +sb << " uint3 Load3(int location);\n"; +sb << " uint3 Load3(int location, out uint status);\n"; sb << "\n"; -sb << " __intrinsic_op uint4 Load4(int location);\n"; -sb << " __intrinsic_op uint4 Load4(int location, out uint status);\n"; +sb << " uint4 Load4(int location);\n"; +sb << " uint4 Load4(int location, out uint status);\n"; sb << "\n"; sb << " // Added operations:\n"; sb << "\n"; -sb << " __intrinsic_op void InterlockedAdd(\n"; +sb << " void InterlockedAdd(\n"; sb << " UINT dest,\n"; sb << " UINT value,\n"; sb << " out UINT original_value);\n"; -sb << " __intrinsic_op void InterlockedAdd(\n"; +sb << " void InterlockedAdd(\n"; sb << " UINT dest,\n"; sb << " UINT value);\n"; sb << "\n"; -sb << " __intrinsic_op void InterlockedAnd(\n"; +sb << " void InterlockedAnd(\n"; sb << " UINT dest,\n"; sb << " UINT value,\n"; sb << " out UINT original_value);\n"; -sb << " __intrinsic_op void InterlockedAnd(\n"; +sb << " void InterlockedAnd(\n"; sb << " UINT dest,\n"; sb << " UINT value);\n"; sb << "\n"; -sb << " __intrinsic_op void InterlockedCompareExchange(\n"; +sb << " void InterlockedCompareExchange(\n"; sb << " UINT dest,\n"; sb << " UINT compare_value,\n"; sb << " UINT value,\n"; sb << " out UINT original_value);\n"; -sb << " __intrinsic_op void InterlockedCompareExchange(\n"; +sb << " void InterlockedCompareExchange(\n"; sb << " UINT dest,\n"; sb << " UINT compare_value,\n"; sb << " UINT value);\n"; sb << "\n"; -sb << " __intrinsic_op void InterlockedCompareStore(\n"; +sb << " void InterlockedCompareStore(\n"; sb << " UINT dest,\n"; sb << " UINT compare_value,\n"; sb << " UINT value);\n"; -sb << " __intrinsic_op void InterlockedCompareStore(\n"; +sb << " void InterlockedCompareStore(\n"; sb << " UINT dest,\n"; sb << " UINT compare_value);\n"; sb << "\n"; -sb << " __intrinsic_op void InterlockedExchange(\n"; +sb << " void InterlockedExchange(\n"; sb << " UINT dest,\n"; sb << " UINT value,\n"; sb << " out UINT original_value);\n"; -sb << " __intrinsic_op void InterlockedExchange(\n"; +sb << " void InterlockedExchange(\n"; sb << " UINT dest,\n"; sb << " UINT value);\n"; sb << "\n"; -sb << " __intrinsic_op void InterlockedMax(\n"; +sb << " void InterlockedMax(\n"; sb << " UINT dest,\n"; sb << " UINT value,\n"; sb << " out UINT original_value);\n"; -sb << " __intrinsic_op void InterlockedMax(\n"; +sb << " void InterlockedMax(\n"; sb << " UINT dest,\n"; sb << " UINT value);\n"; sb << "\n"; -sb << " __intrinsic_op void InterlockedMin(\n"; +sb << " void InterlockedMin(\n"; sb << " UINT dest,\n"; sb << " UINT value,\n"; sb << " out UINT original_value);\n"; -sb << " __intrinsic_op void InterlockedMin(\n"; +sb << " void InterlockedMin(\n"; sb << " UINT dest,\n"; sb << " UINT value);\n"; sb << "\n"; -sb << " __intrinsic_op void InterlockedOr(\n"; +sb << " void InterlockedOr(\n"; sb << " UINT dest,\n"; sb << " UINT value,\n"; sb << " out UINT original_value);\n"; -sb << " __intrinsic_op void InterlockedOr(\n"; +sb << " void InterlockedOr(\n"; sb << " UINT dest,\n"; sb << " UINT value);\n"; sb << "\n"; -sb << " __intrinsic_op void InterlockedXor(\n"; +sb << " void InterlockedXor(\n"; sb << " UINT dest,\n"; sb << " UINT value,\n"; sb << " out UINT original_value);\n"; -sb << " __intrinsic_op void InterlockedXor(\n"; +sb << " void InterlockedXor(\n"; sb << " UINT dest,\n"; sb << " UINT value);\n"; sb << "\n"; -sb << " __intrinsic_op void Store(\n"; +sb << " void Store(\n"; sb << " uint address,\n"; sb << " uint value);\n"; sb << "\n"; -sb << " __intrinsic_op void Store2(\n"; +sb << " void Store2(\n"; sb << " uint address,\n"; sb << " uint2 value);\n"; sb << "\n"; -sb << " __intrinsic_op void Store3(\n"; +sb << " void Store3(\n"; sb << " uint address,\n"; sb << " uint3 value);\n"; sb << "\n"; -sb << " __intrinsic_op void Store4(\n"; +sb << " void Store4(\n"; sb << " uint address,\n"; sb << " uint4 value);\n"; sb << "};\n"; @@ -190,18 +190,17 @@ sb << "__intrinsic_type("; sb << ")\n"; sb << "struct RWStructuredBuffer\n"; sb << "{\n"; -sb << " __intrinsic_op uint DecrementCounter();\n"; +sb << " uint DecrementCounter();\n"; sb << "\n"; -sb << " __intrinsic_op void GetDimensions(\n"; +sb << " void GetDimensions(\n"; sb << " out uint numStructs,\n"; sb << " out uint stride);\n"; sb << "\n"; -sb << " __intrinsic_op uint IncrementCounter();\n"; +sb << " uint IncrementCounter();\n"; sb << "\n"; -sb << " __intrinsic_op T Load(int location);\n"; -sb << " __intrinsic_op T Load(int location, out uint status);\n"; +sb << " T Load(int location);\n"; +sb << " T Load(int location, out uint status);\n"; sb << "\n"; -sb << "\t__intrinsic_op\n"; sb << "\t__subscript(uint index) -> T\n"; sb << "\t{\n"; sb << "\t\t__intrinsic_op(bufferLoad)\n"; @@ -233,99 +232,96 @@ sb << "\n"; sb << "// Note(tfoley): Trying to systematically add all the HLSL builtins\n"; sb << "\n"; sb << "// Try to terminate the current draw or dispatch call (HLSL SM 4.0)\n"; -sb << "__intrinsic_op void abort();\n"; +sb << "void abort();\n"; sb << "\n"; sb << "// Absolute value (HLSL SM 1.0)\n"; -sb << "__generic<T : __BuiltinSignedArithmeticType> __intrinsic_op T abs(T x);\n"; -sb << "__generic<T : __BuiltinSignedArithmeticType, let N : int> __intrinsic_op vector<T,N> abs(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinSignedArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> abs(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinSignedArithmeticType> T abs(T x);\n"; +sb << "__generic<T : __BuiltinSignedArithmeticType, let N : int> vector<T,N> abs(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinSignedArithmeticType, let N : int, let M : int> matrix<T,N,M> abs(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Inverse cosine (HLSL SM 1.0)\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T acos(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> acos(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> acos(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T acos(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> acos(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> acos(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Test if all components are non-zero (HLSL SM 1.0)\n"; -sb << "__generic<T : __BuiltinType> __intrinsic_op T all(T x);\n"; -sb << "__generic<T : __BuiltinType, let N : int> __intrinsic_op vector<T,N> all(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> all(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinType> T all(T x);\n"; +sb << "__generic<T : __BuiltinType, let N : int> vector<T,N> all(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> all(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Barrier for writes to all memory spaces (HLSL SM 5.0)\n"; -sb << "__intrinsic_op void AllMemoryBarrier();\n"; +sb << "void AllMemoryBarrier();\n"; sb << "\n"; sb << "// Thread-group sync and barrier for writes to all memory spaces (HLSL SM 5.0)\n"; -sb << "__intrinsic_op void AllMemoryBarrierWithGroupSync();\n"; +sb << "void AllMemoryBarrierWithGroupSync();\n"; sb << "\n"; sb << "// Test if any components is non-zero (HLSL SM 1.0)\n"; -sb << "__generic<T : __BuiltinType> __intrinsic_op T any(T x);\n"; -sb << "__generic<T : __BuiltinType, let N : int> __intrinsic_op vector<T,N> any(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> any(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinType> T any(T x);\n"; +sb << "__generic<T : __BuiltinType, let N : int> vector<T,N> any(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> any(matrix<T,N,M> x);\n"; sb << "\n"; sb << "\n"; sb << "// Reinterpret bits as a double (HLSL SM 5.0)\n"; -sb << "__intrinsic_op double asdouble(uint lowbits, uint highbits);\n"; +sb << "double asdouble(uint lowbits, uint highbits);\n"; sb << "\n"; sb << "// Reinterpret bits as a float (HLSL SM 4.0)\n"; -sb << "__intrinsic_op float asfloat( int x);\n"; -sb << "__intrinsic_op float asfloat(uint x);\n"; -sb << "__generic<let N : int> __intrinsic_op vector<float,N> asfloat(vector< int,N> x);\n"; -sb << "__generic<let N : int> __intrinsic_op vector<float,N> asfloat(vector<uint,N> x);\n"; -sb << "__generic<let N : int, let M : int> __intrinsic_op matrix<float,N,M> asfloat(matrix< int,N,M> x);\n"; -sb << "__generic<let N : int, let M : int> __intrinsic_op matrix<float,N,M> asfloat(matrix<uint,N,M> x);\n"; +sb << "float asfloat( int x);\n"; +sb << "float asfloat(uint x);\n"; +sb << "__generic<let N : int> vector<float,N> asfloat(vector< int,N> x);\n"; +sb << "__generic<let N : int> vector<float,N> asfloat(vector<uint,N> x);\n"; +sb << "__generic<let N : int, let M : int> matrix<float,N,M> asfloat(matrix< int,N,M> x);\n"; +sb << "__generic<let N : int, let M : int> matrix<float,N,M> asfloat(matrix<uint,N,M> x);\n"; sb << "\n"; sb << "\n"; sb << "// Inverse sine (HLSL SM 1.0)\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T asin(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> asin(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> asin(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T asin(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> asin(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> asin(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Reinterpret bits as an int (HLSL SM 4.0)\n"; -sb << "__intrinsic_op int asint(float x);\n"; -sb << "__intrinsic_op int asint(uint x);\n"; -sb << "__generic<let N : int> __intrinsic_op vector<int,N> asint(vector<float,N> x);\n"; -sb << "__generic<let N : int> __intrinsic_op vector<int,N> asint(vector<uint,N> x);\n"; -sb << "__generic<let N : int, let M : int> __intrinsic_op matrix<int,N,M> asint(matrix<float,N,M> x);\n"; -sb << "__generic<let N : int, let M : int> __intrinsic_op matrix<int,N,M> asint(matrix<uint,N,M> x);\n"; +sb << "int asint(float x);\n"; +sb << "int asint(uint x);\n"; +sb << "__generic<let N : int> vector<int,N> asint(vector<float,N> x);\n"; +sb << "__generic<let N : int> vector<int,N> asint(vector<uint,N> x);\n"; +sb << "__generic<let N : int, let M : int> matrix<int,N,M> asint(matrix<float,N,M> x);\n"; +sb << "__generic<let N : int, let M : int> matrix<int,N,M> asint(matrix<uint,N,M> x);\n"; sb << "\n"; sb << "// Reinterpret bits of double as a uint (HLSL SM 5.0)\n"; -sb << "__intrinsic_op void asuint(double value, out uint lowbits, out uint highbits);\n"; +sb << "void asuint(double value, out uint lowbits, out uint highbits);\n"; sb << "\n"; sb << "// Reinterpret bits as a uint (HLSL SM 4.0)\n"; -sb << "__intrinsic_op uint asuint(float x);\n"; -sb << "__intrinsic_op uint asuint(int x);\n"; -sb << "__generic<let N : int> __intrinsic_op vector<uint,N> asuint(vector<float,N> x);\n"; -sb << "__generic<let N : int> __intrinsic_op vector<uint,N> asuint(vector<int,N> x);\n"; -sb << "__generic<let N : int, let M : int> __intrinsic_op matrix<uint,N,M> asuint(matrix<float,N,M> x);\n"; -sb << "__generic<let N : int, let M : int> __intrinsic_op matrix<uint,N,M> asuint(matrix<int,N,M> x);\n"; +sb << "uint asuint(float x);\n"; +sb << "uint asuint(int x);\n"; +sb << "__generic<let N : int> vector<uint,N> asuint(vector<float,N> x);\n"; +sb << "__generic<let N : int> vector<uint,N> asuint(vector<int,N> x);\n"; +sb << "__generic<let N : int, let M : int> matrix<uint,N,M> asuint(matrix<float,N,M> x);\n"; +sb << "__generic<let N : int, let M : int> matrix<uint,N,M> asuint(matrix<int,N,M> x);\n"; sb << "\n"; sb << "// Inverse tangent (HLSL SM 1.0)\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T atan(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> atan(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> atan(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T atan(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> atan(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> atan(matrix<T,N,M> x);\n"; sb << "\n"; sb << "__generic<T : __BuiltinFloatingPointType>\n"; sb << "__target_intrinsic(glsl,\"atan($0,$1)\")\n"; -sb << "__intrinsic_op\n"; sb << "T atan2(T y, T x);\n"; sb << "\n"; sb << "__generic<T : __BuiltinFloatingPointType, let N : int>\n"; sb << "__target_intrinsic(glsl,\"atan($0,$1)\")\n"; -sb << "__intrinsic_op\n"; sb << "vector<T,N> atan2(vector<T,N> y, vector<T,N> x);\n"; sb << "\n"; sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int>\n"; sb << "__target_intrinsic(glsl,\"atan($0,$1)\")\n"; -sb << "__intrinsic_op\n"; sb << "matrix<T,N,M> atan2(matrix<T,N,M> y, matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Ceiling (HLSL SM 1.0)\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T ceil(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> ceil(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> ceil(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T ceil(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> ceil(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> ceil(matrix<T,N,M> x);\n"; sb << "\n"; sb << "\n"; sb << "// Check access status to tiled resource\n"; -sb << "__intrinsic_op bool CheckAccessFullyMapped(uint status);\n"; +sb << "bool CheckAccessFullyMapped(uint status);\n"; sb << "\n"; sb << "// Clamp (HLSL SM 1.0)\n"; sb << "__generic<T : __BuiltinArithmeticType> T clamp(T x, T min, T max);\n"; @@ -333,9 +329,9 @@ sb << "__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> clamp(vec sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> clamp(matrix<T,N,M> x, matrix<T,N,M> min, matrix<T,N,M> max);\n"; sb << "\n"; sb << "// Clip (discard) fragment conditionally\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op void clip(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op void clip(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op void clip(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> void clip(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> void clip(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> void clip(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Cosine\n"; sb << "__generic<T : __BuiltinFloatingPointType> T cos(T x);\n"; @@ -343,360 +339,348 @@ sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> cos(ve sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> cos(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Hyperbolic cosine\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T cosh(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> cosh(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> cosh(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T cosh(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> cosh(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> cosh(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Population count\n"; -sb << "__intrinsic_op uint countbits(uint value);\n"; +sb << "uint countbits(uint value);\n"; sb << "\n"; sb << "// Cross product\n"; -sb << "__generic<T : __BuiltinArithmeticType> __intrinsic_op vector<T,3> cross(vector<T,3> x, vector<T,3> y);\n"; +sb << "__generic<T : __BuiltinArithmeticType> vector<T,3> cross(vector<T,3> x, vector<T,3> y);\n"; sb << "\n"; sb << "// Convert encoded color\n"; -sb << "__intrinsic_op int4 D3DCOLORtoUBYTE4(float4 x);\n"; +sb << "int4 D3DCOLORtoUBYTE4(float4 x);\n"; sb << "\n"; sb << "// Partial-difference derivatives\n"; sb << "__generic<T : __BuiltinFloatingPointType>\n"; sb << "__target_intrinsic(glsl, dFdx)\n"; -sb << "__intrinsic_op\n"; sb << "T ddx(T x);\n"; +sb << "\n"; sb << "__generic<T : __BuiltinFloatingPointType, let N : int>\n"; sb << "__target_intrinsic(glsl, dFdx)\n"; -sb << "__intrinsic_op\n"; sb << "vector<T,N> ddx(vector<T,N> x);\n"; +sb << "\n"; sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int>\n"; sb << "__target_intrinsic(glsl, dFdx)\n"; -sb << "__intrinsic_op\n"; sb << "matrix<T,N,M> ddx(matrix<T,N,M> x);\n"; sb << "\n"; sb << "__generic<T : __BuiltinFloatingPointType>\n"; sb << "__glsl_extension(GL_ARB_derivative_control)\n"; sb << "__target_intrinsic(glsl, dFdxCoarse)\n"; -sb << "__intrinsic_op\n"; sb << "T ddx_coarse(T x);\n"; +sb << "\n"; sb << "__generic<T : __BuiltinFloatingPointType, let N : int>\n"; sb << "__glsl_extension(GL_ARB_derivative_control)\n"; sb << "__target_intrinsic(glsl, dFdxCoarse)\n"; -sb << "__intrinsic_op\n"; sb << "vector<T,N> ddx_coarse(vector<T,N> x);\n"; +sb << "\n"; sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int>\n"; sb << "__glsl_extension(GL_ARB_derivative_control)\n"; sb << "__target_intrinsic(glsl, dFdxCoarse)\n"; -sb << "__intrinsic_op\n"; sb << "matrix<T,N,M> ddx_coarse(matrix<T,N,M> x);\n"; sb << "\n"; sb << "__generic<T : __BuiltinFloatingPointType>\n"; sb << "__glsl_extension(GL_ARB_derivative_control)\n"; sb << "__target_intrinsic(glsl, dFdxFine)\n"; -sb << "__intrinsic_op\n"; sb << "T ddx_fine(T x);\n"; +sb << "\n"; sb << "__generic<T : __BuiltinFloatingPointType, let N : int>\n"; sb << "__glsl_extension(GL_ARB_derivative_control)\n"; sb << "__target_intrinsic(glsl, dFdxFine)\n"; -sb << "__intrinsic_op\n"; sb << "vector<T,N> ddx_fine(vector<T,N> x);\n"; +sb << "\n"; sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int>\n"; sb << "__glsl_extension(GL_ARB_derivative_control)\n"; sb << "__target_intrinsic(glsl, dFdxFine)\n"; -sb << "__intrinsic_op\n"; sb << "matrix<T,N,M> ddx_fine(matrix<T,N,M> x);\n"; sb << "\n"; sb << "__generic<T : __BuiltinFloatingPointType>\n"; sb << "__target_intrinsic(glsl, dFdy)\n"; -sb << "__intrinsic_op\n"; sb << "T ddy(T x);\n"; +sb << "\n"; sb << "__generic<T : __BuiltinFloatingPointType, let N : int>\n"; sb << "__target_intrinsic(glsl, dFdy)\n"; -sb << "__intrinsic_op\n"; sb << "vector<T,N> ddy(vector<T,N> x);\n"; +sb << "\n"; sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int>\n"; sb << "__target_intrinsic(glsl, dFdy)\n"; -sb << "__intrinsic_op\n"; sb << " matrix<T,N,M> ddy(matrix<T,N,M> x);\n"; sb << "\n"; sb << "__generic<T : __BuiltinFloatingPointType>\n"; sb << "__glsl_extension(GL_ARB_derivative_control)\n"; sb << "__target_intrinsic(glsl, dFdyCoarse)\n"; -sb << "__intrinsic_op\n"; sb << "T ddy_coarse(T x);\n"; +sb << "\n"; sb << "__generic<T : __BuiltinFloatingPointType, let N : int>\n"; sb << "__glsl_extension(GL_ARB_derivative_control)\n"; sb << "__target_intrinsic(glsl, dFdyCoarse)\n"; -sb << "__intrinsic_op\n"; sb << "vector<T,N> ddy_coarse(vector<T,N> x);\n"; +sb << "\n"; sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int>\n"; sb << "__glsl_extension(GL_ARB_derivative_control)\n"; sb << "__target_intrinsic(glsl, dFdyCoarse)\n"; -sb << "__intrinsic_op\n"; sb << "matrix<T,N,M> ddy_coarse(matrix<T,N,M> x);\n"; sb << "\n"; sb << "__generic<T : __BuiltinFloatingPointType>\n"; sb << "__glsl_extension(GL_ARB_derivative_control)\n"; sb << "__target_intrinsic(glsl, dFdyFine)\n"; -sb << "__intrinsic_op\n"; sb << "T ddy_fine(T x);\n"; +sb << "\n"; sb << "__generic<T : __BuiltinFloatingPointType, let N : int>\n"; sb << "__glsl_extension(GL_ARB_derivative_control)\n"; sb << "__target_intrinsic(glsl, dFdyFine)\n"; -sb << "__intrinsic_op\n"; sb << "vector<T,N> ddy_fine(vector<T,N> x);\n"; +sb << "\n"; sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int>\n"; sb << "__glsl_extension(GL_ARB_derivative_control)\n"; sb << "__target_intrinsic(glsl, dFdyFine)\n"; -sb << "__intrinsic_op\n"; sb << "matrix<T,N,M> ddy_fine(matrix<T,N,M> x);\n"; sb << "\n"; sb << "\n"; sb << "// Radians to degrees\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T degrees(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> degrees(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> degrees(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T degrees(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> degrees(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> degrees(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Matrix determinant\n"; sb << "\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op T determinant(matrix<T,N,N> m);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> T determinant(matrix<T,N,N> m);\n"; sb << "\n"; sb << "// Barrier for device memory\n"; -sb << "__intrinsic_op void DeviceMemoryBarrier();\n"; -sb << "__intrinsic_op void DeviceMemoryBarrierWithGroupSync();\n"; +sb << "void DeviceMemoryBarrier();\n"; +sb << "void DeviceMemoryBarrierWithGroupSync();\n"; sb << "\n"; sb << "// Vector distance\n"; sb << "\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op T distance(vector<T,N> x, vector<T,N> y);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> T distance(vector<T,N> x, vector<T,N> y);\n"; sb << "\n"; sb << "// Vector dot product\n"; sb << "\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op T dot(vector<T,N> x, vector<T,N> y);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int> T dot(vector<T,N> x, vector<T,N> y);\n"; sb << "\n"; sb << "// Helper for computing distance terms for lighting (obsolete)\n"; sb << "\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op vector<T,4> dst(vector<T,4> x, vector<T,4> y);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> vector<T,4> dst(vector<T,4> x, vector<T,4> y);\n"; sb << "\n"; sb << "// Error message\n"; sb << "\n"; -sb << "// __intrinsic_op void errorf( string format, ... );\n"; +sb << "// void errorf( string format, ... );\n"; sb << "\n"; sb << "// Attribute evaluation\n"; sb << "\n"; -sb << "__generic<T : __BuiltinArithmeticType> __intrinsic_op T EvaluateAttributeAtCentroid(T x);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> EvaluateAttributeAtCentroid(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> EvaluateAttributeAtCentroid(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinArithmeticType> T EvaluateAttributeAtCentroid(T x);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> EvaluateAttributeAtCentroid(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> EvaluateAttributeAtCentroid(matrix<T,N,M> x);\n"; sb << "\n"; -sb << "__generic<T : __BuiltinArithmeticType> __intrinsic_op T EvaluateAttributeAtSample(T x, uint sampleindex);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> EvaluateAttributeAtSample(vector<T,N> x, uint sampleindex);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> EvaluateAttributeAtSample(matrix<T,N,M> x, uint sampleindex);\n"; +sb << "__generic<T : __BuiltinArithmeticType> T EvaluateAttributeAtSample(T x, uint sampleindex);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> EvaluateAttributeAtSample(vector<T,N> x, uint sampleindex);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> EvaluateAttributeAtSample(matrix<T,N,M> x, uint sampleindex);\n"; sb << "\n"; -sb << "__generic<T : __BuiltinArithmeticType> __intrinsic_op T EvaluateAttributeSnapped(T x, int2 offset);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> EvaluateAttributeSnapped(vector<T,N> x, int2 offset);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> EvaluateAttributeSnapped(matrix<T,N,M> x, int2 offset);\n"; +sb << "__generic<T : __BuiltinArithmeticType> T EvaluateAttributeSnapped(T x, int2 offset);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> EvaluateAttributeSnapped(vector<T,N> x, int2 offset);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> EvaluateAttributeSnapped(matrix<T,N,M> x, int2 offset);\n"; sb << "\n"; sb << "// Base-e exponent\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T exp(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> exp(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> exp(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T exp(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> exp(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> exp(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Base-2 exponent\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T exp2(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> exp2(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> exp2(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T exp2(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> exp2(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> exp2(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Convert 16-bit float stored in low bits of integer\n"; -sb << "__intrinsic_op float f16tof32(uint value);\n"; -sb << "__generic<let N : int> __intrinsic_op vector<float,N> f16tof32(vector<uint,N> value);\n"; +sb << "float f16tof32(uint value);\n"; +sb << "__generic<let N : int> vector<float,N> f16tof32(vector<uint,N> value);\n"; sb << "\n"; sb << "// Convert to 16-bit float stored in low bits of integer\n"; -sb << "__intrinsic_op uint f32tof16(float value);\n"; -sb << "__generic<let N : int> __intrinsic_op vector<uint,N> f32tof16(vector<float,N> value);\n"; +sb << "uint f32tof16(float value);\n"; +sb << "__generic<let N : int> vector<uint,N> f32tof16(vector<float,N> value);\n"; sb << "\n"; sb << "// Flip surface normal to face forward, if needed\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> faceforward(vector<T,N> n, vector<T,N> i, vector<T,N> ng);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> faceforward(vector<T,N> n, vector<T,N> i, vector<T,N> ng);\n"; sb << "\n"; sb << "// Find first set bit starting at high bit and working down\n"; -sb << "__intrinsic_op int firstbithigh(int value);\n"; -sb << "__generic<let N : int> __intrinsic_op vector<int,N> firstbithigh(vector<int,N> value);\n"; +sb << "int firstbithigh(int value);\n"; +sb << "__generic<let N : int> vector<int,N> firstbithigh(vector<int,N> value);\n"; sb << "\n"; -sb << "__intrinsic_op uint firstbithigh(uint value);\n"; -sb << "__generic<let N : int> __intrinsic_op vector<uint,N> firstbithigh(vector<uint,N> value);\n"; +sb << "uint firstbithigh(uint value);\n"; +sb << "__generic<let N : int> vector<uint,N> firstbithigh(vector<uint,N> value);\n"; sb << "\n"; sb << "// Find first set bit starting at low bit and working up\n"; -sb << "__intrinsic_op int firstbitlow(int value);\n"; -sb << "__generic<let N : int> __intrinsic_op vector<int,N> firstbitlow(vector<int,N> value);\n"; +sb << "int firstbitlow(int value);\n"; +sb << "__generic<let N : int> vector<int,N> firstbitlow(vector<int,N> value);\n"; sb << "\n"; -sb << "__intrinsic_op uint firstbitlow(uint value);\n"; -sb << "__generic<let N : int> __intrinsic_op vector<uint,N> firstbitlow(vector<uint,N> value);\n"; +sb << "uint firstbitlow(uint value);\n"; +sb << "__generic<let N : int> vector<uint,N> firstbitlow(vector<uint,N> value);\n"; sb << "\n"; sb << "// Floor (HLSL SM 1.0)\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T floor(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> floor(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> floor(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T floor(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> floor(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> floor(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Fused multiply-add for doubles\n"; -sb << "__intrinsic_op double fma(double a, double b, double c);\n"; -sb << "__generic<let N : int> __intrinsic_op vector<double, N> fma(vector<double, N> a, vector<double, N> b, vector<double, N> c);\n"; -sb << "__generic<let N : int, let M : int> __intrinsic_op matrix<double,N,M> fma(matrix<double,N,M> a, matrix<double,N,M> b, matrix<double,N,M> c);\n"; +sb << "double fma(double a, double b, double c);\n"; +sb << "__generic<let N : int> vector<double, N> fma(vector<double, N> a, vector<double, N> b, vector<double, N> c);\n"; +sb << "__generic<let N : int, let M : int> matrix<double,N,M> fma(matrix<double,N,M> a, matrix<double,N,M> b, matrix<double,N,M> c);\n"; sb << "\n"; sb << "// Floating point remainder of x/y\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T fmod(T x, T y);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> fmod(vector<T,N> x, vector<T,N> y);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> fmod(matrix<T,N,M> x, matrix<T,N,M> y);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T fmod(T x, T y);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> fmod(vector<T,N> x, vector<T,N> y);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> fmod(matrix<T,N,M> x, matrix<T,N,M> y);\n"; sb << "\n"; sb << "// Fractional part\n"; sb << "__generic<T : __BuiltinFloatingPointType>\n"; sb << "__target_intrinsic(glsl, fract)\n"; -sb << "__intrinsic_op\n"; sb << "T frac(T x);\n"; sb << "\n"; sb << "__generic<T : __BuiltinFloatingPointType, let N : int>\n"; sb << "__target_intrinsic(glsl, fract)\n"; -sb << "__intrinsic_op\n"; sb << "vector<T,N> frac(vector<T,N> x);\n"; sb << "\n"; sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int>\n"; sb << "__target_intrinsic(glsl, fract)\n"; -sb << "__intrinsic_op\n"; sb << "matrix<T,N,M> frac(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Split float into mantissa and exponent\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T frexp(T x, out T exp);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> frexp(vector<T,N> x, out vector<T,N> exp);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> frexp(matrix<T,N,M> x, out matrix<T,N,M> exp);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T frexp(T x, out T exp);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> frexp(vector<T,N> x, out vector<T,N> exp);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> frexp(matrix<T,N,M> x, out matrix<T,N,M> exp);\n"; sb << "\n"; sb << "// Texture filter width\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T fwidth(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> fwidth(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> fwidth(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T fwidth(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> fwidth(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> fwidth(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Get number of samples in render target\n"; -sb << "__intrinsic_op uint GetRenderTargetSampleCount();\n"; +sb << "uint GetRenderTargetSampleCount();\n"; sb << "\n"; sb << "// Get position of given sample\n"; -sb << "__intrinsic_op float2 GetRenderTargetSamplePosition(int Index);\n"; +sb << "float2 GetRenderTargetSamplePosition(int Index);\n"; sb << "\n"; sb << "// Group memory barrier\n"; -sb << "__intrinsic_op void GroupMemoryBarrier();\n"; -sb << "__intrinsic_op void GroupMemoryBarrierWithGroupSync();\n"; +sb << "void GroupMemoryBarrier();\n"; +sb << "void GroupMemoryBarrierWithGroupSync();\n"; sb << "\n"; sb << "// Atomics\n"; -sb << "__intrinsic_op void InterlockedAdd(in out int dest, int value, out int original_value);\n"; -sb << "__intrinsic_op void InterlockedAdd(in out uint dest, uint value, out uint original_value);\n"; +sb << "void InterlockedAdd(in out int dest, int value, out int original_value);\n"; +sb << "void InterlockedAdd(in out uint dest, uint value, out uint original_value);\n"; sb << "\n"; -sb << "__intrinsic_op void InterlockedAnd(in out int dest, int value, out int original_value);\n"; -sb << "__intrinsic_op void InterlockedAnd(in out uint dest, uint value, out uint original_value);\n"; +sb << "void InterlockedAnd(in out int dest, int value, out int original_value);\n"; +sb << "void InterlockedAnd(in out uint dest, uint value, out uint original_value);\n"; sb << "\n"; -sb << "__intrinsic_op void InterlockedCompareExchange(in out int dest, int compare_value, int value, out int original_value);\n"; -sb << "__intrinsic_op void InterlockedCompareExchange(in out uint dest, uint compare_value, uint value, out uint original_value);\n"; +sb << "void InterlockedCompareExchange(in out int dest, int compare_value, int value, out int original_value);\n"; +sb << "void InterlockedCompareExchange(in out uint dest, uint compare_value, uint value, out uint original_value);\n"; sb << "\n"; -sb << "__intrinsic_op void InterlockedCompareStore(in out int dest, int compare_value, int value);\n"; -sb << "__intrinsic_op void InterlockedCompareStore(in out uint dest, uint compare_value, uint value);\n"; +sb << "void InterlockedCompareStore(in out int dest, int compare_value, int value);\n"; +sb << "void InterlockedCompareStore(in out uint dest, uint compare_value, uint value);\n"; sb << "\n"; -sb << "__intrinsic_op void InterlockedExchange(in out int dest, int value, out int original_value);\n"; -sb << "__intrinsic_op void InterlockedExchange(in out uint dest, uint value, out uint original_value);\n"; +sb << "void InterlockedExchange(in out int dest, int value, out int original_value);\n"; +sb << "void InterlockedExchange(in out uint dest, uint value, out uint original_value);\n"; sb << "\n"; -sb << "__intrinsic_op void InterlockedMax(in out int dest, int value, out int original_value);\n"; -sb << "__intrinsic_op void InterlockedMax(in out uint dest, uint value, out uint original_value);\n"; +sb << "void InterlockedMax(in out int dest, int value, out int original_value);\n"; +sb << "void InterlockedMax(in out uint dest, uint value, out uint original_value);\n"; sb << "\n"; -sb << "__intrinsic_op void InterlockedMin(in out int dest, int value, out int original_value);\n"; -sb << "__intrinsic_op void InterlockedMin(in out uint dest, uint value, out uint original_value);\n"; +sb << "void InterlockedMin(in out int dest, int value, out int original_value);\n"; +sb << "void InterlockedMin(in out uint dest, uint value, out uint original_value);\n"; sb << "\n"; -sb << "__intrinsic_op void InterlockedOr(in out int dest, int value, out int original_value);\n"; -sb << "__intrinsic_op void InterlockedOr(in out uint dest, uint value, out uint original_value);\n"; +sb << "void InterlockedOr(in out int dest, int value, out int original_value);\n"; +sb << "void InterlockedOr(in out uint dest, uint value, out uint original_value);\n"; sb << "\n"; -sb << "__intrinsic_op void InterlockedXor(in out int dest, int value, out int original_value);\n"; -sb << "__intrinsic_op void InterlockedXor(in out uint dest, uint value, out uint original_value);\n"; +sb << "void InterlockedXor(in out int dest, int value, out int original_value);\n"; +sb << "void InterlockedXor(in out uint dest, uint value, out uint original_value);\n"; sb << "\n"; sb << "// Is floating-point value finite?\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op bool isfinite(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<bool,N> isfinite(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<bool,N,M> isfinite(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> bool isfinite(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<bool,N> isfinite(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<bool,N,M> isfinite(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Is floating-point value infinite?\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op bool isinf(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<bool,N> isinf(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<bool,N,M> isinf(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> bool isinf(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<bool,N> isinf(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<bool,N,M> isinf(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Is floating-point value not-a-number?\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op bool isnan(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<bool,N> isnan(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<bool,N,M> isnan(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> bool isnan(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<bool,N> isnan(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<bool,N,M> isnan(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Construct float from mantissa and exponent\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T ldexp(T x, T exp);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> ldexp(vector<T,N> x, vector<T,N> exp);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> ldexp(matrix<T,N,M> x, matrix<T,N,M> exp);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T ldexp(T x, T exp);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> ldexp(vector<T,N> x, vector<T,N> exp);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> ldexp(matrix<T,N,M> x, matrix<T,N,M> exp);\n"; sb << "\n"; sb << "// Vector length\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op T length(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> T length(vector<T,N> x);\n"; sb << "\n"; sb << "// Linear interpolation\n"; sb << "__generic<T : __BuiltinFloatingPointType>\n"; sb << "__target_intrinsic(glsl, mix)\n"; -sb << "__intrinsic_op\n"; sb << "T lerp(T x, T y, T s);\n"; sb << "\n"; sb << "__generic<T : __BuiltinFloatingPointType, let N : int>\n"; sb << "__target_intrinsic(glsl, mix)\n"; -sb << "__intrinsic_op\n"; sb << "vector<T,N> lerp(vector<T,N> x, vector<T,N> y, vector<T,N> s);\n"; sb << "\n"; sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int>\n"; sb << "__target_intrinsic(glsl, mix)\n"; -sb << "__intrinsic_op\n"; sb << "matrix<T,N,M> lerp(matrix<T,N,M> x, matrix<T,N,M> y, matrix<T,N,M> s);\n"; sb << "\n"; sb << "// Legacy lighting function (obsolete)\n"; -sb << "__intrinsic_op float4 lit(float n_dot_l, float n_dot_h, float m);\n"; +sb << "float4 lit(float n_dot_l, float n_dot_h, float m);\n"; sb << "\n"; sb << "// Base-e logarithm\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T log(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> log(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> log(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T log(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> log(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> log(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Base-10 logarithm\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T log10(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> log10(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> log10(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T log10(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> log10(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> log10(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Base-2 logarithm\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T log2(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> log2(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> log2(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T log2(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> log2(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> log2(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// multiply-add\n"; -sb << "__generic<T : __BuiltinArithmeticType> __intrinsic_op T mad(T mvalue, T avalue, T bvalue);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> mad(vector<T,N> mvalue, vector<T,N> avalue, vector<T,N> bvalue);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> mad(matrix<T,N,M> mvalue, matrix<T,N,M> avalue, matrix<T,N,M> bvalue);\n"; +sb << "__generic<T : __BuiltinArithmeticType> T mad(T mvalue, T avalue, T bvalue);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> mad(vector<T,N> mvalue, vector<T,N> avalue, vector<T,N> bvalue);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> mad(matrix<T,N,M> mvalue, matrix<T,N,M> avalue, matrix<T,N,M> bvalue);\n"; sb << "\n"; sb << "// maximum\n"; -sb << "__generic<T : __BuiltinArithmeticType> __intrinsic_op T max(T x, T y);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> max(vector<T,N> x, vector<T,N> y);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> max(matrix<T,N,M> x, matrix<T,N,M> y);\n"; +sb << "__generic<T : __BuiltinArithmeticType> T max(T x, T y);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> max(vector<T,N> x, vector<T,N> y);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> max(matrix<T,N,M> x, matrix<T,N,M> y);\n"; sb << "\n"; sb << "// minimum\n"; -sb << "__generic<T : __BuiltinArithmeticType> __intrinsic_op T min(T x, T y);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> min(vector<T,N> x, vector<T,N> y);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> min(matrix<T,N,M> x, matrix<T,N,M> y);\n"; +sb << "__generic<T : __BuiltinArithmeticType> T min(T x, T y);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> min(vector<T,N> x, vector<T,N> y);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> min(matrix<T,N,M> x, matrix<T,N,M> y);\n"; sb << "\n"; sb << "// split into integer and fractional parts (both with same sign)\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T modf(T x, out T ip);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> modf(vector<T,N> x, out vector<T,N> ip);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> modf(matrix<T,N,M> x, out matrix<T,N,M> ip);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T modf(T x, out T ip);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> modf(vector<T,N> x, out vector<T,N> ip);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> modf(matrix<T,N,M> x, out matrix<T,N,M> ip);\n"; sb << "\n"; sb << "// msad4 (whatever that is)\n"; -sb << "__intrinsic_op uint4 msad4(uint reference, uint2 source, uint4 accum);\n"; +sb << "uint4 msad4(uint reference, uint2 source, uint4 accum);\n"; sb << "\n"; sb << "// General inner products\n"; sb << "\n"; sb << "// scalar-scalar\n"; -sb << "__generic<T : __BuiltinArithmeticType> __intrinsic_op T mul(T x, T y);\n"; +sb << "__generic<T : __BuiltinArithmeticType> T mul(T x, T y);\n"; sb << "\n"; sb << "// scalar-vector and vector-scalar\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> mul(vector<T,N> x, T y);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> mul(T x, vector<T,N> y);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> mul(vector<T,N> x, T y);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> mul(T x, vector<T,N> y);\n"; sb << "\n"; sb << "// scalar-matrix and matrix-scalar\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M :int> __intrinsic_op matrix<T,N,M> mul(matrix<T,N,M> x, T y);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M :int> __intrinsic_op matrix<T,N,M> mul(T x, matrix<T,N,M> y);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M :int> matrix<T,N,M> mul(matrix<T,N,M> x, T y);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M :int> matrix<T,N,M> mul(T x, matrix<T,N,M> y);\n"; sb << "\n"; sb << "// vector-vector (dot product)\n"; sb << "__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op(dot) T mul(vector<T,N> x, vector<T,N> y);\n"; @@ -711,86 +695,86 @@ sb << "// matrix-matrix\n"; sb << "__generic<T : __BuiltinArithmeticType, let R : int, let N : int, let C : int> __intrinsic_op(mulMatrixMatrix) matrix<T,R,C> mul(matrix<T,R,N> x, matrix<T,N,C> y);\n"; sb << "\n"; sb << "// noise (deprecated)\n"; -sb << "__intrinsic_op float noise(float x);\n"; -sb << "__generic<let N : int> __intrinsic_op float noise(vector<float, N> x);\n"; +sb << "float noise(float x);\n"; +sb << "__generic<let N : int> float noise(vector<float, N> x);\n"; sb << "\n"; sb << "// Normalize a vector\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> normalize(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> normalize(vector<T,N> x);\n"; sb << "\n"; sb << "// Raise to a power\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T pow(T x, T y);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> pow(vector<T,N> x, vector<T,N> y);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> pow(matrix<T,N,M> x, matrix<T,N,M> y);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T pow(T x, T y);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> pow(vector<T,N> x, vector<T,N> y);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> pow(matrix<T,N,M> x, matrix<T,N,M> y);\n"; sb << "\n"; sb << "// Output message\n"; sb << "\n"; -sb << "// __intrinsic_op void printf( string format, ... );\n"; +sb << "// void printf( string format, ... );\n"; sb << "\n"; sb << "// Tessellation factor fixup routines\n"; sb << "\n"; -sb << "__intrinsic_op void Process2DQuadTessFactorsAvg(\n"; +sb << "void Process2DQuadTessFactorsAvg(\n"; sb << " in float4 RawEdgeFactors,\n"; sb << " in float2 InsideScale,\n"; sb << " out float4 RoundedEdgeTessFactors,\n"; sb << " out float2 RoundedInsideTessFactors,\n"; sb << " out float2 UnroundedInsideTessFactors);\n"; sb << "\n"; -sb << "__intrinsic_op void Process2DQuadTessFactorsMax(\n"; +sb << "void Process2DQuadTessFactorsMax(\n"; sb << " in float4 RawEdgeFactors,\n"; sb << " in float2 InsideScale,\n"; sb << " out float4 RoundedEdgeTessFactors,\n"; sb << " out float2 RoundedInsideTessFactors,\n"; sb << " out float2 UnroundedInsideTessFactors);\n"; sb << "\n"; -sb << "__intrinsic_op void Process2DQuadTessFactorsMin(\n"; +sb << "void Process2DQuadTessFactorsMin(\n"; sb << " in float4 RawEdgeFactors,\n"; sb << " in float2 InsideScale,\n"; sb << " out float4 RoundedEdgeTessFactors,\n"; sb << " out float2 RoundedInsideTessFactors,\n"; sb << " out float2 UnroundedInsideTessFactors);\n"; sb << "\n"; -sb << "__intrinsic_op void ProcessIsolineTessFactors(\n"; +sb << "void ProcessIsolineTessFactors(\n"; sb << " in float RawDetailFactor,\n"; sb << " in float RawDensityFactor,\n"; sb << " out float RoundedDetailFactor,\n"; sb << " out float RoundedDensityFactor);\n"; sb << "\n"; -sb << "__intrinsic_op void ProcessQuadTessFactorsAvg(\n"; +sb << "void ProcessQuadTessFactorsAvg(\n"; sb << " in float4 RawEdgeFactors,\n"; sb << " in float InsideScale,\n"; sb << " out float4 RoundedEdgeTessFactors,\n"; sb << " out float2 RoundedInsideTessFactors,\n"; sb << " out float2 UnroundedInsideTessFactors);\n"; sb << "\n"; -sb << "__intrinsic_op void ProcessQuadTessFactorsMax(\n"; +sb << "void ProcessQuadTessFactorsMax(\n"; sb << " in float4 RawEdgeFactors,\n"; sb << " in float InsideScale,\n"; sb << " out float4 RoundedEdgeTessFactors,\n"; sb << " out float2 RoundedInsideTessFactors,\n"; sb << " out float2 UnroundedInsideTessFactors);\n"; sb << "\n"; -sb << "__intrinsic_op void ProcessQuadTessFactorsMin(\n"; +sb << "void ProcessQuadTessFactorsMin(\n"; sb << " in float4 RawEdgeFactors,\n"; sb << " in float InsideScale,\n"; sb << " out float4 RoundedEdgeTessFactors,\n"; sb << " out float2 RoundedInsideTessFactors,\n"; sb << " out float2 UnroundedInsideTessFactors);\n"; sb << "\n"; -sb << "__intrinsic_op void ProcessTriTessFactorsAvg(\n"; +sb << "void ProcessTriTessFactorsAvg(\n"; sb << " in float3 RawEdgeFactors,\n"; sb << " in float InsideScale,\n"; sb << " out float3 RoundedEdgeTessFactors,\n"; sb << " out float RoundedInsideTessFactor,\n"; sb << " out float UnroundedInsideTessFactor);\n"; sb << "\n"; -sb << "__intrinsic_op void ProcessTriTessFactorsMax(\n"; +sb << "void ProcessTriTessFactorsMax(\n"; sb << " in float3 RawEdgeFactors,\n"; sb << " in float InsideScale,\n"; sb << " out float3 RoundedEdgeTessFactors,\n"; sb << " out float RoundedInsideTessFactor,\n"; sb << " out float UnroundedInsideTessFactor);\n"; sb << "\n"; -sb << "__intrinsic_op void ProcessTriTessFactorsMin(\n"; +sb << "void ProcessTriTessFactorsMin(\n"; sb << " in float3 RawEdgeFactors,\n"; sb << " in float InsideScale,\n"; sb << " out float3 RoundedEdgeTessFactors,\n"; @@ -798,38 +782,36 @@ sb << " out float RoundedInsideTessFactors,\n"; sb << " out float UnroundedInsideTessFactors);\n"; sb << "\n"; sb << "// Degrees to radians\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T radians(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> radians(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> radians(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T radians(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> radians(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> radians(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Approximate reciprocal\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T rcp(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> rcp(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> rcp(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T rcp(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> rcp(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> rcp(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Reflect incident vector across plane with given normal\n"; sb << "__generic<T : __BuiltinFloatingPointType, let N : int>\n"; -sb << "__intrinsic_op\n"; sb << "vector<T,N> reflect(vector<T,N> i, vector<T,N> n);\n"; sb << "\n"; sb << "// Refract incident vector given surface normal and index of refraction\n"; sb << "__generic<T : __BuiltinFloatingPointType, let N : int>\n"; -sb << "__intrinsic_op\n"; sb << "vector<T,N> refract(vector<T,N> i, vector<T,N> n, float eta);\n"; sb << "\n"; sb << "// Reverse order of bits\n"; -sb << "__intrinsic_op uint reversebits(uint value);\n"; +sb << "uint reversebits(uint value);\n"; sb << "__generic<let N : int> vector<uint,N> reversebits(vector<uint,N> value);\n"; sb << "\n"; sb << "// Round-to-nearest\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T round(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> round(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> round(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T round(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> round(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> round(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Reciprocal of square root\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T rsqrt(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> rsqrt(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> rsqrt(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T rsqrt(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> rsqrt(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> rsqrt(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Clamp value to [0,1] range\n"; sb << "__generic<T : __BuiltinFloatingPointType>\n"; @@ -877,9 +859,9 @@ sb << "}\n"; sb << "\n"; sb << "\n"; sb << "// Extract sign of value\n"; -sb << "__generic<T : __BuiltinSignedArithmeticType> __intrinsic_op int sign(T x);\n"; -sb << "__generic<T : __BuiltinSignedArithmeticType, let N : int> __intrinsic_op vector<int,N> sign(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinSignedArithmeticType, let N : int, let M : int> __intrinsic_op matrix<int,N,M> sign(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinSignedArithmeticType> int sign(T x);\n"; +sb << "__generic<T : __BuiltinSignedArithmeticType, let N : int> vector<int,N> sign(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinSignedArithmeticType, let N : int, let M : int> matrix<int,N,M> sign(matrix<T,N,M> x);\n"; sb << "\n"; sb << "\n"; sb << "// Sine\n"; @@ -888,127 +870,127 @@ sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> sin(ve sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> sin(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Sine and cosine\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op void sincos(T x, out T s, out T c);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op void sincos(vector<T,N> x, out vector<T,N> s, out vector<T,N> c);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op void sincos(matrix<T,N,M> x, out matrix<T,N,M> s, out matrix<T,N,M> c);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> void sincos(T x, out T s, out T c);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> void sincos(vector<T,N> x, out vector<T,N> s, out vector<T,N> c);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> void sincos(matrix<T,N,M> x, out matrix<T,N,M> s, out matrix<T,N,M> c);\n"; sb << "\n"; sb << "// Hyperbolic Sine\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T sinh(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> sinh(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> sinh(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T sinh(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> sinh(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> sinh(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Smooth step (Hermite interpolation)\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T smoothstep(T min, T max, T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> smoothstep(vector<T,N> min, vector<T,N> max, vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> smoothstep(matrix<T,N,M> min, matrix<T,N,M> max, matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T smoothstep(T min, T max, T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> smoothstep(vector<T,N> min, vector<T,N> max, vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> smoothstep(matrix<T,N,M> min, matrix<T,N,M> max, matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Square root\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T sqrt(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> sqrt(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> sqrt(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T sqrt(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> sqrt(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> sqrt(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Step function\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T step(T y, T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> step(vector<T,N> y, vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> step(matrix<T,N,M> y, matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T step(T y, T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> step(vector<T,N> y, vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> step(matrix<T,N,M> y, matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Tangent\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T tan(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> tan(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> tan(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T tan(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> tan(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> tan(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Hyperbolic tangent\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T tanh(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> tanh(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> tanh(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T tanh(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> tanh(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> tanh(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Legacy texture-fetch operations\n"; sb << "\n"; sb << "/*\n"; -sb << "__intrinsic_op float4 tex1D(sampler1D s, float t);\n"; -sb << "__intrinsic_op float4 tex1D(sampler1D s, float t, float ddx, float ddy);\n"; -sb << "__intrinsic_op float4 tex1Dbias(sampler1D s, float4 t);\n"; -sb << "__intrinsic_op float4 tex1Dgrad(sampler1D s, float t, float ddx, float ddy);\n"; -sb << "__intrinsic_op float4 tex1Dlod(sampler1D s, float4 t);\n"; -sb << "__intrinsic_op float4 tex1Dproj(sampler1D s, float4 t);\n"; -sb << "\n"; -sb << "__intrinsic_op float4 tex2D(sampler2D s, float2 t);\n"; -sb << "__intrinsic_op float4 tex2D(sampler2D s, float2 t, float2 ddx, float2 ddy);\n"; -sb << "__intrinsic_op float4 tex2Dbias(sampler2D s, float4 t);\n"; -sb << "__intrinsic_op float4 tex2Dgrad(sampler2D s, float2 t, float2 ddx, float2 ddy);\n"; -sb << "__intrinsic_op float4 tex2Dlod(sampler2D s, float4 t);\n"; -sb << "__intrinsic_op float4 tex2Dproj(sampler2D s, float4 t);\n"; -sb << "\n"; -sb << "__intrinsic_op float4 tex3D(sampler3D s, float3 t);\n"; -sb << "__intrinsic_op float4 tex3D(sampler3D s, float3 t, float3 ddx, float3 ddy);\n"; -sb << "__intrinsic_op float4 tex3Dbias(sampler3D s, float4 t);\n"; -sb << "__intrinsic_op float4 tex3Dgrad(sampler3D s, float3 t, float3 ddx, float3 ddy);\n"; -sb << "__intrinsic_op float4 tex3Dlod(sampler3D s, float4 t);\n"; -sb << "__intrinsic_op float4 tex3Dproj(sampler3D s, float4 t);\n"; -sb << "\n"; -sb << "__intrinsic_op float4 texCUBE(samplerCUBE s, float3 t);\n"; -sb << "__intrinsic_op float4 texCUBE(samplerCUBE s, float3 t, float3 ddx, float3 ddy);\n"; -sb << "__intrinsic_op float4 texCUBEbias(samplerCUBE s, float4 t);\n"; -sb << "__intrinsic_op float4 texCUBEgrad(samplerCUBE s, float3 t, float3 ddx, float3 ddy);\n"; -sb << "__intrinsic_op float4 texCUBElod(samplerCUBE s, float4 t);\n"; -sb << "__intrinsic_op float4 texCUBEproj(samplerCUBE s, float4 t);\n"; +sb << "float4 tex1D(sampler1D s, float t);\n"; +sb << "float4 tex1D(sampler1D s, float t, float ddx, float ddy);\n"; +sb << "float4 tex1Dbias(sampler1D s, float4 t);\n"; +sb << "float4 tex1Dgrad(sampler1D s, float t, float ddx, float ddy);\n"; +sb << "float4 tex1Dlod(sampler1D s, float4 t);\n"; +sb << "float4 tex1Dproj(sampler1D s, float4 t);\n"; +sb << "\n"; +sb << "float4 tex2D(sampler2D s, float2 t);\n"; +sb << "float4 tex2D(sampler2D s, float2 t, float2 ddx, float2 ddy);\n"; +sb << "float4 tex2Dbias(sampler2D s, float4 t);\n"; +sb << "float4 tex2Dgrad(sampler2D s, float2 t, float2 ddx, float2 ddy);\n"; +sb << "float4 tex2Dlod(sampler2D s, float4 t);\n"; +sb << "float4 tex2Dproj(sampler2D s, float4 t);\n"; +sb << "\n"; +sb << "float4 tex3D(sampler3D s, float3 t);\n"; +sb << "float4 tex3D(sampler3D s, float3 t, float3 ddx, float3 ddy);\n"; +sb << "float4 tex3Dbias(sampler3D s, float4 t);\n"; +sb << "float4 tex3Dgrad(sampler3D s, float3 t, float3 ddx, float3 ddy);\n"; +sb << "float4 tex3Dlod(sampler3D s, float4 t);\n"; +sb << "float4 tex3Dproj(sampler3D s, float4 t);\n"; +sb << "\n"; +sb << "float4 texCUBE(samplerCUBE s, float3 t);\n"; +sb << "float4 texCUBE(samplerCUBE s, float3 t, float3 ddx, float3 ddy);\n"; +sb << "float4 texCUBEbias(samplerCUBE s, float4 t);\n"; +sb << "float4 texCUBEgrad(samplerCUBE s, float3 t, float3 ddx, float3 ddy);\n"; +sb << "float4 texCUBElod(samplerCUBE s, float4 t);\n"; +sb << "float4 texCUBEproj(samplerCUBE s, float4 t);\n"; sb << "*/\n"; sb << "\n"; sb << "// Matrix transpose\n"; -sb << "__generic<T : __BuiltinType, let N : int, let M : int> __intrinsic_op matrix<T,M,N> transpose(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,M,N> transpose(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Truncate to integer\n"; -sb << "__generic<T : __BuiltinFloatingPointType> __intrinsic_op T trunc(T x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int> __intrinsic_op vector<T,N> trunc(vector<T,N> x);\n"; -sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> trunc(matrix<T,N,M> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType> T trunc(T x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> trunc(vector<T,N> x);\n"; +sb << "__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> trunc(matrix<T,N,M> x);\n"; sb << "\n"; sb << "// Shader model 6.0 stuff\n"; sb << "\n"; -sb << "__intrinsic_op uint GlobalOrderedCountIncrement(uint countToAppendForThisLane);\n"; +sb << "uint GlobalOrderedCountIncrement(uint countToAppendForThisLane);\n"; sb << "\n"; -sb << "__generic<T : __BuiltinType> __intrinsic_op T QuadReadLaneAt(T sourceValue, int quadLaneID);\n"; -sb << "__generic<T : __BuiltinType, let N : int> __intrinsic_op vector<T,N> QuadReadLaneAt(vector<T,N> sourceValue, int quadLaneID);\n"; -sb << "__generic<T : __BuiltinType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> QuadReadLaneAt(matrix<T,N,M> sourceValue, int quadLaneID);\n"; +sb << "__generic<T : __BuiltinType> T QuadReadLaneAt(T sourceValue, int quadLaneID);\n"; +sb << "__generic<T : __BuiltinType, let N : int> vector<T,N> QuadReadLaneAt(vector<T,N> sourceValue, int quadLaneID);\n"; +sb << "__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> QuadReadLaneAt(matrix<T,N,M> sourceValue, int quadLaneID);\n"; sb << "\n"; -sb << "__generic<T : __BuiltinType> __intrinsic_op T QuadSwapX(T localValue);\n"; -sb << "__generic<T : __BuiltinType, let N : int> __intrinsic_op vector<T,N> QuadSwapX(vector<T,N> localValue);\n"; -sb << "__generic<T : __BuiltinType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> QuadSwapX(matrix<T,N,M> localValue);\n"; +sb << "__generic<T : __BuiltinType> T QuadSwapX(T localValue);\n"; +sb << "__generic<T : __BuiltinType, let N : int> vector<T,N> QuadSwapX(vector<T,N> localValue);\n"; +sb << "__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> QuadSwapX(matrix<T,N,M> localValue);\n"; sb << "\n"; -sb << "__generic<T : __BuiltinType> __intrinsic_op T QuadSwapY(T localValue);\n"; -sb << "__generic<T : __BuiltinType, let N : int> __intrinsic_op vector<T,N> QuadSwapY(vector<T,N> localValue);\n"; -sb << "__generic<T : __BuiltinType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> QuadSwapY(matrix<T,N,M> localValue);\n"; +sb << "__generic<T : __BuiltinType> T QuadSwapY(T localValue);\n"; +sb << "__generic<T : __BuiltinType, let N : int> vector<T,N> QuadSwapY(vector<T,N> localValue);\n"; +sb << "__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> QuadSwapY(matrix<T,N,M> localValue);\n"; sb << "\n"; -sb << "__generic<T : __BuiltinIntegerType> __intrinsic_op T WaveAllBitAnd(T expr);\n"; -sb << "__generic<T : __BuiltinIntegerType, let N : int> __intrinsic_op vector<T,N> WaveAllBitAnd(vector<T,N> expr);\n"; -sb << "__generic<T : __BuiltinIntegerType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> WaveAllBitAnd(matrix<T,N,M> expr);\n"; +sb << "__generic<T : __BuiltinIntegerType> T WaveAllBitAnd(T expr);\n"; +sb << "__generic<T : __BuiltinIntegerType, let N : int> vector<T,N> WaveAllBitAnd(vector<T,N> expr);\n"; +sb << "__generic<T : __BuiltinIntegerType, let N : int, let M : int> matrix<T,N,M> WaveAllBitAnd(matrix<T,N,M> expr);\n"; sb << "\n"; -sb << "__generic<T : __BuiltinIntegerType> __intrinsic_op T WaveAllBitOr(T expr);\n"; -sb << "__generic<T : __BuiltinIntegerType, let N : int> __intrinsic_op vector<T,N> WaveAllBitOr(vector<T,N> expr);\n"; -sb << "__generic<T : __BuiltinIntegerType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> WaveAllBitOr(matrix<T,N,M> expr);\n"; +sb << "__generic<T : __BuiltinIntegerType> T WaveAllBitOr(T expr);\n"; +sb << "__generic<T : __BuiltinIntegerType, let N : int> vector<T,N> WaveAllBitOr(vector<T,N> expr);\n"; +sb << "__generic<T : __BuiltinIntegerType, let N : int, let M : int> matrix<T,N,M> WaveAllBitOr(matrix<T,N,M> expr);\n"; sb << "\n"; -sb << "__generic<T : __BuiltinIntegerType> __intrinsic_op T WaveAllBitXor(T expr);\n"; -sb << "__generic<T : __BuiltinIntegerType, let N : int> __intrinsic_op vector<T,N> WaveAllBitXor(vector<T,N> expr);\n"; -sb << "__generic<T : __BuiltinIntegerType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> WaveAllBitXor(matrix<T,N,M> expr);\n"; +sb << "__generic<T : __BuiltinIntegerType> T WaveAllBitXor(T expr);\n"; +sb << "__generic<T : __BuiltinIntegerType, let N : int> vector<T,N> WaveAllBitXor(vector<T,N> expr);\n"; +sb << "__generic<T : __BuiltinIntegerType, let N : int, let M : int> matrix<T,N,M> WaveAllBitXor(matrix<T,N,M> expr);\n"; sb << "\n"; -sb << "__generic<T : __BuiltinArithmeticType> __intrinsic_op T WaveAllMax(T expr);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> WaveAllMax(vector<T,N> expr);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> WaveAllMax(matrix<T,N,M> expr);\n"; +sb << "__generic<T : __BuiltinArithmeticType> T WaveAllMax(T expr);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveAllMax(vector<T,N> expr);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveAllMax(matrix<T,N,M> expr);\n"; sb << "\n"; -sb << "__generic<T : __BuiltinArithmeticType> __intrinsic_op T WaveAllMin(T expr);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> WaveAllMin(vector<T,N> expr);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> WaveAllMin(matrix<T,N,M> expr);\n"; +sb << "__generic<T : __BuiltinArithmeticType> T WaveAllMin(T expr);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveAllMin(vector<T,N> expr);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveAllMin(matrix<T,N,M> expr);\n"; sb << "\n"; -sb << "__generic<T : __BuiltinArithmeticType> __intrinsic_op T WaveAllProduct(T expr);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> WaveAllProduct(vector<T,N> expr);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> WaveAllProduct(matrix<T,N,M> expr);\n"; +sb << "__generic<T : __BuiltinArithmeticType> T WaveAllProduct(T expr);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveAllProduct(vector<T,N> expr);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveAllProduct(matrix<T,N,M> expr);\n"; sb << "\n"; -sb << "__generic<T : __BuiltinArithmeticType> __intrinsic_op T WaveAllSum(T expr);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> WaveAllSum(vector<T,N> expr);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> WaveAllSum(matrix<T,N,M> expr);\n"; +sb << "__generic<T : __BuiltinArithmeticType> T WaveAllSum(T expr);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveAllSum(vector<T,N> expr);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveAllSum(matrix<T,N,M> expr);\n"; sb << "\n"; -sb << "__intrinsic_op bool WaveAllEqual(bool expr);\n"; -sb << "__intrinsic_op bool WaveAllTrue(bool expr);\n"; -sb << "__intrinsic_op bool WaveAnyTrue(bool expr);\n"; +sb << "bool WaveAllEqual(bool expr);\n"; +sb << "bool WaveAllTrue(bool expr);\n"; +sb << "bool WaveAnyTrue(bool expr);\n"; sb << "\n"; sb << "uint64_t WaveBallot(bool expr);\n"; sb << "\n"; @@ -1020,21 +1002,21 @@ sb << "bool WaveIsHelperLane();\n"; sb << "\n"; sb << "bool WaveOnce();\n"; sb << "\n"; -sb << "__generic<T : __BuiltinArithmeticType> __intrinsic_op T WavePrefixProduct(T expr);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> WavePrefixProduct(vector<T,N> expr);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> WavePrefixProduct(matrix<T,N,M> expr);\n"; +sb << "__generic<T : __BuiltinArithmeticType> T WavePrefixProduct(T expr);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WavePrefixProduct(vector<T,N> expr);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WavePrefixProduct(matrix<T,N,M> expr);\n"; sb << "\n"; -sb << "__generic<T : __BuiltinArithmeticType> __intrinsic_op T WavePrefixSum(T expr);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int> __intrinsic_op vector<T,N> WavePrefixSum(vector<T,N> expr);\n"; -sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> WavePrefixSum(matrix<T,N,M> expr);\n"; +sb << "__generic<T : __BuiltinArithmeticType> T WavePrefixSum(T expr);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WavePrefixSum(vector<T,N> expr);\n"; +sb << "__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WavePrefixSum(matrix<T,N,M> expr);\n"; sb << "\n"; -sb << "__generic<T : __BuiltinType> __intrinsic_op T WaveReadFirstLane(T expr);\n"; -sb << "__generic<T : __BuiltinType, let N : int> __intrinsic_op vector<T,N> WaveReadFirstLane(vector<T,N> expr);\n"; -sb << "__generic<T : __BuiltinType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> WaveReadFirstLane(matrix<T,N,M> expr);\n"; +sb << "__generic<T : __BuiltinType> T WaveReadFirstLane(T expr);\n"; +sb << "__generic<T : __BuiltinType, let N : int> vector<T,N> WaveReadFirstLane(vector<T,N> expr);\n"; +sb << "__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> WaveReadFirstLane(matrix<T,N,M> expr);\n"; sb << "\n"; -sb << "__generic<T : __BuiltinType> __intrinsic_op T WaveReadLaneAt(T expr, int laneIndex);\n"; -sb << "__generic<T : __BuiltinType, let N : int> __intrinsic_op vector<T,N> WaveReadLaneAt(vector<T,N> expr, int laneIndex);\n"; -sb << "__generic<T : __BuiltinType, let N : int, let M : int> __intrinsic_op matrix<T,N,M> WaveReadLaneAt(matrix<T,N,M> expr, int laneIndex);\n"; +sb << "__generic<T : __BuiltinType> T WaveReadLaneAt(T expr, int laneIndex);\n"; +sb << "__generic<T : __BuiltinType, let N : int> vector<T,N> WaveReadLaneAt(vector<T,N> expr, int laneIndex);\n"; +sb << "__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> WaveReadLaneAt(matrix<T,N,M> expr, int laneIndex);\n"; sb << "\n"; sb << "// `typedef`s to help with the fact that HLSL has been sorta-kinda case insensitive at various points\n"; sb << "typedef Texture2D texture2D;\n"; @@ -1095,15 +1077,15 @@ for (int aa = 0; aa < kBaseBufferAccessLevelCount; ++aa) sb << kBaseBufferAccessLevels[aa].name; sb << "Buffer {\n"; - sb << "__intrinsic_op void GetDimensions(out uint dim);\n"; + sb << "void GetDimensions(out uint dim);\n"; sb << "__target_intrinsic(glsl, \"texelFetch($P, $0)$z\")\n"; - sb << "__intrinsic_op T Load(int location);\n"; + sb << "T Load(int location);\n"; - sb << "__intrinsic_op T Load(int location, out uint status);\n"; + sb << "T Load(int location, out uint status);\n"; sb << "__target_intrinsic(glsl, \"texelFetch($P, int($0))$z\")\n"; - sb << "__intrinsic_op __subscript(uint index) -> T"; + sb << "__subscript(uint index) -> T"; if (kBaseBufferAccessLevels[aa].access != SLANG_RESOURCE_ACCESS_READ) { |
