GPUCommandEncoder: beginComputePass() 方法

可用性有限

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

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

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

GPUCommandEncoder 介面的 beginComputePass() 方法用於開始編碼一個計算通道,並返回一個 GPUComputePassEncoder 物件,該物件可用於控制計算。

語法

js
beginComputePass()
beginComputePass(descriptor)

引數

descriptor 可選

包含以下屬性的物件:

label 可選

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

timestampWrites 可選

一個物件陣列,用於定義時間戳查詢值在此通道中寫入的位置和時間。這些物件具有以下屬性:

querySet

一個型別為 "timestamp"GPUQuerySet 物件,時間戳查詢結果將被寫入其中。

beginningOfPassWriteIndex

一個數字,指定在 querySet 中用於寫入渲染通道開始處時間戳的查詢索引。此項是可選的 - 如果未定義,則不會為通道的開始處寫入時間戳。

endOfPassWriteIndex

一個數字,指定在 querySet 中用於寫入渲染通道結束處時間戳的查詢索引。此項是可選的 - 如果未定義,則不會為通道的結束處寫入時間戳。

注意: 要使用時間戳查詢,需要啟用 timestamp-query 功能。時間戳查詢值以納秒為單位寫入,但具體值的確定方式取決於具體實現。

返回值

一個 GPUComputePassEncoder 物件例項。

驗證

呼叫 beginComputePass() 時必須滿足以下條件,否則將生成 GPUValidationError 並返回一個無效的 GPUComputePassEncoder 物件。

  • GPUDevice 中啟用了 timestamp-query 功能

示例

在我們的 基礎計算演示 中,透過 GPUCommandEncoder 記錄了多個命令。其中大多數命令都源自透過 beginComputePass() 建立的 GPUComputePassEncoder

js
// …

// Create GPUCommandEncoder to encode commands to issue to the GPU
const commandEncoder = device.createCommandEncoder();

// Initiate render pass
const passEncoder = commandEncoder.beginComputePass();

// Issue commands
passEncoder.setPipeline(computePipeline);
passEncoder.setBindGroup(0, bindGroup);
passEncoder.dispatchWorkgroups(Math.ceil(BUFFER_SIZE / 64));

// End the render 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
# dom-gpucommandencoder-begincomputepass

瀏覽器相容性

另見