blob: 92ae6993d65afa300cb8bd1a6436525a1121cb23 [file]
<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: 1, }, dimension: '3d', format: 'rg8unorm', usage: GPUTextureUsage.RENDER_ATTACHMENT });
let bindGroupLayout = device.createBindGroupLayout({
entries: [
{ binding: 0, visibility: GPUShaderStage.VERTEX, externalTexture: {}, buffer: { hasDynamicOffset: true } },
{ binding: 1, visibility: GPUShaderStage.VERTEX, buffer: { hasDynamicOffset: true } }
]
});
let pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [bindGroupLayout] });
let shaderModule = device.createShaderModule({ code: `
struct FragmentOutput0 {
@location(0) f0: vec3<f32>
}
@fragment fn fragment0() -> FragmentOutput0 {
return FragmentOutput0();
}
@vertex fn vertex0() -> @builtin(position) vec4f {
return vec4f();
}
`});
let buffer = device.createBuffer({ size: 1, usage: GPUBufferUsage.UNIFORM });
let pipeline = await device.createRenderPipelineAsync({
layout: pipelineLayout,
fragment: { module: shaderModule, targets: [{ format: 'rg8unorm' }] },
vertex: { module: shaderModule, buffers: [{ arrayStride: 8, attributes: [] }] }
});
let textureView = texture.createView();
let commandEncoder = device.createCommandEncoder();
let renderPassEncoder = commandEncoder.beginRenderPass({
colorAttachments: [{ view: textureView, depthSlice: 0, loadOp: 'load', storeOp: 'discard' }],
});
let videoFrame = new VideoFrame(new ArrayBuffer(6), { codedWidth: 2, codedHeight: 2, format: 'I420', timestamp: 0 });
let externalTexture = device.importExternalTexture({ source: videoFrame });
renderPassEncoder.setPipeline(pipeline)
let bindGroupLayout2 = device.createBindGroupLayout({
entries: [{ binding: 0, visibility: GPUShaderStage.FRAGMENT, buffer: { hasDynamicOffset: true } }]
});
buffer.destroy();
let bindGroup = device.createBindGroup({
layout: bindGroupLayout2,
entries: [{ binding: 0, resource: { buffer: buffer } }]
});
renderPassEncoder.setBindGroup(0, bindGroup, [0]);
renderPassEncoder.drawIndexed(0);
await device.queue.onSubmittedWorkDone();
debug('Pass')
globalThis.testRunner?.notifyDone();
}
globalThis.testRunner?.dumpAsText();
globalThis.testRunner?.waitUntilDone();
run();
</script>