summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Kwak <82421531+jkwak-work@users.noreply.github.com>2024-11-28 23:40:52 -0800
committerGitHub <noreply@github.com>2024-11-29 15:40:52 +0800
commite53ca9872f62ceb2bb86f5a00bdec033c1fda6fb (patch)
treea0a462c5b95c6ab15f7d8cf8477cbd61b46ec946
parent55bea7d72c7efe694cb8afb13f6219c11df9c911 (diff)
Support nonuniformEXT for GLSL (#5695)
Adding nonuniformEXT intrinsic for GLSL Co-authored-by: Ellie Hermaszewska <ellieh@nvidia.com>
-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
}