Explorar el Código

WebGPUBackend: Fix Timestamp Query (#30299)

* fix

* await
ycw hace 1 año
padre
commit
5fb35c77b9
Se han modificado 1 ficheros con 15 adiciones y 18 borrados
  1. 15 18
      src/renderers/webgpu/WebGPUBackend.js

+ 15 - 18
src/renderers/webgpu/WebGPUBackend.js

@@ -1468,23 +1468,23 @@ class WebGPUBackend extends Backend {
 
 		const renderContextData = this.get( renderContext );
 
-		if ( ! renderContextData.timestampQuerySet ) {
+		// init query set if not exists
 
+		if ( ! renderContextData.timestampQuerySet ) {
 
 			const type = renderContext.isComputeNode ? 'compute' : 'render';
-			const timestampQuerySet = this.device.createQuerySet( { type: 'timestamp', count: 2, label: `timestamp_${type}_${renderContext.id}` } );
 
-			const timestampWrites = {
-				querySet: timestampQuerySet,
-				beginningOfPassWriteIndex: 0, // Write timestamp in index 0 when pass begins.
-				endOfPassWriteIndex: 1, // Write timestamp in index 1 when pass ends.
-			};
+			renderContextData.timestampQuerySet = this.device.createQuerySet( { type: 'timestamp', count: 2, label: `timestamp_${type}_${renderContext.id}` } );
 
-			Object.assign( descriptor, { timestampWrites } );
+		}
 
-			renderContextData.timestampQuerySet = timestampQuerySet;
+		// augment descriptor
 
-		}
+		descriptor.timestampWrites = {
+			querySet: renderContextData.timestampQuerySet,
+			beginningOfPassWriteIndex: 0, // Write timestamp in index 0 when pass begins.
+			endOfPassWriteIndex: 1, // Write timestamp in index 1 when pass ends.
+		};
 
 	}
 
@@ -1553,18 +1553,15 @@ class WebGPUBackend extends Backend {
 
 		if ( resultBuffer.mapState === 'unmapped' ) {
 
-			resultBuffer.mapAsync( GPUMapMode.READ ).then( () => {
-
-				const times = new BigUint64Array( resultBuffer.getMappedRange() );
-				const duration = Number( times[ 1 ] - times[ 0 ] ) / 1000000;
-
+			await resultBuffer.mapAsync( GPUMapMode.READ );
 
-				this.renderer.info.updateTimestamp( type, duration );
+			const times = new BigUint64Array( resultBuffer.getMappedRange() );
+			const duration = Number( times[ 1 ] - times[ 0 ] ) / 1000000;
 
-				resultBuffer.unmap();
 
+			this.renderer.info.updateTimestamp( type, duration );
 
-			} );
+			resultBuffer.unmap();
 
 		}
 

粤ICP备19079148号