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

浏览器兼容性

另见