Просмотр исходного кода

WGSLNodeBuilder: Sampler for compute shader (#30033)

* Update WGSLNodeBuilder.js

Arrays are not currently taken into account by the wgslTypeLib. However, with the struct extension #29908, arrays will also become important as a type.

* enables the use of samplers in compute shaders

Since textureSampleLevel is usable in compute shaders, this small PR allows sampler to be used in compute shaders for this purpose

* Update WGSLNodeBuilder.js

* Update WGSLNodeBuilder.js
Spiri0 1 год назад
Родитель
Сommit
3a581bf867
1 измененных файлов с 3 добавлено и 3 удалено
  1. 3 3
      src/renderers/webgpu/nodes/WGSLNodeBuilder.js

+ 3 - 3
src/renderers/webgpu/nodes/WGSLNodeBuilder.js

@@ -223,7 +223,7 @@ class WGSLNodeBuilder extends NodeBuilder {
 
 
 	_generateTextureSampleLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, shaderStage = this.shaderStage ) {
 	_generateTextureSampleLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, shaderStage = this.shaderStage ) {
 
 
-		if ( shaderStage === 'fragment' && this.isUnfilterable( texture ) === false ) {
+		if ( ( shaderStage === 'fragment' || shaderStage === 'compute' ) && this.isUnfilterable( texture ) === false ) {
 
 
 			return `textureSampleLevel( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ levelSnippet } )`;
 			return `textureSampleLevel( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ levelSnippet } )`;
 
 
@@ -592,7 +592,7 @@ class WGSLNodeBuilder extends NodeBuilder {
 				texture.store = node.isStorageTextureNode === true;
 				texture.store = node.isStorageTextureNode === true;
 				texture.setVisibility( gpuShaderStageLib[ shaderStage ] );
 				texture.setVisibility( gpuShaderStageLib[ shaderStage ] );
 
 
-				if ( shaderStage === 'fragment' && this.isUnfilterable( node.value ) === false && texture.store === false ) {
+				if ( ( shaderStage === 'fragment' || shaderStage === 'compute' ) && this.isUnfilterable( node.value ) === false && texture.store === false ) {
 
 
 					const sampler = new NodeSampler( `${uniformNode.name}_sampler`, uniformNode.node, group );
 					const sampler = new NodeSampler( `${uniformNode.name}_sampler`, uniformNode.node, group );
 					sampler.setVisibility( gpuShaderStageLib[ shaderStage ] );
 					sampler.setVisibility( gpuShaderStageLib[ shaderStage ] );
@@ -1104,7 +1104,7 @@ ${ flowData.code }
 
 
 				const texture = uniform.node.value;
 				const texture = uniform.node.value;
 
 
-				if ( shaderStage === 'fragment' && this.isUnfilterable( texture ) === false && uniform.node.isStorageTextureNode !== true ) {
+				if ( ( shaderStage === 'fragment' || shaderStage === 'compute' ) && this.isUnfilterable( texture ) === false && uniform.node.isStorageTextureNode !== true ) {
 
 
 					if ( this.isSampleCompare( texture ) ) {
 					if ( this.isSampleCompare( texture ) ) {
 
 

粤ICP备19079148号