Przeglądaj źródła

WebGPURenderer: Enable Subgroup Directives/Builtins (#29053)

* add subgroup properties to wgslNodeBuilder

* add subgroups to GPUFeatureName

* remove buildStage call

* convert directive to set

* cleanup
Christian Helgeson 1 rok temu
rodzic
commit
ff43819375

+ 30 - 2
src/renderers/webgpu/nodes/WGSLNodeBuilder.js

@@ -623,6 +623,22 @@ ${ flowData.code }
 
 	}
 
+	getSubgroupSize() {
+
+		this.enableSubGroups();
+
+		return this.getBuiltin( 'subgroup_size', 'subgroupSize', 'u32', 'attribute' );
+
+	}
+
+	getSubgroupIndex() {
+
+		this.enableSubGroups();
+
+		return this.getBuiltin( 'subgroup_invocation_id', 'subgroupIndex', 'u32', 'attribute' );
+
+	}
+
 	getDrawIndex() {
 
 		return null;
@@ -655,8 +671,8 @@ ${ flowData.code }
 
 	enableDirective( name, shaderStage = this.shaderStage ) {
 
-		const stage = this.directives[ shaderStage ] || ( this.directives[ shaderStage ] = [] );
-		stage.push( name );
+		const stage = this.directives[ shaderStage ] || ( this.directives[ shaderStage ] = new Set() );
+		stage.add( name );
 
 	}
 
@@ -679,6 +695,18 @@ ${ flowData.code }
 
 	}
 
+	enableSubGroups() {
+
+		this.enableDirective( 'subgroups' );
+
+	}
+
+	enableSubgroupsF16() {
+
+		this.enableDirective( 'subgroups-f16' );
+
+	}
+
 	enableClipDistances() {
 
 		this.enableDirective( 'clip_distances' );

+ 2 - 1
src/renderers/webgpu/utils/WebGPUConstants.js

@@ -328,5 +328,6 @@ export const GPUFeatureName = {
 	BGRA8UNormStorage: 'bgra8unorm-storage',
 	Float32Filterable: 'float32-filterable',
 	ClipDistances: 'clip-distances',
-	DualSourceBlending: 'dual-source-blending'
+	DualSourceBlending: 'dual-source-blending',
+	Subgroups: 'subgroups'
 };

粤ICP备19079148号