GPUCommandEncoder
注意:此功能在 Web Workers 中可用。
GPUCommandEncoder 接口是 WebGPU API 的一部分,它代表一个命令编码器,用于收集要发送到 GPU 的一系列 GPU 命令。
GPUCommandEncoder 对象实例通过 GPUDevice.createCommandEncoder() 属性创建。
实例属性
实例方法
beginComputePass()-
开始编码一个计算通道,返回一个
GPUComputePassEncoder,可用于控制计算。 beginRenderPass()-
开始编码一个渲染通道,返回一个
GPURenderPassEncoder,可用于控制渲染。 clearBuffer()-
编码一个命令,将
GPUBuffer的一个区域用零填充。 copyBufferToBuffer()-
编码一个命令,将数据从一个
GPUBuffer复制到另一个。 copyBufferToTexture()-
编码一个命令,将数据从
GPUBuffer复制到GPUTexture。 copyTextureToBuffer()-
编码一个命令,将数据从
GPUTexture复制到GPUBuffer。 copyTextureToTexture()-
编码一个命令,将数据从一个
GPUTexture复制到另一个。 finish()-
完成在此
GPUCommandEncoder上编码的命令序列的记录,并返回一个相应的GPUCommandBuffer。 insertDebugMarker()-
使用标签在一系列已编码命令中的特定点进行标记。
popDebugGroup()-
结束一个调试组,该调试组由
pushDebugGroup()调用开始。 pushDebugGroup()-
开始一个调试组,该调试组用指定的标签标记,并包含所有后续编码的命令,直到调用
popDebugGroup()方法为止。 resolveQuerySet()-
编码一个命令,该命令解析一个
GPUQuerySet,并将结果复制到一个指定的GPUBuffer中。 writeTimestamp()非标准 已弃用-
编码一个命令,该命令在同一队列的
GPUCommandBuffer中先前记录的命令已被 GPU 执行后,将一个时间戳写入GPUQuerySet。
示例
在我们的 基本渲染演示 中,通过 GPUCommandEncoder 记录了多个命令。
// …
// Create GPUCommandEncoder
const commandEncoder = device.createCommandEncoder();
// Create GPURenderPassDescriptor to tell WebGPU which texture to draw into, then initiate render pass
const renderPassDescriptor = {
colorAttachments: [
{
clearValue: clearColor,
loadOp: "clear",
storeOp: "store",
view: context.getCurrentTexture().createView(),
},
],
};
const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
// Draw a triangle
passEncoder.setPipeline(renderPipeline);
passEncoder.setVertexBuffer(0, vertexBuffer);
passEncoder.draw(3);
// End the render pass
passEncoder.end();
// …
由 GPUCommandEncoder 编码的命令通过 GPUCommandEncoder.finish() 方法记录到一个 GPUCommandBuffer 中。然后,该命令缓冲区通过 submit() 调用传递到队列,准备由 GPU 进行处理。
device.queue.submit([commandEncoder.finish()]);
注意:请查阅 WebGPU 示例 以查找更多命令编码示例。
规范
| 规范 |
|---|
| WebGPU # gpucommandencoder |
浏览器兼容性
加载中…