blob: a1b62fbee43933cfe6e1afa855ffdbebc3818461 [file]
<!-- webkit-test-runner [ enableMetalDebugDevice=true ] -->
<script src="../../../resources/js-test-pre.js"></script>
<script>
async function run() {
let adapter = await navigator.gpu.requestAdapter()
let device = await adapter.requestDevice()
let texture = device.createTexture({ size: { width: 15, depthOrArrayLayers: 1 }, dimension: '3d', format: 'rg32sint', usage: GPUTextureUsage.RENDER_ATTACHMENT });
let textureView = texture.createView();
let buffer = device.createBuffer({ size: 11456, usage: GPUBufferUsage.INDIRECT });
let buffer2 = device.createBuffer({ size: 80, usage: GPUBufferUsage.VERTEX });
let buffer3 = device.createBuffer({ size: 2131, usage: GPUBufferUsage.INDEX });
let pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [] });
let shaderModule = device.createShaderModule({ code: `
fn r(v: f32) -> f32 { return v; }
fn al(v: u32) -> u32 { return v; }
var<private> y: array<array<array<z, 1>, 1>, 2> = array(array(array(z())), array<array<z, 1>, 1>());
struct z {
@location(0) i: vec4i
}
@fragment fn fragment1() -> z {
var ag: z;
let ak: ptr<private, array<z, 1>> = &y[1][u32(al(203))];
y[pack4x8snorm(saturate(vec4f(0.1093, 0.1074, 0.1643, r(0.08611))))][al(270)][al(302)].i ^= vec4i(ak[0].i);
return ag;
}
@vertex fn s() -> @builtin(position) vec4f {
return vec4f();
}
`});
let commandEncoder = device.createCommandEncoder();
let renderPassEncoder = commandEncoder.beginRenderPass({ colorAttachments: [{ view: textureView, depthSlice: 0, loadOp: 'load', storeOp: 'discard' }] });
renderPassEncoder.setVertexBuffer(0, buffer2);
renderPassEncoder.setIndexBuffer(buffer3, 'uint16', 2_130);
let renderPipeline = device.createRenderPipeline({
layout: pipelineLayout,
fragment: { module: shaderModule, targets: [{ format: 'rg32sint', writeMask: GPUColorWrite.RED }] },
vertex: {
module: shaderModule,
buffers: [
{
arrayStride: 148,
attributes: [
{ format: 'float32x2', offset: 8, shaderLocation: 0 },
]
}
]
}
});
renderPassEncoder.setPipeline(renderPipeline);
renderPassEncoder.drawIndexedIndirect(buffer, 2_468);
await device.queue.onSubmittedWorkDone();
debug('Pass')
globalThis.testRunner?.notifyDone();
}
globalThis.testRunner?.dumpAsText();
globalThis.testRunner?.waitUntilDone();
run();
</script>