@@ -143,7 +143,7 @@ class GpuDataManagerImpl implements GpuDataManager {
143
143
private freeUniformBuffers : Map < number , GPUBuffer [ ] > ;
144
144
145
145
// The external buffers registered users for IO Binding.
146
- private externalBuffers : Map < GPUBuffer , [ GpuDataId , GpuDataId ] > ;
146
+ private externalBuffers : Map < GPUBuffer , GpuDataId > ;
147
147
148
148
// The pendingBuffers for capture graph.
149
149
// a SessionID -> GPUBuffer[] mapping.
@@ -219,41 +219,38 @@ class GpuDataManagerImpl implements GpuDataManager {
219
219
}
220
220
221
221
registerExternalBuffer ( buffer : GPUBuffer , originalSize : number , previousBuffer ?: GPUBuffer ) : number {
222
+ let id : number | undefined ;
222
223
if ( previousBuffer ) {
223
- const ids = this . externalBuffers . get ( previousBuffer ) ;
224
- if ( ids === undefined ) {
224
+ id = this . externalBuffers . get ( previousBuffer ) ;
225
+ if ( id === undefined ) {
225
226
throw new Error ( 'previous buffer is not registered' ) ;
226
227
}
227
228
if ( buffer === previousBuffer ) {
228
229
LOG_DEBUG (
229
230
'verbose' ,
230
231
( ) => `[WebGPU] GpuDataManager.registerExternalBuffer(size=${ originalSize } ) => id=${
231
- ids [ 0 ] } , buffer is the same, skip.`) ;
232
- return ids [ 1 ] ;
232
+ id } , buffer is the same, skip.`) ;
233
+ return id ;
233
234
}
234
235
this . externalBuffers . delete ( previousBuffer ) ;
236
+ } else {
237
+ id = createNewGpuDataId ( ) ;
235
238
}
236
239
237
- const id = createNewGpuDataId ( ) ;
238
240
this . storageCache . set ( id , { gpuData : { id, type : GpuDataType . default , buffer} , originalSize} ) ;
241
+ this . externalBuffers . set ( buffer , id ) ;
239
242
LOG_DEBUG (
240
243
'verbose' ,
241
244
( ) => `[WebGPU] GpuDataManager.registerExternalBuffer(size=${ originalSize } ) => id=${ id } , registered.` ) ;
242
-
243
- // copy the externl data to an internal gpu buffer.
244
- const internalGpuData = this . create ( originalSize ) ;
245
- const internalId = internalGpuData . id ;
246
- this . memcpy ( id , internalId ) ;
247
- this . externalBuffers . set ( buffer , [ id , internalId ] ) ;
248
- return internalId ;
245
+ return id ;
249
246
}
250
247
251
248
unregisterExternalBuffer ( buffer : GPUBuffer ) : void {
252
249
const id = this . externalBuffers . get ( buffer ) ;
253
250
if ( id !== undefined ) {
254
- this . storageCache . delete ( id [ 0 ] ) ;
251
+ this . storageCache . delete ( id ) ;
255
252
this . externalBuffers . delete ( buffer ) ;
256
- LOG_DEBUG ( 'verbose' , ( ) => `[WebGPU] GpuDataManager.unregisterExternalBuffer() => id=${ id [ 0 ] } ` ) ;
253
+ LOG_DEBUG ( 'verbose' , ( ) => `[WebGPU] GpuDataManager.unregisterExternalBuffer() => id=${ id } ` ) ;
257
254
}
258
255
}
259
256
0 commit comments