GPUQueue: submit() 方法
submit()
方法是 GPUQueue
接口的方法,它安排由一个或多个 GPUCommandBuffer
对象表示的命令缓冲区的执行。
语法
js
submit(commandBuffers)
参数
commandBuffers
-
一个
GPUCommandBuffer
对象数组,包含要排队以供 GPU 处理的命令。
返回值
无 (Undefined
).
验证
调用 submit()
时必须满足以下条件,否则将生成 GPUValidationError
,并且 GPUQueue
将变为无效
- 在编码的命令中使用的任何
GPUBuffer
、GPUTexture
和GPUQuerySet
对象都可供使用,即不可用(如果GPUBuffer
当前 映射,则不可用)或销毁(使用destroy()
方法)。 - 在编码的命令中使用的任何
GPUExternalTexture
对象均未过期(它们会在通过importExternalTexture()
导入后不久自动过期)。 - 如果在编码的命令中使用的
GPUQuerySet
对象的类型为"occlusion"
查询,则它尚未使用,除非由GPURenderPassEncoder.beginOcclusionQuery()
使用。
示例
在我们的 基本渲染演示 中,一些命令通过 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
编码的命令被记录到 GPUCommandBuffer
中,使用 GPUCommandEncoder.finish()
方法。然后,命令缓冲区通过 submit()
调用传递到队列中,准备由 GPU 处理。
js
device.queue.submit([commandEncoder.finish()]);
注意:研究 WebGPU 示例 以查找更多队列示例。
规范
规范 |
---|
WebGPU # dom-gpuqueue-submit |
浏览器兼容性
BCD 表格仅在浏览器中加载
另请参阅
- The WebGPU API