GPUComputePassEncoder

实验性: 这是一项 实验性技术
在生产环境中使用此功能之前,请仔细查看 浏览器兼容性表

安全上下文: 此功能仅在 安全上下文(HTTPS)中可用,并且仅在某些或所有 支持的浏览器 中可用。

GPUComputePassEncoderWebGPU 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

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅