blob: d7b5ba45766711740c42c538b8db29d6ffcebfe7 [file] [log] [blame]
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);
});