diff options
Diffstat (limited to 'source/slang/hlsl.meta.slang')
| -rw-r--r-- | source/slang/hlsl.meta.slang | 44 |
1 files changed, 25 insertions, 19 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index 464811a96..1d2b327d2 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -872,36 +872,31 @@ matrix<T, N, M> acos(matrix<T, N, M> x) // Test if all components are non-zero (HLSL SM 1.0) __generic<T : __BuiltinType> +__target_intrinsic(cpp, "bool($0)") +__target_intrinsic(cuda, "bool($0)") __target_intrinsic(glsl, "bool($0)") bool all(T x); __generic<T : __BuiltinType, let N : int> __target_intrinsic(hlsl) __target_intrinsic(glsl, "all(bvec$N0($0))") -bool all(vector<T,N> x); -// TODO: implementation of `all()` in the stdlib is -// blocked on fixing implementation of `bool` vector -// `getAt` on the CUDA codegen path. -/* +bool all(vector<T,N> x) { bool result = true; for(int i = 0; i < N; ++i) result = result && all(x[i]); return result; } -*/ __generic<T : __BuiltinType, let N : int, let M : int> __target_intrinsic(hlsl) -bool all(matrix<T,N,M> x); -/* +bool all(matrix<T,N,M> x) { bool result = true; for(int i = 0; i < N; ++i) result = result && all(x[i]); return result; } -*/ // Barrier for writes to all memory spaces (HLSL SM 5.0) __target_intrinsic(glsl, "memoryBarrier(), groupMemoryBarrier(), memoryBarrierImage(), memoryBarrierBuffer()") @@ -916,42 +911,39 @@ void AllMemoryBarrierWithGroupSync(); // Test if any components is non-zero (HLSL SM 1.0) __generic<T : __BuiltinType> +__target_intrinsic(cpp, "bool($0)") +__target_intrinsic(cuda, "bool($0)") __target_intrinsic(glsl, "bool($0)") bool any(T x); __generic<T : __BuiltinType, let N : int> __target_intrinsic(hlsl) __target_intrinsic(glsl, "any(bvec$N0($0))") -bool any(vector<T, N> x); -// TODO: implementation of `any()` in the stdlib is -// blocked on fixing implementation of `bool` vector -// `getAt` on the CUDA codegen path. -/* +bool any(vector<T, N> x) { bool result = false; for(int i = 0; i < N; ++i) result = result || any(x[i]); return result; } -*/ __generic<T : __BuiltinType, let N : int, let M : int> __target_intrinsic(hlsl) -bool any(matrix<T, N, M> x); -/* +bool any(matrix<T, N, M> x) { bool result = false; for(int i = 0; i < N; ++i) result = result || any(x[i]); return result; } -*/ // Reinterpret bits as a double (HLSL SM 5.0) __target_intrinsic(hlsl) __target_intrinsic(glsl, "packDouble2x32(uvec2($0, $1))") +__target_intrinsic(cpp, "$P_asdouble($0, $1)") +__target_intrinsic(cuda, "$P_asdouble($0, $1)") __target_intrinsic(spirv_direct, "%v = OpCompositeConstruct _type(uint2) resultId _0 _1; OpExtInst resultType resultId glsl450 59 %v") __glsl_extension(GL_ARB_gpu_shader5) double asdouble(uint lowbits, uint highbits); @@ -960,11 +952,15 @@ double asdouble(uint lowbits, uint highbits); __target_intrinsic(hlsl) __target_intrinsic(glsl, "intBitsToFloat") +__target_intrinsic(cpp, "$P_asfloat($0)") +__target_intrinsic(cuda, "$P_asfloat($0)") __target_intrinsic(spirv_direct, "OpBitcast resultType resultId _0") float asfloat(int x); __target_intrinsic(hlsl) __target_intrinsic(glsl, "uintBitsToFloat") +__target_intrinsic(cpp, "$P_asfloat($0)") +__target_intrinsic(cuda, "$P_asfloat($0)") __target_intrinsic(spirv_direct, "OpBitcast resultType resultId _0") float asfloat(uint x); @@ -1044,11 +1040,15 @@ matrix<T, N, M> asin(matrix<T, N, M> x) __target_intrinsic(hlsl) __target_intrinsic(glsl, "floatBitsToInt") +__target_intrinsic(cpp, "$P_asint($0)") +__target_intrinsic(cuda, "$P_asint($0)") __target_intrinsic(spirv_direct, "OpBitcast resultType resultId _0") int asint(float x); __target_intrinsic(hlsl) __target_intrinsic(glsl, "int($0)") +__target_intrinsic(cpp, "$P_asint($0)") +__target_intrinsic(cuda, "$P_asint($0)") __target_intrinsic(spirv_direct, "OpBitcast resultType resultId _0") int asint(uint x); @@ -1104,6 +1104,8 @@ matrix<int,N,M> asint(matrix<int,N,M> x) __target_intrinsic(hlsl) __target_intrinsic(glsl, "{ uvec2 v = unpackDouble2x32($0); $1 = v.x; $2 = v.y; }") __glsl_extension(GL_ARB_gpu_shader5) +__target_intrinsic(cpp, "$P_asuint($0, $1, $2)") +__target_intrinsic(cuda, "$P_asuint($0, $1, $2)") void asuint(double value, out uint lowbits, out uint highbits); // Reinterpret bits as a uint (HLSL SM 4.0) @@ -1111,11 +1113,15 @@ void asuint(double value, out uint lowbits, out uint highbits); __target_intrinsic(hlsl) __target_intrinsic(glsl, "floatBitsToUint") __target_intrinsic(spirv_direct, "OpBitcast resultType resultId _0") +__target_intrinsic(cpp, "$P_asuint($0)") +__target_intrinsic(cuda, "$P_asuint($0)") uint asuint(float x); __target_intrinsic(hlsl) __target_intrinsic(glsl, "uint($0)") __target_intrinsic(spirv_direct, "OpBitcast resultType resultId _0") +__target_intrinsic(cpp, "$P_asuint($0)") +__target_intrinsic(cuda, "$P_asuint($0)") uint asuint(int x); __generic<let N : int> @@ -1812,7 +1818,7 @@ __target_intrinsic(glsl, "unpackHalf2x16($0).x") __glsl_version(420) __target_intrinsic(hlsl) __cuda_sm_version(6.0) -__target_intrinsic(cuda, "__half2float(__short_as_half($0))") +__target_intrinsic(cuda, "__half2float(__ushort_as_half($0))") float f16tof32(uint value); __generic<let N : int> |
