summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorvenkataram-nv <vedavamadath@nvidia.com>2024-06-25 15:26:51 -0700
committerGitHub <noreply@github.com>2024-06-25 15:26:51 -0700
commite2b56d015e9cd6c9401e38aff9a303121d50c1e1 (patch)
treede167af979aac566cd482d4960f5582ad69e7a84 /source
parent8d2f6e4ddceb83009bb5f6b3d49001a2fd3cd761 (diff)
Add intrinsic for `IsHelperLane()` in HLSL (#4471)
Add InHelperLane() intrinsic for HLSL, GLSL, Metal and Spirv.
Diffstat (limited to 'source')
-rw-r--r--source/slang/hlsl.meta.slang18
-rw-r--r--source/slang/slang-capabilities.capdef5
2 files changed, 23 insertions, 0 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index c01265369..82ef5837e 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -14949,6 +14949,24 @@ matrix<T,N,M> WaveMultiPrefixSum(matrix<T,N,M> value, uint4 mask)
}
}
+__glsl_extension(GL_EXT_demote_to_helper_invocation)
+[ForceInline]
+[require(glsl_hlsl_metal_spirv, helper_lane)]
+bool IsHelperLane()
+{
+ __target_switch {
+ case hlsl: __intrinsic_asm "IsHelperLane()";
+ case glsl: __intrinsic_asm "gl_HelperInvocation";
+ case metal: __intrinsic_asm "simd_is_helper_thread()";
+ case spirv:
+ return spirv_asm {
+ OpExtension "SPV_EXT_demote_to_helper_invocation";
+ OpCapability DemoteToHelperInvocationEXT;
+ result:$$bool = OpIsHelperInvocationEXT
+ };
+ }
+}
+
// `typedef`s to help with the fact that HLSL has been sorta-kinda case insensitive at various points
typedef Texture2D texture2D;
diff --git a/source/slang/slang-capabilities.capdef b/source/slang/slang-capabilities.capdef
index d003e4f41..b011021bc 100644
--- a/source/slang/slang-capabilities.capdef
+++ b/source/slang/slang-capabilities.capdef
@@ -817,6 +817,11 @@ alias atomic_glsl_hlsl_nvapi_cuda9_int64 = atomic_glsl_int64 | hlsl_nvapi + _sm_
alias atomic_glsl_hlsl_cuda = atomic_glsl | _sm_5_0 | _cuda_sm_2_0;
alias atomic_glsl_hlsl_cuda9_int64 = atomic_glsl_int64 | _sm_6_6 | _cuda_sm_9_0;
+alias helper_lane = _sm_6_0 + fragment
+ | GL_EXT_demote_to_helper_invocation + fragment
+ | metal + fragment
+ ;
+
alias breakpoint = GL_EXT_debug_printf | hlsl | _cuda_sm_8_0 | cpp;
alias raytracing_allstages = raytracing_stages + raytracing;