GPUDevice

实验性: 这是一项实验性技术
在将其用于生产之前,请仔细检查浏览器兼容性表格

WebGPU APIGPUDevice 接口表示一个逻辑 GPU 设备。这是访问大部分 WebGPU 功能的主要接口。

使用 GPUAdapter.requestDevice() (en-US) 方法请求 GPUDevice 对象。

EventTarget GPUDevice

实例属性

从其父接口 EventTarget 继承属性。

features (en-US) 实验性 只读

GPUSupportedFeatures (en-US) 对象,其描述了由设备支持的额外功能。

label (en-US) 实验性

字符串,其提供了用于标识对象的标签,例如在 GPUError (en-US) 信息或控制台警告中。

limits (en-US) 实验性 只读

GPUSupportedLimits (en-US) 对象,其描述了由设备支持的限制。

lost (en-US) 实验性 只读

包含一个 Promise,该 promise 在设备的整个生命周期内一直保留待定状态,当失去设备时,会兑现为 GPUDeviceLostInfo (en-US)

queue (en-US) 实验性 只读

返回设备主要的 GPUQueue (en-US)

实例方法

从其父接口 EventTarget 继承方法。

createBindGroup() (en-US) 实验性

基于 GPUBindGroupLayout (en-US) 创建一个 GPUBindGroup (en-US),该组定义了一组要绑定在一起的资源,以及如何在着色阶段使用这些资源。

createBindGroupLayout() (en-US) 实验性

创建一个 GPUBindGroupLayout (en-US),其定义了相关 GPU 资源的结构和目的,例如将在管线中使用的缓冲区,并在创建 GPUBindGroup (en-US) 时用作模版。

createBuffer() (en-US) 实验性

创建一个 GPUBuffer (en-US),在其中存储用于 GPU 运算的原始数据。

createCommandEncoder() (en-US) 实验性

创建一个 GPUCommandEncoder (en-US),用于将要发给 GPU 的指令编码。

createComputePipeline() (en-US) 实验性

创建一个 GPUComputePipeline (en-US),可以控制计算着色阶段,并用于 GPUComputePassEncoder (en-US)

createComputePipelineAsync() (en-US) 实验性

返回一个 Promise,会兑现一个 GPUComputePipeline (en-US),一旦管线可以在没有任何停滞的情况下使用,其可以控制计算着色阶段,并用于 GPUComputePassEncoder (en-US)

createPipelineLayout() (en-US) 实验性

创建一个 GPUPipelineLayout (en-US),其定义了管线使用的 GPUBindGroupLayout (en-US)。在指令编码期间,与管线一起使用的 GPUBindGroup (en-US) 必须具有兼容的 GPUBindGroupLayout (en-US)

createQuerySet() (en-US) 实验性

创建一个 GPUQuerySet (en-US),其可以用于录制通道中的查询结果,例如例如遮挡或时间戳查询。

createRenderBundleEncoder() (en-US) 实验性

创建一个 GPURenderBundleEncoder (en-US),其可用于预先录制指令的 bundle。可以根据需要多次,通过 executeBundles() (en-US) 方法在 GPURenderPassEncoder (en-US) 中重复使用。

createRenderPipeline() (en-US) 实验性

创建一个 GPURenderPipeline (en-US),其可以控制顶点或片元着色器阶段,并用于 GPURenderPassEncoder (en-US)GPURenderBundleEncoder (en-US)

createRenderPipelineAsync() (en-US) 实验性

返回一个 Promise,会兑现一个 GPURenderPipeline (en-US),一旦管线可以在没有任何停滞的情况下使用,其可以控制顶点或片元着色器阶段,并用于 GPURenderPassEncoder (en-US)GPURenderBundleEncoder (en-US)

createSampler() (en-US) 实验性

创建一个 GPUSampler (en-US),其控制着色器如何转换并过滤纹理资源数据。

createShaderModule() (en-US) 实验性

创建一个 GPUShaderModule (en-US),其用 WGSL 源码字符串创建。

createTexture() (en-US) 实验性

创建一个 GPUTexture (en-US),在其中存储用于 GPU 渲染操作的纹理数据。

destroy() (en-US) 实验性

销毁设备,防止对它进行进一步操作。

importExternalTexture() (en-US) 实验性

HTMLVideoElement 作为输入,并返回一个 GPUExternalTexture (en-US) 包装器对象,其中包含可用于 GPU 渲染操作的视频快照。

popErrorScope() (en-US) 实验性

从错误范围堆栈中弹出一个现有的 GPU 错误作用域,并返回一个 Promise,会兑现为一个对象(GPUInternalError (en-US)GPUOutOfMemoryError (en-US)GPUValidationError (en-US)),描述作用域中捕获的第一个错误,如果没有发生错误,则为 null

pushErrorScope() (en-US) 实验性

将新的 GPU 错误作用域推入到设备的错误作用域栈上,允许你捕获特定类型的错误。

事件

uncapturederror (en-US) 实验性

当抛出 GPU 错误作用域未观察到的错误时触发,以提供报告意外错误的方式。已知的错误情况应使用 pushErrorScope() (en-US)popErrorScope() (en-US) 处理。

示例

js
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,
  });

  //...
}

有关 GPUDevice 使用的更多示例,请参阅上面列出的每个成员页面和以下的演示网站:

规范

Specification
WebGPU
# gpudevice

浏览器兼容性

BCD tables only load in the browser

参见