GPUDevice
WebGPU API 的 GPUDevice 接口表示一个逻辑 GPU 设备。这是访问大部分 WebGPU 功能的主要接口。
使用 GPUAdapter.requestDevice() (en-US) 方法请求 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