Browse Source

WebGPURenderer: WGSL Fix calculation of global_invocation_id in compute shader (#28865)

Renaud Rohlinger 1 year ago
parent
commit
ab8f885327
1 changed files with 4 additions and 1 deletions
  1. 4 1
      src/renderers/webgpu/nodes/WGSLNodeBuilder.js

+ 4 - 1
src/renderers/webgpu/nodes/WGSLNodeBuilder.js

@@ -681,6 +681,9 @@ ${ flowData.code }
 		if ( shaderStage === 'compute' ) {
 
 			this.getBuiltin( 'global_invocation_id', 'id', 'vec3<u32>', 'attribute' );
+			this.getBuiltin( 'workgroup_id', 'workgroupId', 'vec3<u32>', 'attribute' );
+			this.getBuiltin( 'local_invocation_id', 'localId', 'vec3<u32>', 'attribute' );
+			this.getBuiltin( 'num_workgroups', 'numWorkgroups', 'vec3<u32>', 'attribute' );
 
 		}
 
@@ -1198,7 +1201,7 @@ ${shaderData.codes}
 fn main( ${shaderData.attributes} ) {
 
 	// system
-	instanceIndex = id.x;
+	instanceIndex = id.x + id.y * numWorkgroups.x * u32(${workgroupSize}) + id.z * numWorkgroups.x * numWorkgroups.y * u32(${workgroupSize});
 
 	// vars
 	${shaderData.vars}