GPUQueue

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

注意:此功能在 Web Workers 中可用。

GPUQueue 介面是 WebGPU API 的一部分,用於控制 GPU 上已編碼命令的執行。

可以透過 GPUDevice.queue 屬性訪問裝置的**主佇列**。

例項屬性

label

一個字串,提供可用於識別物件的標籤,例如在 GPUError 訊息或控制檯警告中。

例項方法

copyExternalImageToTexture()

將從源影像、影片或 Canvas 捕獲的快照複製到指定的 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
# gpuqueue

瀏覽器相容性

另見