blob: f2271d0debafde3681e6a4865ccd5c91817c94f9 [file] [log] [blame]
/**
* AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts
**/ import { unreachable } from '../../../common/framework/util/util.js';
import { runRefTest } from './gpu_ref_test.js';
// <canvas> element from html page
export function run(format) {
runRefTest(async t => {
const ctx = cvs.getContext('gpupresent');
switch (format) {
case 'bgra8unorm':
case 'rgba16float':
break;
default:
unreachable();
}
const swapChain = ctx.configureSwapChain({
device: t.device,
format,
usage: GPUTextureUsage.COPY_DST,
});
const rows = 2;
const bytesPerRow = 256;
const buffer = t.device.createBuffer({
mappedAtCreation: true,
size: rows * bytesPerRow,
usage: GPUBufferUsage.COPY_SRC,
});
const mapping = buffer.getMappedRange();
switch (format) {
case 'bgra8unorm':
{
const data = new Uint8Array(mapping);
data.set(new Uint8Array([0x00, 0x00, 0x7f, 0xff]), 0); // red
data.set(new Uint8Array([0x00, 0x7f, 0x00, 0xff]), 4); // green
data.set(new Uint8Array([0x7f, 0x00, 0x00, 0xff]), 256 + 0); // blue
data.set(new Uint8Array([0x00, 0x7f, 0x7f, 0xff]), 256 + 4); // yellow
}
break;
case 'rgba16float':
{
// Untested!
const zero = 0x0000;
const half = 0x3800;
const one = 0x3c00;
const data = new DataView(mapping);
data.setUint16(0x000, half, false); // red
data.setUint16(0x002, zero, false);
data.setUint16(0x004, zero, false);
data.setUint16(0x008, one, false);
data.setUint16(0x010, zero, false); // green
data.setUint16(0x020, half, false);
data.setUint16(0x040, zero, false);
data.setUint16(0x080, one, false);
data.setUint16(0x100, zero, false); // blue
data.setUint16(0x102, zero, false);
data.setUint16(0x104, half, false);
data.setUint16(0x108, one, false);
data.setUint16(0x110, half, false); // yellow
data.setUint16(0x120, half, false);
data.setUint16(0x140, zero, false);
data.setUint16(0x180, one, false);
}
break;
}
buffer.unmap();
const texture = swapChain.getCurrentTexture();
const encoder = t.device.createCommandEncoder();
encoder.copyBufferToTexture({ buffer, bytesPerRow }, { texture }, [2, 2, 1]);
t.device.defaultQueue.submit([encoder.finish()]);
});
}