export const description = ` Validation tests for GPUBuffer.destroy. `; import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { kBufferUsages } from '../../../capability_info.js'; import { GPUConst } from '../../../constants.js'; import { AllFeaturesMaxLimitsGPUTest } from '../../../gpu_test.js'; import * as vtu from '../validation_test_utils.js'; export const g = makeTestGroup(AllFeaturesMaxLimitsGPUTest); g.test('all_usages') .desc('Test destroying buffers of every usage type.') .paramsSubcasesOnly(u => u // .combine('usage', kBufferUsages) ) .fn(t => { const { usage } = t.params; const buf = t.createBufferTracked({ size: 4, usage, }); buf.destroy(); }); g.test('error_buffer') .desc('Test that error buffers may be destroyed without generating validation errors.') .fn(t => { const buf = vtu.getErrorBuffer(t); buf.destroy(); }); g.test('twice') .desc( `Test that destroying a buffer more than once is allowed. - Tests buffers which are mapped at creation or not - Tests buffers with various usages` ) .paramsSubcasesOnly(u => u // .combine('mappedAtCreation', [false, true]) .combineWithParams([ { size: 4, usage: GPUConst.BufferUsage.COPY_SRC }, { size: 4, usage: GPUConst.BufferUsage.MAP_WRITE | GPUConst.BufferUsage.COPY_SRC }, { size: 4, usage: GPUConst.BufferUsage.COPY_DST | GPUConst.BufferUsage.MAP_READ }, ]) ) .fn(t => { const buf = t.createBufferTracked(t.params); buf.destroy(); buf.destroy(); }); g.test('while_mapped') .desc( `Test destroying buffers while mapped or after being unmapped. - Tests {mappable, unmappable mapAtCreation, mappable mapAtCreation} - Tests while {mapped, mapped at creation, unmapped}` ) .paramsSubcasesOnly(u => u // .combine('mappedAtCreation', [false, true]) .combine('unmapBeforeDestroy', [false, true]) .combineWithParams([ { usage: GPUConst.BufferUsage.COPY_SRC }, { usage: GPUConst.BufferUsage.MAP_WRITE | GPUConst.BufferUsage.COPY_SRC }, { usage: GPUConst.BufferUsage.COPY_DST | GPUConst.BufferUsage.MAP_READ }, { usage: GPUConst.BufferUsage.MAP_WRITE | GPUConst.BufferUsage.COPY_SRC, mapMode: GPUConst.MapMode.WRITE, }, { usage: GPUConst.BufferUsage.COPY_DST | GPUConst.BufferUsage.MAP_READ, mapMode: GPUConst.MapMode.READ, }, ]) .unless(p => p.mappedAtCreation === false && p.mapMode === undefined) ) .fn(async t => { const { usage, mapMode, mappedAtCreation, unmapBeforeDestroy } = t.params; const buf = t.createBufferTracked({ size: 4, usage, mappedAtCreation, }); if (mapMode !== undefined) { if (mappedAtCreation) { buf.unmap(); } await buf.mapAsync(mapMode); } if (unmapBeforeDestroy) { buf.unmap(); } buf.destroy(); });