summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source/slang/glsl.meta.slang11
-rw-r--r--tests/cross-compile/non-uniform-indexing.slang5
2 files changed, 16 insertions, 0 deletions
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<T:__BuiltinArithmeticType>
+__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
}