GPUQueue
GPUQueue
是 WebGPU API 的一个接口,用于控制在 GPU 上执行编码命令。
可以通过 GPUDevice.queue
属性访问设备的主队列。
实例属性
实例方法
copyExternalImageToTexture()
实验性-
将从源图像、视频或画布中截取的快照复制到给定的
GPUTexture
中。 onSubmittedWorkDone()
实验性-
返回一个
Promise
,当通过此GPUQueue
提交给 GPU 的所有工作(在调用此方法时)都已处理完成时,该 Promise 将被解决。 submit()
实验性-
通过 GPU 调度一个或多个
GPUCommandBuffer
对象表示的命令缓冲区执行。 writeBuffer()
实验性-
将提供的源数据写入给定的
GPUBuffer
中。 writeTexture()
实验性-
将提供的數據源写入给定的
GPUTexture
。
示例
在我们的 基本渲染演示 中,我们定义了一些顶点数据,这些数据存储在 Float32Array
中,我们将用它们来绘制一个三角形。
js
const vertices = new Float32Array([
0.0, 0.6, 0, 1, 1, 0, 0, 1, -0.5, -0.6, 0, 1, 0, 1, 0, 1, 0.5, -0.6, 0, 1, 0,
0, 1, 1,
]);
为了在渲染管线中使用这些数据,我们需要将它们放到一个 GPUBuffer
中。首先,我们将创建缓冲区。
js
const vertexBuffer = device.createBuffer({
size: vertices.byteLength, // make it big enough to store vertices in
usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
});
为了将数据放入缓冲区,我们可以使用 writeBuffer()
函数,该函数允许用户代理确定将数据复制过来的最有效方式。
js
device.queue.writeBuffer(vertexBuffer, 0, vertices, 0, vertices.length);
稍后,一组命令将使用 GPUCommandEncoder.finish()
方法编码到 GPUCommandBuffer
中。然后,命令缓冲区通过 submit()
调用传递到队列中,准备由 GPU 处理。
js
device.queue.submit([commandEncoder.finish()]);
注意: 请研究 WebGPU 示例,以查找更多队列示例。
规范
规范 |
---|
WebGPU # gpu-queue |
浏览器兼容性
BCD 表格仅在浏览器中加载