| 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); |
| }); |