diff options
| -rw-r--r-- | source/slang/hlsl.meta.slang | 14 | ||||
| -rw-r--r-- | source/slang/hlsl.meta.slang.h | 14 | ||||
| -rw-r--r-- | tests/bugs/vk-structured-buffer-load.hlsl | 3 | ||||
| -rw-r--r-- | tests/bugs/vk-structured-buffer-load.hlsl.glsl | 10 |
4 files changed, 31 insertions, 10 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index 4135a9051..4044600aa 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -1156,9 +1156,17 @@ __generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> round(vector< __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> 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); +__generic<T : __BuiltinFloatingPointType> +__target_intrinsic(glsl, "inversesqrt($0)") +T rsqrt(T x); + +__generic<T : __BuiltinFloatingPointType, let N : int> +__target_intrinsic(glsl, "inversesqrt($0)") +vector<T,N> rsqrt(vector<T,N> x); + +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> +__target_intrinsic(glsl, "inversesqrt($0)") +matrix<T,N,M> rsqrt(matrix<T,N,M> x); // Clamp value to [0,1] range __generic<T : __BuiltinFloatingPointType> diff --git a/source/slang/hlsl.meta.slang.h b/source/slang/hlsl.meta.slang.h index 67d8d3cc0..94e42b045 100644 --- a/source/slang/hlsl.meta.slang.h +++ b/source/slang/hlsl.meta.slang.h @@ -1232,9 +1232,17 @@ SLANG_RAW("__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> ro SLANG_RAW("__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> round(matrix<T,N,M> x);\n") SLANG_RAW("\n") SLANG_RAW("// Reciprocal of square root\n") -SLANG_RAW("__generic<T : __BuiltinFloatingPointType> T rsqrt(T x);\n") -SLANG_RAW("__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> rsqrt(vector<T,N> x);\n") -SLANG_RAW("__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> rsqrt(matrix<T,N,M> x);\n") +SLANG_RAW("__generic<T : __BuiltinFloatingPointType>\n") +SLANG_RAW("__target_intrinsic(glsl, \"inversesqrt($0)\")\n") +SLANG_RAW("T rsqrt(T x);\n") +SLANG_RAW("\n") +SLANG_RAW("__generic<T : __BuiltinFloatingPointType, let N : int>\n") +SLANG_RAW("__target_intrinsic(glsl, \"inversesqrt($0)\")\n") +SLANG_RAW("vector<T,N> rsqrt(vector<T,N> x);\n") +SLANG_RAW("\n") +SLANG_RAW("__generic<T : __BuiltinFloatingPointType, let N : int, let M : int>\n") +SLANG_RAW("__target_intrinsic(glsl, \"inversesqrt($0)\")\n") +SLANG_RAW("matrix<T,N,M> rsqrt(matrix<T,N,M> x);\n") SLANG_RAW("\n") SLANG_RAW("// Clamp value to [0,1] range\n") SLANG_RAW("__generic<T : __BuiltinFloatingPointType>\n") diff --git a/tests/bugs/vk-structured-buffer-load.hlsl b/tests/bugs/vk-structured-buffer-load.hlsl index e8b1eae86..daedc5b66 100644 --- a/tests/bugs/vk-structured-buffer-load.hlsl +++ b/tests/bugs/vk-structured-buffer-load.hlsl @@ -1,4 +1,5 @@ //TEST:CROSS_COMPILE: -profile lib_6_3 -entry HitMain -stage closesthit -target spirv-assembly + struct ParameterBlockTest { SamplerState sam; @@ -20,5 +21,5 @@ void HitMain(inout RayHitInfoPacked RayData, BuiltInTriangleIntersectionAttribut uint offs = 0; float offsfloat = gParamBlock.sbuf.Load(offs); - RayData.PackedHitInfoA.y = offsfloat; + RayData.PackedHitInfoA.y = rsqrt(offsfloat); } diff --git a/tests/bugs/vk-structured-buffer-load.hlsl.glsl b/tests/bugs/vk-structured-buffer-load.hlsl.glsl index 28703cac4..8060cc921 100644 --- a/tests/bugs/vk-structured-buffer-load.hlsl.glsl +++ b/tests/bugs/vk-structured-buffer-load.hlsl.glsl @@ -1,4 +1,6 @@ // vk-structured-buffer-load.hlsl.glsl +//TEST_IGNORE_FILE: + #version 460 layout(row_major) uniform; layout(row_major) buffer; @@ -29,7 +31,9 @@ void main() float offsfloat_0 = ((gParamBlock_sbuf_0)._data[(int(uint(0)))]); - _S2.PackedHitInfoA_0.y = offsfloat_0; - + float _S4 = inversesqrt(offsfloat_0); + + _S2.PackedHitInfoA_0.y = _S4; + return; -}
\ No newline at end of file +} |
