diff options
| author | venkataram-nv <vedavamadath@nvidia.com> | 2024-06-25 15:26:51 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-25 15:26:51 -0700 |
| commit | e2b56d015e9cd6c9401e38aff9a303121d50c1e1 (patch) | |
| tree | de167af979aac566cd482d4960f5582ad69e7a84 /source | |
| parent | 8d2f6e4ddceb83009bb5f6b3d49001a2fd3cd761 (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.slang | 18 | ||||
| -rw-r--r-- | source/slang/slang-capabilities.capdef | 5 |
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; |
