gfx-rs/wgpu · error

plane-based external textures are unsupported on WebGPU; use

Error message

plane-based external textures are unsupported on WebGPU; use Device::import_external_texture

What it means

Panic from create_external_texture on the WebGPU backend: the browser constructs external textures directly from a video source, not from plane textures, so the plane-list signature is unimplemented. The faulty input is the planes-based construction on WASM.

Source

Thrown at wgpu/src/backend/webgpu.rs:2605

            drop_guard: None,
            ident: crate::cmp::Identifier::create(),
            desc: crate::TextureDescriptor {
                label: None,
                view_formats: &[],
                ..desc.clone()
            },
        }
        .into()
    }

    fn create_external_texture(
        &self,
        _desc: &crate::ExternalTextureDescriptor<'_>,
        _planes: &[&crate::TextureView],
    ) -> dispatch::DispatchExternalTexture {
        // The browser builds external textures from a video source, not from
        // plane textures. Use `Device::import_external_texture` on this backend.
        unimplemented!(
            "plane-based external textures are unsupported on WebGPU; use Device::import_external_texture"
        );
    }

    fn create_blas(
        &self,
        _desc: &crate::CreateBlasDescriptor<'_>,
        _sizes: crate::BlasGeometrySizeDescriptors,
    ) -> (Option<u64>, dispatch::DispatchBlas) {
        unimplemented!("Raytracing not implemented for web");
    }

    fn create_tlas(&self, _desc: &crate::CreateTlasDescriptor<'_>) -> dispatch::DispatchTlas {
        unimplemented!("Raytracing not implemented for web");
    }

    fn create_sampler(&self, desc: &crate::SamplerDescriptor<'_>) -> dispatch::DispatchSampler {
        let mapped_desc = webgpu_sys::GpuSamplerDescriptor::new();

View on GitHub (pinned to 3e11ff59bf)

Solutions

  1. On the web, use Device::import_external_texture with an HTMLVideoElement or VideoFrame source instead of plane textures
  2. Use the plane-based API only on native backends
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at wgpu/src/backend/webgpu.rs:2605 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of gfx-rs/wgpu@3e11ff59bf (2026-09-03). Data as JSON: /api/errors/7b95d85b0e345801. Report an issue: GitHub.