From 0630bf9a6254de8ec69ef144d11d9ed4a432453c Mon Sep 17 00:00:00 2001 From: Robert Stepinski Date: Wed, 6 Mar 2019 21:45:37 -0500 Subject: Fix rsqrt intrinsic for GLSL (#881) * Add support for glsl inversesqrt intrinsic * fixup for test failure --- source/slang/hlsl.meta.slang | 14 +++++++++++--- source/slang/hlsl.meta.slang.h | 14 +++++++++++--- tests/bugs/vk-structured-buffer-load.hlsl | 3 ++- 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 vector round(vector< __generic matrix round(matrix x); // Reciprocal of square root -__generic T rsqrt(T x); -__generic vector rsqrt(vector x); -__generic matrix rsqrt(matrix x); +__generic +__target_intrinsic(glsl, "inversesqrt($0)") +T rsqrt(T x); + +__generic +__target_intrinsic(glsl, "inversesqrt($0)") +vector rsqrt(vector x); + +__generic +__target_intrinsic(glsl, "inversesqrt($0)") +matrix rsqrt(matrix x); // Clamp value to [0,1] range __generic 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 vector ro SLANG_RAW("__generic matrix round(matrix x);\n") SLANG_RAW("\n") SLANG_RAW("// Reciprocal of square root\n") -SLANG_RAW("__generic T rsqrt(T x);\n") -SLANG_RAW("__generic vector rsqrt(vector x);\n") -SLANG_RAW("__generic matrix rsqrt(matrix x);\n") +SLANG_RAW("__generic\n") +SLANG_RAW("__target_intrinsic(glsl, \"inversesqrt($0)\")\n") +SLANG_RAW("T rsqrt(T x);\n") +SLANG_RAW("\n") +SLANG_RAW("__generic\n") +SLANG_RAW("__target_intrinsic(glsl, \"inversesqrt($0)\")\n") +SLANG_RAW("vector rsqrt(vector x);\n") +SLANG_RAW("\n") +SLANG_RAW("__generic\n") +SLANG_RAW("__target_intrinsic(glsl, \"inversesqrt($0)\")\n") +SLANG_RAW("matrix rsqrt(matrix x);\n") SLANG_RAW("\n") SLANG_RAW("// Clamp value to [0,1] range\n") SLANG_RAW("__generic\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 +} -- cgit v1.2.3