GPUComputePassEncoder

可用性有限

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

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

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

GPUComputePassEncoder 接口是 WebGPU API 的一部分,用于编码与控制计算着色器阶段相关的命令,这些命令由 GPUComputePipeline 发出。它构成了 GPUCommandEncoder 的整体编码活动的一部分。

计算管道包含一个单一的计算阶段,在该阶段,计算着色器接收通用数据,跨指定数量的工作组并行处理这些数据,然后将结果返回到一个或多个缓冲区中。

GPUComputePassEncoder 对象实例通过 GPUCommandEncoder.beginComputePass() 属性创建。

实例属性

label

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

实例方法

dispatchWorkgroups()

分派特定网格的工作组来执行当前 GPUComputePipeline 所执行的工作。

dispatchWorkgroupsIndirect()

分派由 GPUBuffer 参数定义的工作组网格,以执行当前 GPUComputePipeline 所执行的工作。

end()

完成当前计算通道命令序列的录制。

insertDebugMarker()

使用标签在一系列已编码命令中的特定点进行标记。

popDebugGroup()

结束一个调试组,该调试组由 pushDebugGroup() 调用开始。

pushDebugGroup()

开始一个调试组,该调试组用指定的标签标记,并将包含所有后续编码的命令,直到调用 popDebugGroup() 方法为止。

setBindGroup()

为给定的索引设置要用于后续计算命令的 GPUBindGroup

setPipeline()

为该计算通道设置要使用的 GPUComputePipeline

示例

在我们 基本的计算演示 中,通过 GPUCommandEncoder 录制了多个命令。其中大多数命令都源自通过 GPUCommandEncoder.beginComputePass() 创建的 GPUComputePassEncoder

js
// …

// Create GPUCommandEncoder to encode commands to issue to the GPU
const commandEncoder = device.createCommandEncoder();

// Create GPUComputePassEncoder to initiate compute pass
const passEncoder = commandEncoder.beginComputePass();

// Issue commands
passEncoder.setPipeline(computePipeline);
passEncoder.setBindGroup(0, bindGroup);
passEncoder.dispatchWorkgroups(Math.ceil(BUFFER_SIZE / 64));

// End the compute pass
passEncoder.end();

// Copy output buffer to staging buffer
commandEncoder.copyBufferToBuffer(
  output,
  0, // Source offset
  stagingBuffer,
  0, // Destination offset
  BUFFER_SIZE,
);

// End frame by passing array of command buffers to command queue for execution
device.queue.submit([commandEncoder.finish()]);

// …

规范

规范
WebGPU
# gpucomputepassencoder

浏览器兼容性

另见