summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authordavli-nv <davli@nvidia.com>2025-07-11 17:46:22 -0700
committerGitHub <noreply@github.com>2025-07-12 00:46:22 +0000
commitd39590228241cb42d72f493f6f484c5ea93df934 (patch)
tree46d07e781c7b601457e73fab38ac789bdc4ac810 /source
parente16b5ca61d32be4c34bdb52b58282e02873529f1 (diff)
Add WorkgroupCount function (#7734)
Fixes #7733 Copy gl_NumWorkGroups into hlsl.meta.slang as WorkgroupCount function so that it can be used for GLSL and SPIR-V targets without GLSL syntax. Also change WorkgroupSize function to allow use with mesh shading capability. Update pipeline/rasterization/mesh/task-simple.slang to test it in task and mesh stages.
Diffstat (limited to 'source')
-rw-r--r--source/slang/glsl.meta.slang13
-rw-r--r--source/slang/hlsl.meta.slang17
2 files changed, 20 insertions, 10 deletions
diff --git a/source/slang/glsl.meta.slang b/source/slang/glsl.meta.slang
index b3323a327..dfa858eca 100644
--- a/source/slang/glsl.meta.slang
+++ b/source/slang/glsl.meta.slang
@@ -141,25 +141,18 @@ public property int gl_DeviceIndex
public property uint3 gl_NumWorkGroups
{
[require(glsl_spirv, GLSL_430_SPIRV_1_0_compute)]
+ [require(glsl_spirv, meshshading)]
get
{
- __target_switch
- {
- case glsl:
- __intrinsic_asm "(gl_NumWorkGroups)";
- case spirv:
- return spirv_asm {
- result:$$uint3 = OpLoad builtin(NumWorkgroups:uint3);
- };
- }
+ return WorkgroupCount();
}
}
-[require(compute)]
public property uint3 gl_WorkGroupSize
{
[__unsafeForceInlineEarly]
[require(compute)]
+ [require(meshshading)]
get
{
return WorkgroupSize();
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index c1449f3cb..f7efc3a51 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -6619,9 +6619,26 @@ void AllMemoryBarrierWithGroupSync()
// Returns the workgroup size of the calling entry point.
[require(compute)]
+[require(meshshading)]
__intrinsic_op($(kIROp_GetWorkGroupSize))
int3 WorkgroupSize();
+// Returns number of workgroups that have been dispatched to a GLSL or SPIR-V compute shader
+[require(glsl_spirv, GLSL_430_SPIRV_1_0_compute)]
+[require(glsl_spirv, meshshading)]
+uint3 WorkgroupCount()
+{
+ __target_switch
+ {
+ case glsl:
+ __intrinsic_asm "(gl_NumWorkGroups)";
+ case spirv:
+ return spirv_asm {
+ result:$$uint3 = OpLoad builtin(NumWorkgroups:uint3);
+ };
+ }
+}
+
// Test if any components is non-zero.
__generic<T : __BuiltinType>