WGSLLanguageFeatures

可用性有限

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

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

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

WebGPU APIWGSLLanguageFeatures 介面是一個 類似 set 的物件,用於報告 WebGPU 實現所支援的 WGSL 語言擴充套件

WGSLLanguageFeatures 物件透過 GPU.wgslLanguageFeatures 屬性訪問。

注意: 並非所有瀏覽器都支援 API 的所有 WGSL 語言擴充套件。建議您在選擇使用的任何擴充套件時進行徹底的測試。

可用功能

以下 WGSL 語言擴充套件在 WGSL 規範的 WGSL 語言擴充套件 中定義。請注意,功能的具體集合在不同實現和物理裝置上會有所不同,並且可能會隨時間而變化。

packed_4x8_integer_dot_product

允許透過 WGSL 程式碼使用 DP4a (Dot Product of 4 Elements and Accumulate) GPU 指令。這些指令可以高效地執行 8 位整數點積運算,以加速計算,節省記憶體和網路頻寬,並提高效能,相比於等效的 f32 版本。它們通常在機器學習模型中用於推理和 AI 框架。

具體來說,當 packed_4x8_integer_dot_product 可用時,WGSL 程式碼可以使用:

  • 打包 4 個 8 位整數的 32 位整數標量,用作點積指令的輸入(透過 dot4U8Packed()dot4I8Packed() 內建函式)。
  • 打包和解包指令,使用打包的 4 個 8 位整數向量(透過 pack4xI8()pack4xI8Clamp() 等內建函式)。
pointer_composite_access

使 WGSL 著色器程式碼能夠使用相同的點(.)語法來訪問複雜資料型別的元件,無論您是直接處理資料還是處理指向它的指標。

pointer_composite_access 可用時:

  • 如果 foo 是一個指標:foo.bar 可用,作為編寫 (*foo).bar 的更便捷方式。通常需要星號(*)將指標轉換為可解引用的“引用”,但現在指標和引用幾乎可以互換使用。
  • 如果 foo 不是指標:點(.)運算子的執行方式與您習慣的直接訪問成員的方式完全相同。
  • 如果 pa 是一個儲存陣列起始地址的指標,則 pa[i] 可以直接訪問儲存該陣列第 i 個元素的記憶體位置。

有關更多詳細資訊和示例,請參閱 WGSL 中解引用複合型別的語法糖

readonly_and_readwrite_storage_textures

當可用時,允許在指定儲存紋理繫結組佈局中的儲存紋理繫結組條目型別時,將 "read-only""read-write" storageTexture.access 值設定為這些。它們分別允許 WGSL 程式碼讀取儲存紋理,以及讀取/寫入儲存紋理。

unrestricted_pointer_parameters

放寬了將指標傳遞給 WGSL 函式的限制。當可用時,允許執行以下操作:

  • 將儲存、統一和工作組地址空間的引數指標傳遞給使用者宣告的函式。

  • 將結構體成員和陣列元素的指標傳遞給使用者宣告的函式。

    有關更多詳細資訊,請參閱 指標作為函式引數

例項屬性

以下屬性適用於所有隻讀的 類似 set 物件:

size

返回 set 中值的數量。

例項方法

以下方法適用於所有隻讀的 類似 set 物件:

has()

返回一個布林值,斷言具有給定值的元素是否存在於 set 中。

values()

返回一個新的迭代器物件,該物件按插入順序產生 set 中每個元素的

keys()

values() 的別名。

entries()

返回一個包含 set 中每個元素的[value, value] 陣列的新迭代器物件,按插入順序排列。

forEach()

按插入順序對 set 中的每個值呼叫一次提供的回撥函式。

示例

檢查擴充套件是否可用

js
if (
  navigator.gpu.wgslLanguageFeatures.has(
    "readonly_and_readwrite_storage_textures",
  )
) {
  console.log("Read-only and read-write storage textures are available");
}

返回 set 的大小並遍歷值

js
const wgslFeatures = navigator.gpu.wgslLanguageFeatures;

// Return the size of the set
console.log(wgslFeatures.size);

// Iterate through all the set values using values()
const valueIterator = wgslFeatures.values();
for (const value of valueIterator) {
  console.log(value);
}

// …

規範

規範
WebGPU
# gpuwgsllanguagefeatures

瀏覽器相容性

另見