GPUDevice

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

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

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

EventTarget GPUDevice

实例属性

从其父接口 EventTarget 继承属性。

features 实验性 只读

GPUSupportedFeatures 对象,其描述了由设备支持的额外功能。

label 实验性

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

limits 实验性 只读

GPUSupportedLimits 对象,其描述了由设备支持的限制。

lost 实验性 只读

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

queue 实验性 只读

返回设备主要的 GPUQueue

实例方法

从其父接口 EventTarget 继承方法。

createBindGroup() 实验性

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

createBindGroupLayout() 实验性

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

createBuffer() 实验性

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

createCommandEncoder() 实验性

创建一个 GPUCommandEncoder,用于将要发给 GPU 的指令编码。

createComputePipeline() 实验性

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

createComputePipelineAsync() 实验性

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

createPipelineLayout() 实验性

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

createQuerySet() 实验性

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

createRenderBundleEncoder() 实验性

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

createRenderPipeline() 实验性

创建一个 GPURenderPipeline,其可以控制顶点或片元着色器阶段,并用于 GPURenderPassEncoderGPURenderBundleEncoder

createRenderPipelineAsync() 实验性

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

createSampler() 实验性

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

createShaderModule() 实验性

创建一个 GPUShaderModule,其用 WGSL 源码字符串创建。

createTexture() 实验性

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

destroy() 实验性

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

importExternalTexture() 实验性

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

popErrorScope() 实验性

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

pushErrorScope() 实验性

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

事件

uncapturederror 实验性

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

示例

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

参见