blob: 3df32bd233fc61fd030d6473c355b15c53769f8e [file]
<!-- webkit-test-runner [ enableMetalShaderValidation=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 bindGroupLayout = device.createBindGroupLayout({
entries: [{
binding: 1,
visibility: GPUShaderStage.COMPUTE | GPUShaderStage.FRAGMENT,
externalTexture: {}
}],
});
let pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [bindGroupLayout] });
let videoFrame = new VideoFrame(new ArrayBuffer(16), { codedWidth: 2, codedHeight: 2, format: 'RGBX', timestamp: 0 });
let shaderModule4 = device.createShaderModule({ code: `
@group(0) @binding(1) var et3: texture_external;
@compute @workgroup_size(1, 1, 1) fn compute4() {
let a = textureLoad(et3, vec2u());
let b = pack4x8unorm(a);
let c = atanh(mat2x2f()[b][0]);
}
`});
let commandEncoder = device.createCommandEncoder();
let computePassEncoder14 = commandEncoder.beginComputePass();
let pipeline1 = device.createComputePipeline({ layout: pipelineLayout, compute: { module: shaderModule4 } });
computePassEncoder14.setPipeline(pipeline1);
let externalTexture = device.importExternalTexture({ source: videoFrame });
let bindGroup1 = device.createBindGroup({ layout: bindGroupLayout, entries: [{ binding: 1, resource: externalTexture }] });
computePassEncoder14.setBindGroup(0, bindGroup1);
let bindGroup2 = device.createBindGroup({ layout: bindGroupLayout, entries: [{ binding: 1, resource: externalTexture }] });
computePassEncoder14.dispatchWorkgroups(1);
computePassEncoder14.end();
let commandBuffer = commandEncoder.finish();
device.queue.submit([commandBuffer]);
await device.queue.onSubmittedWorkDone();
debug('Pass')
globalThis.testRunner?.notifyDone();
}
globalThis.testRunner?.dumpAsText();
globalThis.testRunner?.waitUntilDone();
run();
</script>