@@ -445,102 +445,119 @@ g.test('compute,zero_init')
445445 } ,
446446 ] ,
447447 } ) ;
448+
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+ }
448506
449- const fillPipeline = await t . device . createComputePipelineAsync ( {
450- layout : t . device . createPipelineLayout ( { bindGroupLayouts : [ fillLayout ] } ) ,
451- label : 'Workgroup Fill Pipeline ' ,
507+ try {
508+ const pipeline = await t . device . createComputePipelineAsync ( {
509+ layout : 'auto ' ,
452510 compute : {
453511 module : t . device . createShaderModule ( {
454512 code : wgsl ,
455513 } ) ,
456- entryPoint : 'fill ' ,
514+ entryPoint : 'main ' ,
457515 } ,
458516 } ) ;
459517
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 ,
467520 usage : GPUBufferUsage . STORAGE | GPUBufferUsage . COPY_SRC ,
468521 } ) ;
469- t . trackForCleanup ( outputBuffer ) ;
522+ t . trackForCleanup ( resultBuffer ) ;
523+
524+ const zeroBuffer = t . device . createBuffer ( {
525+ size : 4 ,
526+ usage : GPUBufferUsage . UNIFORM ,
527+ } ) ;
528+ t . trackForCleanup ( zeroBuffer ) ;
470529
471- const bg = t . device . createBindGroup ( {
472- layout : fillPipeline . getBindGroupLayout ( 0 ) ,
530+ const bindGroup = t . device . createBindGroup ( {
531+ layout : pipeline . getBindGroupLayout ( 0 ) ,
473532 entries : [
474533 {
475534 binding : 0 ,
476535 resource : {
477- buffer : inputBuffer ,
536+ buffer : resultBuffer ,
478537 } ,
479538 } ,
480539 {
481540 binding : 1 ,
482541 resource : {
483- buffer : outputBuffer ,
542+ buffer : zeroBuffer ,
484543 } ,
485544 } ,
486545 ] ,
487546 } ) ;
488547
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+ }
496562 }
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 ] ) ) ;
546563 } ) ;
0 commit comments