GPUComputePassEncoder
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 |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。