GPUCommandEncoder

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

注意:此功能在 Web Workers 中可用。

GPUCommandEncoder 接口是 WebGPU API 的一部分,它代表一个命令编码器,用于收集要发送到 GPU 的一系列 GPU 命令。

GPUCommandEncoder 对象实例通过 GPUDevice.createCommandEncoder() 属性创建。

实例属性

label

一个字符串,提供可用于识别对象的标签,例如在 GPUError 消息或控制台警告中。

实例方法

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 记录了多个命令。

js
// …

// 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 进行处理。

js
device.queue.submit([commandEncoder.finish()]);

注意:请查阅 WebGPU 示例 以查找更多命令编码示例。

规范

规范
WebGPU
# gpucommandencoder

浏览器兼容性

另见