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

浏览器兼容性

另见