From e53ca9872f62ceb2bb86f5a00bdec033c1fda6fb Mon Sep 17 00:00:00 2001 From: Jay Kwak <82421531+jkwak-work@users.noreply.github.com> Date: Thu, 28 Nov 2024 23:40:52 -0800 Subject: Support nonuniformEXT for GLSL (#5695) Adding nonuniformEXT intrinsic for GLSL Co-authored-by: Ellie Hermaszewska --- source/slang/glsl.meta.slang | 11 +++++++++++ tests/cross-compile/non-uniform-indexing.slang | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/source/slang/glsl.meta.slang b/source/slang/glsl.meta.slang index ada908306..1d91930e4 100644 --- a/source/slang/glsl.meta.slang +++ b/source/slang/glsl.meta.slang @@ -9601,3 +9601,14 @@ public bool allInvocationsEqual(bool value) { return WaveActiveAllEqual(value); } + + +/// extensions +/// https://github.com/KhronosGroup/GLSL/blob/main/extensions/ext/GL_EXT_nonuniform_qualifier.txt + +__generic +__intrinsic_op($(kIROp_NonUniformResourceIndex)) +[require(cpp_cuda_glsl_hlsl_spirv, nonuniformqualifier)] +public T nonuniformEXT(T index); + + diff --git a/tests/cross-compile/non-uniform-indexing.slang b/tests/cross-compile/non-uniform-indexing.slang index 73483afae..dc53d5922 100644 --- a/tests/cross-compile/non-uniform-indexing.slang +++ b/tests/cross-compile/non-uniform-indexing.slang @@ -1,4 +1,5 @@ //TEST:SIMPLE(filecheck=CHECK):-target spirv-assembly -entry main -stage fragment -verify-debug-serial-ir +//TEST:SIMPLE(filecheck=CHECK):-target spirv-assembly -entry main -stage fragment -verify-debug-serial-ir -DGLSL -allow-glsl // Confirm that `NonUniformResourceIndex` translates to SPIR-V as expected @@ -11,5 +12,9 @@ float4 main( float3 uv : UV) : SV_Target { +#if defined(GLSL) + return t[nonuniformEXT(int(uv.z))].Sample(s, uv.xy); +#else return t[NonUniformResourceIndex(int(uv.z))].Sample(s, uv.xy); +#endif } -- cgit v1.2.3