export const description = ` API operations tests for clearBuffer. `; import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { AllFeaturesMaxLimitsGPUTest } from '../../../gpu_test.js'; export const g = makeTestGroup(AllFeaturesMaxLimitsGPUTest); g.test('clear') .desc( `Validate the correctness of the clear by filling the srcBuffer with testable data, doing clearBuffer(), and verifying the content of the whole srcBuffer with MapRead: Clear {4 bytes, part of, the whole} buffer {with, without} a non-zero valid offset that - covers the whole buffer - covers the beginning of the buffer - covers the end of the buffer - covers neither the beginning nor the end of the buffer` ) .paramsSubcasesOnly(u => u // .combine('offset', [0, 4, 8, 16, undefined]) .combine('size', [0, 4, 8, 16, undefined]) .expand('bufferSize', p => [ (p.offset ?? 0) + (p.size ?? 16), (p.offset ?? 0) + (p.size ?? 16) + 8, ]) ) .fn(t => { const { offset, size, bufferSize } = t.params; const bufferData = new Uint8Array(bufferSize); for (let i = 0; i < bufferSize; ++i) { bufferData[i] = i + 1; } const buffer = t.makeBufferWithContents( bufferData, GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC ); const encoder = t.device.createCommandEncoder(); encoder.clearBuffer(buffer, offset, size); t.device.queue.submit([encoder.finish()]); const expectOffset = offset ?? 0; const expectSize = size ?? bufferSize - expectOffset; for (let i = 0; i < expectSize; ++i) { bufferData[expectOffset + i] = 0; } t.expectGPUBufferValuesEqual(buffer, bufferData); });