GPUDevice
Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.
Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.
The GPUDevice interface of the WebGPU API represents a logical GPU device. This is the main interface through which the majority of WebGPU functionality is accessed.
A GPUDevice object is requested using the GPUAdapter.requestDevice() method.
Instance properties
Inherits properties from its parent, EventTarget.
featuresExperimental Read only-
A
GPUSupportedFeaturesobject that describes additional functionality supported by the device. labelExperimental-
A string providing a label that can be used to identify the object, for example in
GPUErrormessages or console warnings. limitsExperimental Read only-
A
GPUSupportedLimitsobject that describes the limits supported by the device. lostExperimental Read only-
Contains a
Promisethat remains pending throughout the device's lifetime and resolves with aGPUDeviceLostInfoobject when the device is lost. queueExperimental Read only-
Returns the primary
GPUQueuefor the device.
Instance methods
Inherits methods from its parent, EventTarget.
createBindGroup()Experimental-
Creates a
GPUBindGroupbased on aGPUBindGroupLayoutthat defines a set of resources to be bound together in a group and how those resources are used in shader stages. createBindGroupLayout()Experimental-
Creates a
GPUBindGroupLayoutthat defines the structure and purpose of related GPU resources such as buffers that will be used in a pipeline, and is used as a template when creatingGPUBindGroups. createBuffer()Experimental-
Creates a
GPUBufferin which to store raw data to use in GPU operations. createCommandEncoder()Experimental-
Creates a
GPUCommandEncoder, which is used to encode commands to be issued to the GPU. createComputePipeline()Experimental-
Creates a
GPUComputePipelinethat can control the compute shader stage and be used in aGPUComputePassEncoder. createComputePipelineAsync()Experimental-
Returns a
Promisethat fulfills with aGPUComputePipeline, which can control the compute shader stage and be used in aGPUComputePassEncoder, once the pipeline can be used without any stalling. createPipelineLayout()Experimental-
Creates a
GPUPipelineLayoutthat defines theGPUBindGroupLayouts used by a pipeline.GPUBindGroups used with the pipeline during command encoding must have compatibleGPUBindGroupLayouts. createQuerySet()Experimental-
Creates a
GPUQuerySetthat can be used to record the results of queries on passes, such as occlusion or timestamp queries. createRenderBundleEncoder()Experimental-
Creates a
GPURenderBundleEncoderthat can be used to pre-record bundles of commands. These can be reused inGPURenderPassEncoders via theexecuteBundles()method, as many times as required. createRenderPipeline()Experimental-
Creates a
GPURenderPipelinethat can control the vertex and fragment shader stages and be used in aGPURenderPassEncoderorGPURenderBundleEncoder. createRenderPipelineAsync()Experimental-
Returns a
Promisethat fulfills with aGPURenderPipeline, which can control the vertex and fragment shader stages and be used in aGPURenderPassEncoderorGPURenderBundleEncoder, once the pipeline can be used without any stalling. createSampler()Experimental-
Creates a
GPUSampler, which controls how shaders transform and filter texture resource data. createShaderModule()Experimental-
Creates a
GPUShaderModulefrom a string of WGSL source code. createTexture()Experimental-
Creates a
GPUTexturein which to store texture data to use in GPU rendering operations. destroy()Experimental-
Destroys the device, preventing further operations on it.
importExternalTexture()Experimental-
Takes an
HTMLVideoElementas an input and returns aGPUExternalTexturewrapper object containing a snapshot of the video that can be used in GPU rendering operations. popErrorScope()Experimental-
Pops an existing GPU error scope from the error scope stack and returns a
Promisethat resolves to an object (GPUInternalError,GPUOutOfMemoryError, orGPUValidationError) describing the first error captured in the scope, ornullif no error occurred. pushErrorScope()Experimental-
Pushes a new GPU error scope onto the device's error scope stack, allowing you to capture errors of a particular type.
Events
uncapturederrorExperimental-
Fired when an error is thrown that has not been observed by a GPU error scope, to provide a way to report unexpected errors. Known error cases should be handled using
pushErrorScope()andpopErrorScope().
Examples
async function init() {
if (!navigator.gpu) {
throw Error("WebGPU not supported.");
}
const adapter = await navigator.gpu.requestAdapter();
if (!adapter) {
throw Error("Couldn't request WebGPU adapter.");
}
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({
code: shaders,
});
//...
}
See the individual member pages listed above and the following demo sites for a lot more examples of GPUDevice usage:
Specifications
| Specification |
|---|
| WebGPU # gpudevice |
Browser compatibility
BCD tables only load in the browser
See also
- The WebGPU API