<!-- 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 sampler = device.createSampler();
    let video = new VideoFrame(new ArrayBuffer(16), { codedWidth: 2, codedHeight: 2, format: 'BGRA', timestamp: 0 });
    let externalTexture = device.importExternalTexture({ source: video, colorSpace: 'srgb' });
    let bindGroupLayout = device.createBindGroupLayout({
        entries: [
            { binding: 1, visibility: GPUShaderStage.FRAGMENT, externalTexture: {} },
            { binding: 0, visibility: GPUShaderStage.FRAGMENT, sampler: {} },
        ],
    });
    let bindGroup = device.createBindGroup({
        layout: bindGroupLayout,
        entries: [
            { binding: 1, resource: externalTexture },
            { binding: 0, resource: sampler }
        ],
    });
    await device.queue.onSubmittedWorkDone();
    debug('Pass')
    globalThis.testRunner?.notifyDone();
}
globalThis.testRunner?.dumpAsText();
globalThis.testRunner?.waitUntilDone();

run();
</script>

