GPUDevice
=========

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

WebGPU API 的 **`GPUDevice`** 接口表示一个逻辑 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` 使用的更多示例，请参阅上面列出的每个成员页面和以下的演示网站：

* 基础的计算示例
* 基础的渲染示例
* WebGPU 示例
规范
--

| Specification |
| --- |
| WebGPU # gpudevice |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* WebGPU API