| <!-- 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> |
| |