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

TSL: Deprecated `storageObject()` (#29982)

* deprecated `storageObject()`

* add tag

* cleanup

* Update webgpu_compute_birds.jpg
sunag 1 год назад
Родитель
Сommit
e5db8e95ff

BIN
examples/screenshots/webgpu_compute_birds.jpg


+ 3 - 7
examples/webgpu_compute_audio.html

@@ -101,14 +101,10 @@
 
 				waveArray = instancedArray( waveBuffer );
 
-				// read-only buffer
-
-				const waveNode = instancedArray( waveBuffer );
-
 				// The Pixel Buffer Object (PBO) is required to get the GPU computed data to the CPU in the WebGL2 fallback.
 				// As used in `renderer.getArrayBufferAsync( waveArray.value )`.
 
-				// waveNode.setPBO( true );
+				waveArray.setPBO( true );
 
 				// params
 
@@ -127,14 +123,14 @@
 
 					const time = index.mul( pitch );
 
-					let wave = waveNode.element( time );
+					let wave = waveArray.element( time );
 
 
 					// delay
 
 					for ( let i = 1; i < 7; i ++ ) {
 
-						const waveOffset = waveNode.element( index.sub( delayOffset.mul( sampleRate ).mul( i ) ).mul( pitch ) );
+						const waveOffset = waveArray.element( index.sub( delayOffset.mul( sampleRate ).mul( i ) ).mul( pitch ) );
 						const waveOffsetVolume = waveOffset.mul( delayVolume.div( i * i ) );
 
 						wave = wave.add( waveOffsetVolume );

+ 6 - 0
examples/webgpu_compute_birds.html

@@ -213,6 +213,12 @@
 				const velocityStorage = attributeArray( velocityArray, 'vec3' ).label( 'velocityStorage' );
 				const phaseStorage = attributeArray( phaseArray, 'float' ).label( 'phaseStorage' );
 
+				// The Pixel Buffer Object (PBO) is required to get the GPU computed data in the WebGL2 fallback.
+
+				positionStorage.setPBO( true );
+				velocityStorage.setPBO( true );
+				phaseStorage.setPBO( true );
+
 				// Define Uniforms. Uniforms only need to be defined once rather than per shader.
 			
 				effectController = {

+ 17 - 5
src/nodes/accessors/StorageBufferNode.js

@@ -28,8 +28,8 @@ class StorageBufferNode extends BufferNode {
 
 		this.access = NodeAccess.READ_WRITE;
 		this.isAtomic = false;
+		this.isPBO = false;
 
-		this.bufferObject = false;
 		this.bufferCount = bufferCount;
 
 		this._attribute = null;
@@ -84,14 +84,20 @@ class StorageBufferNode extends BufferNode {
 
 	}
 
-	setBufferObject( value ) {
+	setPBO( value ) {
 
-		this.bufferObject = value;
+		this.isPBO = value;
 
 		return this;
 
 	}
 
+	getPBO() {
+
+		return this.isPBO;
+
+	}
+
 	setAccess( value ) {
 
 		this.access = value;
@@ -172,6 +178,12 @@ class StorageBufferNode extends BufferNode {
 
 export default StorageBufferNode;
 
-// Read-Write Storage
 export const storage = ( value, type, count ) => nodeObject( new StorageBufferNode( value, type, count ) );
-export const storageObject = ( value, type, count ) => nodeObject( new StorageBufferNode( value, type, count ).setBufferObject( true ) );
+
+export const storageObject = ( value, type, count ) => { // @deprecated, r171
+
+	console.warn( 'THREE.TSL: "storageObject()" is deprecated. Use "storage().setPBO( true )" instead.' );
+
+	return storage( value, type, count ).setPBO( true );
+
+};

+ 2 - 2
src/nodes/utils/StorageArrayElementNode.js

@@ -33,7 +33,7 @@ class StorageArrayElementNode extends ArrayElementNode {
 
 		if ( builder.isAvailable( 'storageBuffer' ) === false ) {
 
-			if ( this.node.bufferObject === true ) {
+			if ( this.node.isPBO === true ) {
 
 				builder.setupPBO( this.node );
 
@@ -55,7 +55,7 @@ class StorageArrayElementNode extends ArrayElementNode {
 
 		if ( builder.isAvailable( 'storageBuffer' ) === false ) {
 
-			if ( this.node.bufferObject === true && isAssignContext !== true ) {
+			if ( this.node.isPBO === true && isAssignContext !== true && ( this.node.value.isInstancedBufferAttribute || builder.shaderStage !== 'compute' ) ) {
 
 				snippet = builder.generatePBO( this );
 

+ 0 - 1
test/e2e/puppeteer.js

@@ -113,7 +113,6 @@ const exceptionList = [
 	// Awaiting for WebGL backend support
 	'webgpu_clearcoat',
 	'webgpu_compute_audio',
-	"webgpu_compute_birds",
 	'webgpu_compute_texture',
 	'webgpu_compute_texture_pingpong',
 	"webgpu_compute_water",

粤ICP备19079148号