summaryrefslogtreecommitdiff
path: root/source/slang/hlsl.meta.slang
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/hlsl.meta.slang')
-rw-r--r--source/slang/hlsl.meta.slang53
1 files changed, 5 insertions, 48 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index 3576e46e3..cdd08b5d7 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -6990,55 +6990,12 @@ T __copyObject<T>(T v)
}
}
-
-__glsl_extension(GL_EXT_nonuniform_qualifier)
-[__readNone]
-[ForceInline]
-uint NonUniformResourceIndex(uint index)
-{
- __target_switch
- {
- case hlsl:
- __intrinsic_asm "NonUniformResourceIndex";
- case glsl:
- __intrinsic_asm "nonuniformEXT";
- case spirv:
- var indexCopy = __copyObject(index);
- spirv_asm
- {
- OpCapability ShaderNonUniform;
- OpDecorate $indexCopy NonUniform;
- };
- return indexCopy;
- default:
- return index;
- }
-}
-
-__glsl_extension(GL_EXT_nonuniform_qualifier)
+/// `NonUniformResourceIndex` function is used to indicate if the resource index is
+/// divergent, and ensure scalarization happens correctly for each divergent lane.
[__readNone]
-[ForceInline]
-[NonUniformReturn]
-int NonUniformResourceIndex(int index)
-{
- __target_switch
- {
- case hlsl:
- __intrinsic_asm "NonUniformResourceIndex";
- case glsl:
- __intrinsic_asm "nonuniformEXT";
- case spirv:
- var indexCopy = __copyObject(index);
- spirv_asm
- {
- OpCapability ShaderNonUniform;
- OpDecorate $indexCopy NonUniform;
- };
- return indexCopy;
- default:
- return index;
- }
-}
+__generic<T:__BuiltinArithmeticType>
+__intrinsic_op($(kIROp_NonUniformResourceIndex))
+T NonUniformResourceIndex(T index);
/// HLSL allows NonUniformResourceIndex around non int/uint types.
/// It's effect is presumably to ignore it, which the following implementation does.