@@ -446,101 +446,118 @@ g.test('compute,zero_init')
446
446
] ,
447
447
} ) ;
448
448
449
- const fillPipeline = await t . device . createComputePipelineAsync ( {
450
- layout : t . device . createPipelineLayout ( { bindGroupLayouts : [ fillLayout ] } ) ,
451
- label : 'Workgroup Fill Pipeline' ,
449
+ try {
450
+ const fillPipeline = await t . device . createComputePipelineAsync ( {
451
+ layout : t . device . createPipelineLayout ( { bindGroupLayouts : [ fillLayout ] } ) ,
452
+ label : 'Workgroup Fill Pipeline' ,
453
+ compute : {
454
+ module : t . device . createShaderModule ( {
455
+ code : wgsl ,
456
+ } ) ,
457
+ entryPoint : 'fill' ,
458
+ } ,
459
+ } ) ;
460
+
461
+ const inputBuffer = t . makeBufferWithContents (
462
+ new Uint32Array ( [ ...iterRange ( wg_memory_limits / 4 , _i => 0xdeadbeef ) ] ) ,
463
+ GPUBufferUsage . STORAGE | GPUBufferUsage . COPY_DST
464
+ ) ;
465
+ t . trackForCleanup ( inputBuffer ) ;
466
+ const outputBuffer = t . device . createBuffer ( {
467
+ size : wg_memory_limits ,
468
+ usage : GPUBufferUsage . STORAGE | GPUBufferUsage . COPY_SRC ,
469
+ } ) ;
470
+ t . trackForCleanup ( outputBuffer ) ;
471
+
472
+ const bg = t . device . createBindGroup ( {
473
+ layout : fillPipeline . getBindGroupLayout ( 0 ) ,
474
+ entries : [
475
+ {
476
+ binding : 0 ,
477
+ resource : {
478
+ buffer : inputBuffer ,
479
+ } ,
480
+ } ,
481
+ {
482
+ binding : 1 ,
483
+ resource : {
484
+ buffer : outputBuffer ,
485
+ } ,
486
+ } ,
487
+ ] ,
488
+ } ) ;
489
+
490
+ const e = t . device . createCommandEncoder ( ) ;
491
+ const p = e . beginComputePass ( ) ;
492
+ p . setPipeline ( fillPipeline ) ;
493
+ p . setBindGroup ( 0 , bg ) ;
494
+ p . dispatchWorkgroups ( 1 ) ;
495
+ p . end ( ) ;
496
+ t . queue . submit ( [ e . finish ( ) ] ) ;
497
+ } catch ( err ) {
498
+ if ( err instanceof GPUPipelineError ) {
499
+ t . fail ( `Pipeline Creation Error, ${ err . reason } : ${ err . message } ` ) ;
500
+ return ;
501
+ } else {
502
+ throw err ;
503
+ }
504
+ }
505
+ }
506
+
507
+ try {
508
+ const pipeline = await t . device . createComputePipelineAsync ( {
509
+ layout : 'auto' ,
452
510
compute : {
453
511
module : t . device . createShaderModule ( {
454
512
code : wgsl ,
455
513
} ) ,
456
- entryPoint : 'fill ' ,
514
+ entryPoint : 'main ' ,
457
515
} ,
458
516
} ) ;
459
517
460
- const inputBuffer = t . makeBufferWithContents (
461
- new Uint32Array ( [ ...iterRange ( wg_memory_limits / 4 , _i => 0xdeadbeef ) ] ) ,
462
- GPUBufferUsage . STORAGE | GPUBufferUsage . COPY_DST
463
- ) ;
464
- t . trackForCleanup ( inputBuffer ) ;
465
- const outputBuffer = t . device . createBuffer ( {
466
- size : wg_memory_limits ,
518
+ const resultBuffer = t . device . createBuffer ( {
519
+ size : 4 ,
467
520
usage : GPUBufferUsage . STORAGE | GPUBufferUsage . COPY_SRC ,
468
521
} ) ;
469
- t . trackForCleanup ( outputBuffer ) ;
522
+ t . trackForCleanup ( resultBuffer ) ;
470
523
471
- const bg = t . device . createBindGroup ( {
472
- layout : fillPipeline . getBindGroupLayout ( 0 ) ,
524
+ const zeroBuffer = t . device . createBuffer ( {
525
+ size : 4 ,
526
+ usage : GPUBufferUsage . UNIFORM ,
527
+ } ) ;
528
+ t . trackForCleanup ( zeroBuffer ) ;
529
+
530
+ const bindGroup = t . device . createBindGroup ( {
531
+ layout : pipeline . getBindGroupLayout ( 0 ) ,
473
532
entries : [
474
533
{
475
534
binding : 0 ,
476
535
resource : {
477
- buffer : inputBuffer ,
536
+ buffer : resultBuffer ,
478
537
} ,
479
538
} ,
480
539
{
481
540
binding : 1 ,
482
541
resource : {
483
- buffer : outputBuffer ,
542
+ buffer : zeroBuffer ,
484
543
} ,
485
544
} ,
486
545
] ,
487
546
} ) ;
488
547
489
- const e = t . device . createCommandEncoder ( ) ;
490
- const p = e . beginComputePass ( ) ;
491
- p . setPipeline ( fillPipeline ) ;
492
- p . setBindGroup ( 0 , bg ) ;
493
- p . dispatchWorkgroups ( 1 ) ;
494
- p . end ( ) ;
495
- t . queue . submit ( [ e . finish ( ) ] ) ;
548
+ const encoder = t . device . createCommandEncoder ( ) ;
549
+ const pass = encoder . beginComputePass ( ) ;
550
+ pass . setPipeline ( pipeline ) ;
551
+ pass . setBindGroup ( 0 , bindGroup ) ;
552
+ pass . dispatchWorkgroups ( 1 ) ;
553
+ pass . end ( ) ;
554
+ t . queue . submit ( [ encoder . finish ( ) ] ) ;
555
+ t . expectGPUBufferValuesEqual ( resultBuffer , new Uint32Array ( [ 0 ] ) ) ;
556
+ } catch ( err ) {
557
+ if ( err instanceof GPUPipelineError ) {
558
+ t . fail ( `Pipeline Creation Error, ${ err . reason } : ${ err . message } ` ) ;
559
+ } else {
560
+ throw err ;
561
+ }
496
562
}
497
-
498
- const pipeline = await t . device . createComputePipelineAsync ( {
499
- layout : 'auto' ,
500
- compute : {
501
- module : t . device . createShaderModule ( {
502
- code : wgsl ,
503
- } ) ,
504
- entryPoint : 'main' ,
505
- } ,
506
- } ) ;
507
-
508
- const resultBuffer = t . device . createBuffer ( {
509
- size : 4 ,
510
- usage : GPUBufferUsage . STORAGE | GPUBufferUsage . COPY_SRC ,
511
- } ) ;
512
- t . trackForCleanup ( resultBuffer ) ;
513
-
514
- const zeroBuffer = t . device . createBuffer ( {
515
- size : 4 ,
516
- usage : GPUBufferUsage . UNIFORM ,
517
- } ) ;
518
- t . trackForCleanup ( zeroBuffer ) ;
519
-
520
- const bindGroup = t . device . createBindGroup ( {
521
- layout : pipeline . getBindGroupLayout ( 0 ) ,
522
- entries : [
523
- {
524
- binding : 0 ,
525
- resource : {
526
- buffer : resultBuffer ,
527
- } ,
528
- } ,
529
- {
530
- binding : 1 ,
531
- resource : {
532
- buffer : zeroBuffer ,
533
- } ,
534
- } ,
535
- ] ,
536
- } ) ;
537
-
538
- const encoder = t . device . createCommandEncoder ( ) ;
539
- const pass = encoder . beginComputePass ( ) ;
540
- pass . setPipeline ( pipeline ) ;
541
- pass . setBindGroup ( 0 , bindGroup ) ;
542
- pass . dispatchWorkgroups ( 1 ) ;
543
- pass . end ( ) ;
544
- t . queue . submit ( [ encoder . finish ( ) ] ) ;
545
- t . expectGPUBufferValuesEqual ( resultBuffer , new Uint32Array ( [ 0 ] ) ) ;
546
563
} ) ;
0 commit comments