GPUDevice
>WebGPU API 的 GPUDevice 接口表示一个逻辑 GPU 设备。这是访问大部分 WebGPU 功能的主要接口。
使用 GPUAdapter.requestDevice() 方法请求 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,其可以控制顶点或片元着色器阶段,并用于GPURenderPassEncoder或GPURenderBundleEncoder。 createRenderPipelineAsync()-
返回一个
Promise,会兑现一个GPURenderPipeline,一旦管线可以在没有任何停滞的情况下使用,其可以控制顶点或片元着色器阶段,并用于GPURenderPassEncoder或GPURenderBundleEncoder。 createSampler()-
创建一个
GPUSampler,其控制着色器如何转换并过滤纹理资源数据。 createShaderModule()-
创建一个
GPUShaderModule,其用 WGSL 源码字符串创建。 createTexture()-
创建一个
GPUTexture,在其中存储用于 GPU 渲染操作的纹理数据。 destroy()-
销毁设备,防止对它进行进一步操作。
importExternalTexture()-
将
HTMLVideoElement作为输入,并返回一个GPUExternalTexture包装器对象,其中包含可用于 GPU 渲染操作的视频快照。 popErrorScope()-
从错误范围堆栈中弹出一个现有的 GPU 错误作用域,并返回一个 Promise,会兑现为一个对象(
GPUInternalError、GPUOutOfMemoryError或GPUValidationError),描述作用域中捕获的第一个错误,如果没有发生错误,则为null。 pushErrorScope()-
将新的 GPU 错误作用域推入到设备的错误作用域栈上,允许你捕获特定类型的错误。
事件
uncapturederror-
当抛出 GPU 错误作用域未观察到的错误时触发,以提供报告意外错误的方式。已知的错误情况应使用
pushErrorScope()和popErrorScope()处理。
示例
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> # gpudevice> |