GPUCommandEncoder: resolveQuerySet() 方法

实验性: 这是 实验性技术
在生产环境中使用此功能之前,请仔细查看 浏览器兼容性表

安全上下文:此功能仅在安全上下文(HTTPS)中可用,在某些或所有支持的浏览器中可用。

resolveQuerySet()方法是GPUCommandEncoder接口的方法,它编码一个解析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

浏览器兼容性

BCD 表仅在浏览器中加载

另请参阅