This feature is not Baseline because it does not work in some of the most widely-used browsers.
Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.
Note: This feature is available in Web Workers.
The importExternalTexture() method of the GPUDevice interface takes an HTMLVideoElement or a VideoFrame object as an input and returns a GPUExternalTexture wrapper object containing a snapshot of the video that can be used as a frame in GPU rendering operations.
importExternalTexture(descriptor)
descriptorAn object containing the following properties:
colorSpace OptionalAn enumerated value specifying the color space to use for the video frame. Possible values are "srgb" and "display-p3". If omitted, colorSpace defaults to "srgb".
label OptionalA string providing a label that can be used to identify the object, for example in GPUError messages or console warnings.
sourceThe HTMLVideoElement or VideoFrame source of the video snapshot.
A GPUExternalTexture object instance.
Note that the moment when the GPUExternalTexture object expires (is destroyed) depends on what its source is:
GPUExternalTexture objects with an HTMLVideoElement source expire as soon as they are used (for example in a bind group).GPUExternalTexture objects with an VideoFrame source expire only when the VideoFrame is closed, for example via a VideoFrame.close() call.The following criteria must be met when calling importExternalTexture(), otherwise a GPUValidationError is generated and an invalid GPUExternalTexture object is returned:
SecurityError DOMException
Thrown if the video source data is cross-origin.
In the WebGPU samples Video Uploading sample, an importExternalTexture() call is used as the value of a bind group entry resource, specified when creating a GPUBindGroup via a GPUDevice.createBindGroup() call:
// …
const uniformBindGroup = device.createBindGroup({
layout: pipeline.getBindGroupLayout(0),
entries: [
{
binding: 1,
resource: sampler,
},
{
binding: 2,
resource: device.importExternalTexture({
source: video,
}),
},
],
});
// …
| Specification |
|---|
| WebGPU> # dom-gpudevice-importexternaltexture> |
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | WebView Android | WebView on iOS | |
importExternalTexture |
113Currently supported on ChromeOS, macOS, and Windows only. |
113Currently supported on ChromeOS, macOS, and Windows only. |
141Currently supported on Windows only, in all contexts except for service workers. |
99Currently supported on ChromeOS, macOS, and Windows only. |
26 | 121 | No | 81 | 26 | 25.0 | 121 | 26 |
color_space_display-p3 |
121Currently supported on ChromeOS, macOS, and Windows only. |
121Currently supported on ChromeOS, macOS, and Windows only. |
No | 107Currently supported on ChromeOS, macOS, and Windows only. |
No | 121 | No | 81 | No | 25.0 | 121 | No |
videoframe_source |
116Currently supported on ChromeOS, macOS, and Windows only. |
116Currently supported on ChromeOS, macOS, and Windows only. |
No | 102Currently supported on ChromeOS, macOS, and Windows only. |
26 | 121 | No | 81 | 26 | 25.0 | 121 | 26 |
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/GPUDevice/importExternalTexture