diff options
Diffstat (limited to 'dom/webgpu/tests/cts/checkout/src/webgpu/api/operation/command_buffer/basic.spec.ts')
-rw-r--r-- | dom/webgpu/tests/cts/checkout/src/webgpu/api/operation/command_buffer/basic.spec.ts | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/dom/webgpu/tests/cts/checkout/src/webgpu/api/operation/command_buffer/basic.spec.ts b/dom/webgpu/tests/cts/checkout/src/webgpu/api/operation/command_buffer/basic.spec.ts new file mode 100644 index 0000000000..06a15c4e31 --- /dev/null +++ b/dom/webgpu/tests/cts/checkout/src/webgpu/api/operation/command_buffer/basic.spec.ts @@ -0,0 +1,98 @@ +export const description = ` +Basic tests. +`; + +import { makeTestGroup } from '../../../../common/framework/test_group.js'; +import { memcpy } from '../../../../common/util/util.js'; +import { GPUTest } from '../../../gpu_test.js'; + +export const g = makeTestGroup(GPUTest); + +g.test('empty').fn(async t => { + const encoder = t.device.createCommandEncoder(); + const cmd = encoder.finish(); + t.device.queue.submit([cmd]); +}); + +g.test('b2t2b').fn(async t => { + const data = new Uint32Array([0x01020304]); + + const src = t.device.createBuffer({ + mappedAtCreation: true, + size: 4, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, + }); + memcpy({ src: data }, { dst: src.getMappedRange() }); + src.unmap(); + + const dst = t.device.createBuffer({ + size: 4, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, + }); + + const mid = t.device.createTexture({ + size: { width: 1, height: 1, depthOrArrayLayers: 1 }, + format: 'rgba8uint', + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, + }); + + const encoder = t.device.createCommandEncoder(); + encoder.copyBufferToTexture( + { buffer: src, bytesPerRow: 256 }, + { texture: mid, mipLevel: 0, origin: { x: 0, y: 0, z: 0 } }, + { width: 1, height: 1, depthOrArrayLayers: 1 } + ); + encoder.copyTextureToBuffer( + { texture: mid, mipLevel: 0, origin: { x: 0, y: 0, z: 0 } }, + { buffer: dst, bytesPerRow: 256 }, + { width: 1, height: 1, depthOrArrayLayers: 1 } + ); + t.device.queue.submit([encoder.finish()]); + + t.expectGPUBufferValuesEqual(dst, data); +}); + +g.test('b2t2t2b').fn(async t => { + const data = new Uint32Array([0x01020304]); + + const src = t.device.createBuffer({ + mappedAtCreation: true, + size: 4, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, + }); + memcpy({ src: data }, { dst: src.getMappedRange() }); + src.unmap(); + + const dst = t.device.createBuffer({ + size: 4, + usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST, + }); + + const midDesc: GPUTextureDescriptor = { + size: { width: 1, height: 1, depthOrArrayLayers: 1 }, + format: 'rgba8uint', + usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, + }; + const mid1 = t.device.createTexture(midDesc); + const mid2 = t.device.createTexture(midDesc); + + const encoder = t.device.createCommandEncoder(); + encoder.copyBufferToTexture( + { buffer: src, bytesPerRow: 256 }, + { texture: mid1, mipLevel: 0, origin: { x: 0, y: 0, z: 0 } }, + { width: 1, height: 1, depthOrArrayLayers: 1 } + ); + encoder.copyTextureToTexture( + { texture: mid1, mipLevel: 0, origin: { x: 0, y: 0, z: 0 } }, + { texture: mid2, mipLevel: 0, origin: { x: 0, y: 0, z: 0 } }, + { width: 1, height: 1, depthOrArrayLayers: 1 } + ); + encoder.copyTextureToBuffer( + { texture: mid2, mipLevel: 0, origin: { x: 0, y: 0, z: 0 } }, + { buffer: dst, bytesPerRow: 256 }, + { width: 1, height: 1, depthOrArrayLayers: 1 } + ); + t.device.queue.submit([encoder.finish()]); + + t.expectGPUBufferValuesEqual(dst, data); +}); |