GPUDevice: createQuerySet() 方法

可用性有限

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

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

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

GPUDevice 介面的 createQuerySet() 方法用於建立一個 GPUQuerySet,該物件可用於記錄傳遞(passes)中的查詢結果,例如遮擋查詢或時間戳查詢。

語法

js
createQuerySet(descriptor)

引數

描述符(descriptor)

包含以下屬性的物件:

計數

一個指定由生成的 GPUQuerySet 管理的查詢數量的數字。

label 可選

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

type

一個列舉值,指定由生成的 GPUQuerySet 管理的查詢型別。可能的值為:

"occlusion"

遮擋查詢(Occlusion queries)在渲染傳遞(render passes)中可用,用於查詢在一組繪圖命令(包括剪刀、樣本掩碼、Alpha 到覆蓋、模板和深度測試)之後,有多少片段樣本通過了所有片段測試。要執行遮擋查詢,必須在呼叫 GPUCommandEncoder.beginRenderPass() 來執行渲染傳遞時,將一個合適的 GPUQuerySet 作為 occlusionQuerySet 描述符屬性的值提供。

"timestamp"

時間戳查詢(Timestamp queries)允許應用程式將時間戳寫入 GPUQuerySet。要執行時間戳查詢,必須在呼叫 GPUCommandEncoder.beginRenderPass() 來執行渲染傳遞,或呼叫 GPUCommandEncoder.beginComputePass() 來執行計算傳遞時,在 timestampWrites 描述符屬性的值中提供合適的 GPUQuerySet。或者,您可以透過呼叫帶有一個合適 GPUQuerySet 作為引數的 GPUCommandEncoder.writeTimeStamp() 來隨時執行單個時間戳查詢。

注意: 要使用時間戳查詢,需要啟用 timestamp-query 功能

返回值

一個 GPUQuerySet 物件例項。

驗證

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

  • count 小於或等於 4096。

示例

以下程式碼片段建立了一個包含 32 個遮擋查詢結果的 GPUQuerySet

js
const querySet = device.createQuerySet({
  type: "occlusion",
  count: 32,
});

規範

規範
WebGPU
# dom-gpudevice-createqueryset

瀏覽器相容性

另見