GPUComputePassEncoder
注意:此功能在 Web Workers 中可用。
GPUComputePassEncoder 接口是 WebGPU API 的一部分,用于编码与控制计算着色器阶段相关的命令,这些命令由 GPUComputePipeline 发出。它构成了 GPUCommandEncoder 的整体编码活动的一部分。
计算管道包含一个单一的计算阶段,在该阶段,计算着色器接收通用数据,跨指定数量的工作组并行处理这些数据,然后将结果返回到一个或多个缓冲区中。
GPUComputePassEncoder 对象实例通过 GPUCommandEncoder.beginComputePass() 属性创建。
实例属性
实例方法
- 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 | 
浏览器兼容性
加载中…