GPUCommandEncoder: resolveQuerySet() 方法

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

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

GPUCommandEncoder 接口的 resolveQuerySet() 方法会编码一个用于解析 GPUQuerySet 的命令,并将结果复制到一个指定的 GPUBuffer 中。

语法

js
resolveQuerySet(querySet, firstQuery, queryCount, destination, destinationOffset)

参数

querySet

一个表示要解析的查询集的 GPUQuerySet 对象。

firstQuery

要复制到缓冲区的第一条查询值(索引号)。

queryCount

firstQuery 开始,要复制到缓冲区中的查询数量。

destination

一个表示要将查询值复制到的缓冲区的 GPUBuffer

destinationOffset

一个数字,表示从缓冲区开始处偏移多少字节来写入查询值。

返回值

无 (Undefined)。

验证

调用 resolveQuerySet() 时必须满足以下条件,否则将生成 GPUValidationError,并且 GPUCommandEncoder 将失效。

  • destination.bufferGPUBuffer.usage 包含 GPUBufferUsage.QUERY_RESOLVE 标志。
  • firstQuery 小于 querySet 中的查询总数。
  • firstQuery + queryCount 小于或等于 querySet 中的查询总数。
  • destinationOffset 是 256 的倍数。
  • destinationOffset + 8 × queryCount 小于或等于 destination.size

示例

js
// …

const queryBuffer = device.createBuffer({
  size: 1024,
  usage: GPUBufferUsage.QUERY_RESOLVE,
});

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

// …

const commandEncoder = device.createCommandEncoder();

// Write timestamps to querySet
commandEncoder.writeTimestamp(querySet, 0);
// …
commandEncoder.writeTimestamp(querySet, 1);
// etc.

// …

commandEncoder.resolveQuerySet(
  querySet,
  0, // First query to write
  16, // Number of queries to count
  queryBuffer,
  0, // Buffer offset
);

// …

规范

规范
WebGPU
# dom-gpucommandencoder-resolvequeryset

浏览器兼容性

另见