D3D10DDI_QUERY 枚举 (d3d10umddi.h)

D3D10DDI_QUERY 枚举类型包含标识查询类型的值。

语法

typedef enum D3D10DDI_QUERY {
  D3D10DDI_QUERY_EVENT,
  D3D10DDI_QUERY_OCCLUSION,
  D3D10DDI_QUERY_TIMESTAMP,
  D3D10DDI_QUERY_TIMESTAMPDISJOINT,
  D3D10DDI_QUERY_PIPELINESTATS,
  D3D10DDI_QUERY_OCCLUSIONPREDICATE,
  D3D10DDI_QUERY_STREAMOUTPUTSTATS,
  D3D10DDI_QUERY_STREAMOVERFLOWPREDICATE,
  D3D11DDI_QUERY_PIPELINESTATS,
  D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM0,
  D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM1,
  D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM2,
  D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM3,
  D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM0,
  D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM1,
  D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM2,
  D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM3,
  D3D10DDI_COUNTER_GPU_IDLE,
  D3D10DDI_COUNTER_VERTEX_PROCESSING,
  D3D10DDI_COUNTER_GEOMETRY_PROCESSING,
  D3D10DDI_COUNTER_PIXEL_PROCESSING,
  D3D10DDI_COUNTER_OTHER_GPU_PROCESSING,
  D3D10DDI_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION,
  D3D10DDI_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION,
  D3D10DDI_COUNTER_VERTEX_THROUGHPUT_UTILIZATION,
  D3D10DDI_COUNTER_TRISETUP_THROUGHPUT_UTILIZATION,
  D3D10DDI_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION,
  D3D10DDI_COUNTER_VERTEXSHADER_MEMORY_LIMITED,
  D3D10DDI_COUNTER_VERTEXSHADER_COMPUTATION_LIMITED,
  D3D10DDI_COUNTER_GEOMETRYSHADER_MEMORY_LIMITED,
  D3D10DDI_COUNTER_GEOMETRYSHADER_COMPUTATION_LIMITED,
  D3D10DDI_COUNTER_PIXELSHADER_MEMORY_LIMITED,
  D3D10DDI_COUNTER_PIXELSHADER_COMPUTATION_LIMITED,
  D3D10DDI_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE,
  D3D10DDI_COUNTER_TEXTURE_CACHE_HIT_RATE,
  D3D10DDI_COUNTER_DEVICE_DEPENDENT_0
} ;

常量

 
D3D10DDI_QUERY_EVENT
此查询类型提供同步基元,以下许多查询类型都模拟该基元来处理图形处理单元 (GPU) 的异步性质。 发出D3D10DDI_QUERY_EVENT在 GPU 使用以前发出的所有命令(通常来自图形管道的后端)完成后发出信号。 驱动程序与此查询类型关联的数据是 BOOL。 但是,BOOL 值是冗余的,因为每当发出D3D10DDI_QUERY_EVENT查询信号时,BOOL 的值始终为 TRUE。 向D3D10DDI_QUERY_EVENT发出信号时,驱动程序应始终发送回 BOOL 数据值 TRUE
D3D10DDI_QUERY_OCCLUSION
驱动程序与此查询类型关联的统计数据为 UINT64。 此统计数据包含自创建设备上下文以来所有基元通过深度和模具测试(也称为“可见”多重采样)的多重采样数。 如果呈现目标不是多重采样,则计数器将按可见的整个像素数递增。 计数器在溢出时应环绕。

注意

Direct3D 运行时可以随时调用驱动程序的 QueryGetData 函数来请求此统计数据。 因此,必须持续准确地计算它。

只有两个独立的统计请求之间的差异才能提供有意义的信息。 驱动程序应计算调用其 QueryBegin 函数时接收的统计数据与调用 QueryEnd 函数时接收的统计数据之间的差异。

为了计算可见的多重样本,禁用的深度测试或模具测试的行为应与多重采样“通过”禁用的测试一样。 这将生成与启用测试单元时的结果等效,并将测试函数设置为“always”。 此外,即使没有绑定呈现器目标,这些值也应按正常方式进行表格化。 由于深度和模具测试在管道的输出合并阶段逻辑发生,因此在像素着色器执行期间丢弃的像素不会递增遮挡计数器。 在逻辑上,丢弃的像素甚至不会到达输出合并。 在管道配置中,管道生成的唯一有效结果是封闭计数器的表格。

D3D10DDI_QUERY_TIMESTAMP
驱动程序与此查询类型关联的数据是 UINT64。 TIMESTAMP 查询类型的使用方式与D3D10DDI_QUERY_EVENT查询类型类似,因为 TIMESTAMP 查询类型还提供同步基元类型。 与D3D10DDI_QUERY_EVENT一样,当 GPU 使用以前发出的所有命令完成时,TIMESTAMP 应成为信号。 但是,TIMESTAMP 与D3D10DDI_QUERY_EVENT不同,返回 64 位时间戳值。 此 64 位时间戳值应从 GPU 计数器采样,该计数器以一致的频率递增。 应在 GPU 完成之前发出的所有命令时对时间戳值进行采样。 不需要 GPU 来确保将所有缓存刷新到内存以确定工作已完成。 这样,满足多个高频率 TIMESTAMP 查询类型就不会严重干扰管道。 但是,CPU 应监视自身与 GPU 之间明确定义的内存写入顺序,尤其是在支持D3D10DDI_QUERY_EVENT时。 如果 CPU 确定 GPU 写入了特定值 (特别是) 围栏值,则 CPU 将确定在围栏写入之前发出的所有以前的内存写入都应刷新到内存中,并且 CPU 能够立即看到。 从 GPU 缓存中获取数据并进入 CPU 可访问内存时可能需要的刷新类型不应在每个 TIMESTAMP 中执行,但可能还需要在每个命令缓冲区的末尾完成。

时间戳计数器的频率是在D3D10DDI_QUERY_TIMESTAMPDISJOINT查询类型的上下文中提供的。 此计数器的频率应大于 10 MHz,并且可抵御 GPU 的高频动态限制。 时间戳计数器应该是全局的。 因此,不需要时间戳计数器来考虑上下文的 GPU 时间切片。

时间戳计数器的初始值未指定。 因此,时间戳计数器的绝对值本身通常毫无意义。 但是,从两个绝对值之差生成的相对值可量化已用时间量。 仅当两个 TIMESTAMP 查询括在D3D10DDI_QUERY_TIMESTAMPDISJOINT范围内,并且D3D10DDI_QUERY_TIMESTAMPDISJOINT查询的查询非连续值返回 FALSE 时,两个时间戳值的差异才准确。
D3D10DDI_QUERY_TIMESTAMPDISJOINT
驱动程序与此查询类型关联的数据是 D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT 结构。 TIMESTAMPDISJOINT 允许应用程序定义括号,以便不仅请求 TIMESTAMP 时钟的频率,还可以检测该频率在整个带括号的图形命令范围中是否一致。 D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT 的 不连续 成员包含一个 BOOL 值,该值指示何时出现某种情况导致时间戳计数器变得不连续或不连续。 应触发 TIMESTAMPDISJOINT 的一些事件示例包括电源关闭、由于笔记本电脑节能事件、拔下交流电源线和过热而导致的上下节流。 在稳定的图形应用程序执行状态期间,此类事件应非常罕见,以便通过控制系统执行环境来避免。 请注意,如果发生此类事件,它们会有效地降低 TIMESTAMP 功能的用处。 与此类事件之前的 TIMESTAMP 查询相比,触发 TIMESTAMPDISJOINT 查询的事件之后的 TIMESTAMP 查询应该没有意义。 如果无法保证 TIMESTAMP 查询中的值在整个 TIMESTAMPDISJOINT 查询期间是连续的, 则 Disjoint 成员中的 BOOL 值为 TRUE 。 Otheriwse,Disjoint 应为 FALSE D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT 的 Frequency 成员的值应等于 TIMESTAMP 时钟的频率。

此外,此类限制事件的通知对于性能监视、回归和调查工具很有用,前提是通知会导致应用程序执行的性能差异。
D3D10DDI_QUERY_PIPELINESTATS
有关详细信息,请参阅“备注”。
D3D10DDI_QUERY_OCCLUSIONPREDICATE
驱动程序与此查询类型关联的数据是 BOOL。 此谓词反映了 OCCLUSION 查询的规范。 如果相同括号范围的 OCCLUSION 查询返回 0,则 OCCLUSION 谓词返回 FALSE。 否则,OCCLUSION 谓词返回 TRUE,指示至少一个多重采样可见。 如果谓词指示为提示与保证,则不会将任何结果传播回应用程序。 此查询类型是一个谓词,可用于谓词呈现命令。
D3D10DDI_QUERY_STREAMOUTPUTSTATS
驱动程序与此查询类型关联的数据是 D3D10_DDI_QUERY_DATA_SO_STATISTICS 结构。 此结构包含用于监视在管道的流输出阶段流出的数据量的统计信息。 这些统计信息仅统计 (流出) 点、线和三角形等完整基元。例如,如果基元类型 (更改为三角形) ,则不会以任何方式调整计数。 也就是说,无论类型如何,计数始终为总基元。

注意

Direct3D 运行时可以随时调用驱动程序的 QueryGetData 函数来请求这些统计信息。 因此,必须持续准确地计算它。

只有两个独立的统计请求之间的差异才能提供有意义的信息。 驱动程序应计算调用其 QueryBegin 函数时接收的统计数据与调用 QueryEnd 函数时接收的统计数据之间的差异。

D3D10DDI_QUERY_STREAMOVERFLOWPREDICATE
驱动程序与此查询类型关联的数据是 BOOL。 如果任何流输出溢出,则此 BOOL 为 TRUE 。 如果使用两个D3D10DDI_QUERY_STREAMOUTPUTSTATS查询来同时监视与 STREAMOVERFLOWPREDICATE 谓词类型相同的括号范围,则 D3D10_DDI_QUERY_DATA_SO_STATISTICSPrimitivesStorageNeeded 成员中的值差异将大于 NumPrimitivesWritten 成员中值的差异。 STREAMOVERFLOWPREDICATE 不支持用作提示的功能。 因此,必须保证谓词类型。 此查询是一个谓词,可用于谓词呈现命令,从而防止向应用程序显示不需要的帧。

如果同时流式传输到多个缓冲区,只要其中任何一个缓冲区溢出,流输出将停止写入所有缓冲区,并且 STREAMOVERFLOWPREDICATE 的数据将变为 TRUE
D3D11DDI_QUERY_PIPELINESTATS
在 Windows 7 及更高版本中受支持。

驱动程序与此查询类型关联的数据是D3D11_DDI_QUERY_DATA_PIPELINE_STATISTICS结构。 此结构包含图形管道的每个阶段的统计信息。 此查询类型与D3D11DDI_QUERY_PIPELINESTATS查询类型相同,但D3D11_DDI_QUERY_DATA_PIPELINE_STATISTICS为外壳着色器和域着色器添加 HSInvocationsDSInvocations 成员。
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM0
在 Windows 7 及更高版本中受支持。

驱动程序与此查询类型关联的数据是 D3D10_DDI_QUERY_DATA_SO_STATISTICS 结构。
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM1
在 Windows 7 及更高版本中受支持。

驱动程序与此查询类型关联的数据是 D3D10_DDI_QUERY_DATA_SO_STATISTICS 结构。
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM2
在 Windows 7 及更高版本中受支持。

驱动程序与此查询类型关联的数据是 D3D10_DDI_QUERY_DATA_SO_STATISTICS 结构。
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM3
在 Windows 7 及更高版本中受支持。

驱动程序与此查询类型关联的数据是 D3D10_DDI_QUERY_DATA_SO_STATISTICS 结构。
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM0
在 Windows 7 及更高版本中受支持。

驱动程序与此查询类型关联的数据是 BOOL。 如果流 0 输出溢出,则此 BOOL 为 TRUE 。 如果使用两个D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM0查询来同时监视与STREAMOVERFLOWPREDICATE_STREAM0谓词类型相同的括号范围,则 D3D10_DDI_QUERY_DATA_SO_STATISTICSPrimitivesStorageNeeded 成员中的值差异将大于 NumPrimitivesWritten 成员中值的差异。
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM1
在 Windows 7 及更高版本中受支持。

驱动程序与此查询类型关联的数据是 BOOL。 如果流 1 输出溢出,则此 BOOL 为 TRUE 。 如果使用两个D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1查询来同时监视与STREAMOVERFLOWPREDICATE_STREAM1谓词类型相同的括号范围,则 D3D10_DDI_QUERY_DATA_SO_STATISTICSPrimitivesStorageNeeded 成员中的值差异将大于 NumPrimitivesWritten 成员中值的差异。
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM2
在 Windows 7 及更高版本中受支持。

驱动程序与此查询类型关联的数据是 BOOL。 如果流 2 输出溢出,则此 BOOL 为 TRUE 。 如果使用两个D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1查询来同时监视与STREAMOVERFLOWPREDICATE_STREAM2谓词类型相同的括号范围,则 D3D10_DDI_QUERY_DATA_SO_STATISTICSPrimitivesStorageNeeded 成员中的值差异将比 NumPrimitivesWritten 成员中的值差异更大。
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM3
在 Windows 7 及更高版本中受支持。

驱动程序与此查询类型关联的数据是 BOOL。 如果流 3 输出溢出,则此 BOOL 为 TRUE 。 如果使用两个D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1查询来同时监视与STREAMOVERFLOWPREDICATE_STREAM3谓词类型相同的括号范围,则 D3D10_DDI_QUERY_DATA_SO_STATISTICSPrimitivesStorageNeeded 成员中的值差异将大于 NumPrimitivesWritten 成员中值的差异。
D3D10DDI_COUNTER_GPU_IDLE
驱动程序与此查询计数器类型关联的数据是FLOAT32。 驱动程序返回 GPU 空闲时间的百分比。
D3D10DDI_COUNTER_VERTEX_PROCESSING
驱动程序与此查询计数器类型关联的数据是FLOAT32。 驱动程序返回顶点着色器忙于处理数据的时间百分比。
D3D10DDI_COUNTER_GEOMETRY_PROCESSING
驱动程序与此查询计数器类型关联的数据是FLOAT32。 驱动程序返回几何着色器忙于处理数据的时间百分比。
D3D10DDI_COUNTER_PIXEL_PROCESSING
驱动程序与此查询计数器类型关联的数据是FLOAT32。 驱动程序返回像素着色器忙于处理数据的时间百分比。
D3D10DDI_COUNTER_OTHER_GPU_PROCESSING
驱动程序与此查询计数器类型关联的数据是FLOAT32。 驱动程序返回 GPU 操作(顶点、几何图形和像素着色器操作)忙于处理数据的时间百分比。
D3D10DDI_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION
驱动程序与此查询计数器类型关联的数据是FLOAT32。 驱动程序返回适配器带宽利用率的理论最大值的百分比。
D3D10DDI_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION
驱动程序与此查询计数器类型关联的数据是FLOAT32。 驱动程序返回视频内存带宽利用率的理论最大值的百分比。
D3D10DDI_COUNTER_VERTEX_THROUGHPUT_UTILIZATION
驱动程序与此查询计数器类型关联的数据是FLOAT32。 驱动程序返回顶点吞吐量利用率的理论最大值的百分比。
D3D10DDI_COUNTER_TRISETUP_THROUGHPUT_UTILIZATION
驱动程序与此查询计数器类型关联的数据是FLOAT32。 驱动程序返回三角形设置吞吐量利用率的理论最大值的百分比。
D3D10DDI_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION
驱动程序与此查询计数器类型关联的数据是FLOAT32。 驱动程序返回填充率吞吐量利用率的理论最大值的百分比。
D3D10DDI_COUNTER_VERTEXSHADER_MEMORY_LIMITED
驱动程序与此查询计数器类型关联的数据是FLOAT32。 驱动程序返回顶点着色器等待内存执行数据读取或写入 (的时间百分比与顶点着色器计算数学) 的时间百分比。
D3D10DDI_COUNTER_VERTEXSHADER_COMPUTATION_LIMITED
驱动程序与此查询计数器类型关联的数据是FLOAT32。 驱动程序返回顶点着色器计算数学 (的时间百分比与顶点着色器等待内存执行数据读取或写入) 的时间百分比。
D3D10DDI_COUNTER_GEOMETRYSHADER_MEMORY_LIMITED
驱动程序与此查询计数器类型关联的数据是FLOAT32。 驱动程序返回几何着色器等待内存执行数据读取或写入 (的时间百分比与几何着色器计算数学) 的时间百分比。
D3D10DDI_COUNTER_GEOMETRYSHADER_COMPUTATION_LIMITED
驱动程序与此查询计数器类型关联的数据是FLOAT32。 驱动程序返回几何着色器计算数学 (的时间百分比与几何着色器等待内存) 执行数据读取或写入的时间百分比。
D3D10DDI_COUNTER_PIXELSHADER_MEMORY_LIMITED
驱动程序与此查询计数器类型关联的数据是FLOAT32。 驱动程序返回像素着色器等待内存执行数据读取或写入 (的时间百分比与像素着色器计算数学) 的时间百分比。
D3D10DDI_COUNTER_PIXELSHADER_COMPUTATION_LIMITED
驱动程序与此查询计数器类型关联的数据是FLOAT32。 驱动程序返回像素着色器计算数学 (的时间百分比与像素着色器等待内存) 执行数据读取或写入的时间百分比。
D3D10DDI_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE
驱动程序与此查询计数器类型关联的数据是FLOAT32。 驱动程序返回几何图形着色器或像素着色器从顶点着色器已转换的顶点缓存中检索到的顶点百分比。

已转换顶点的缓存 (即顶点着色器针对) 运行的顶点紧跟在顶点着色器之后。 几何着色器或像素着色器可以使用这些顶点。 D3D10DDI_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE查询) 结果的 100% 命中率 (指示已转换几何着色器或像素着色器所需的每个顶点。 而 0% 命中率表示每个顶点都需要经过顶点着色器处理才能使用。

驱动程序可以重构算法和数据,以提高缓存命中率。
D3D10DDI_COUNTER_TEXTURE_CACHE_HIT_RATE
驱动程序与此查询计数器类型关联的数据是FLOAT32。 驱动程序返回着色器从已从视频内存检索的纹素缓存中检索的纹素或纹理内存的百分比。

纹理内存缓存可以存在于着色器资源视图之间,也可能存在于常量缓冲区和着色器之间。 100% 命中率表示着色器所需的每个纹素已在缓存中可用。 而 0% 命中率表示每个纹素都需要从视频内存中检索数据。

驱动程序可以重构算法和数据,以提高缓存命中率。
D3D10DDI_COUNTER_DEVICE_DEPENDENT_0
第一个可用的依赖于设备的查询计数器。 硬件供应商可以使用此值和任何高于 0x40000000 的 32 位值来为其设备创建查询计数器。

注解

D3D10DDI_COUNTER_VERTEX_PROCESSING、D3D10DDI_COUNTER_GEOMETRY_PROCESSING、D3D10DDI_COUNTER_PIXEL_PROCESSING和D3D10DDI_COUNTER_OTHER_GPU_PROCESSING的值可以相加为驱动程序定义的值,即可检测到的并行单元数。 此数字由驱动程序作为图形适配器功能的一部分发布。 可检测到的并行单元数可以是 1、2、3 或 4,具体取决于硬件体系结构详细信息、性能计数器识别实际花费时间的能力,或者由硬件供应商完全决定。 对于报告D3D10DDI_COUNTER_INFO结构的NumDetectableParallelUnits 成员中可检测的并行单位数等于 1 (== 1) 的体系结构,以响应对 CheckCounterInfo 函数的调用,以下公式适用:

(D3D10DDI_COUNTER_VERTEX_PROCESSING + D3D10DDI_COUNTER_GEOMETRY_PROCESSING + D3D10DDI_COUNTER_PIXEL_PROCESSING + D3D10DDI_COUNTER_OTHER_GPU_PROCESSING) / NumDetectableParallelUnits = 1.0 - D3D10DDI_COUNTER_GPU_IDLE

监视所有这些计数器标识符 (以及D3D10DDI_COUNTER_GPU_IDLE) 仍必须遵守同时处于活动状态的计数器的规则。

对于报告不等于 1 (!= 1) 的可检测并行单元数的体系结构,每个忙碌指标之间的交互更为复杂。 例如,如果可检测到的并行单位数等于 4 (== 4) ,D3D10DDI_COUNTER_VERTEX_PROCESSING和D3D10DDI_COUNTER_PIXEL_PROCESSING等于 0.25 (== .25) ,而其余繁忙指标等于 0 (== 0) 。 D3D10DDI_COUNTER_GPU_IDLE可能会导致在 0.5 到 .75 之间,具体取决于这些并行单元实现的实际重叠程度。

D3D10DDI_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION、D3D10DDI_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION、D3D10DDI_COUNTER_VERTEX_THROUGHPUT_UTILIZATION、D3D10DDI_COUNTER_TRISETUP_THROUGHPUT_UTILIZATION和D3D10DDI_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION都报告可以使用的瓶颈百分比。 然后,应用程序可以确定何时对某个理论最大值施加压力,以便确定如何解决瓶颈问题。

D3D10DDI_QUERY_PIPELINESTATS值的详细信息

驱动程序与此查询类型关联的数据是 D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS 结构,其中包含图形管道的每个阶段的统计信息。 对于每个阶段,调用数的值必须介于无限缓存和无缓存之间。 剪裁器的行为类似于 GS) (几何着色器。 剪裁器将针对每个三角形执行。 对于每个调用,如果原始三角形完全剪裁,将生成零个基元;如果原始三角形完全没有剪裁 (或剪裁结果只有一个三角形) ,将生成两个基元,如果原始三角形被剪裁并导致两个三角形,则生成两个基元,等等。 在管道的典型配置中,D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICSGSPrimitives 成员中的值将等于 CInvocations 成员中的值。 如果禁用光栅化,并且管道配置为仅将基元发送到流输出, 则 GSPrimitives 中的值将偏离 CInvocations 中的值,因为 CInvocations 不会递增。 剪裁统计信息在防护带实现方面是灵活的。 因此,在呈现超出视区范围的三角形时,测试将确保剪裁位于值范围 (数字(假定无限防护带)和采用视区) 周围紧密剪裁矩形的数字之间。 所有值都包含自创建设备上下文以来的事件数。 请注意,可以随时请求这些统计信息,因此必须持续准确地计算这些统计信息。

只有两个独立的统计请求之间的差异才能提供有意义的信息。 驱动程序应计算调用其 QueryBegin 函数时接收的统计数据与调用 QueryEnd 函数时接收的统计数据之间的差异。

下面是D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICSIAVerticesIAPrimitivesVSInvocations 成员中值与后顶点着色器 (VS) 缓存之间的交互示例。

方案 IAVertices 有效值 IAPrimitives 有效值 VSInvocations 有效值
绘制 4 个基元的索引三角形带, (所有索引的值都相同) 6 4 1--12
绘制包含 4 个基元的索引三角形列表 (,所有索引的值都相同) 12 4 1--12
绘制 4 个基元的三角形带 6 4 6--12
绘制包含 4 个基元的三角形列表 12 4 6--12

将允许部分基元属于值范围,类似于顶点缓存的行为方式。 因此,当部分基元是可能的时,统计信息应落在管道之间,该管道应尽快剪辑它们 (,甚至输入汇编程序 (IA) 将其计数) ,或尽可能晚 (后剪辑器和前像素着色器 (PS) ) 。 Stream输出和 NULL GS 对于它们是否实际导致 GS 调用具有灵活性。

对于 D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICSPSInvocations 成员中的值,早期深度和模具优化可能会(也可能可能不会)阻止像素着色器的工作实现。 因此,当像素未通过深度测试时, PSInvocations 中的值可能会递增,也可能不递增,具体取决于深度测试在管道中实际发生的位置。 如果像素着色器输出深度, 则 PSInvocations 中的值必须按预期递增,即使输出深度失败也是如此。 以下示例演示如何测试 PSInvocations 中的值。

考虑 DSP (通过深度和模具测试的像素数) 和 DSF (未通过深度或模具测试的像素数,) 数量 。 DSP 大致相当于 OCCLUSION 查询,只不过 OCCLUSION 测量多样本 (而不是像素) 。 在所有情况下,DSP <= PSInvocations<= 中的值 ( DSP + DSF ) 。 当像素着色器输出深度时, PSInvocations 中的值是 DSP 和 DSF 的总和。 此外,当 NULL 像素着色器绑定到管道时, PSInvocations 中的值不会递增。

对于 IAVerticesVSInvocations 中的值,如果 GS 未将相邻顶点声明为 GS 的输入,则可能优化相邻顶点处理。 因此,当 GS 不将相邻顶点声明为输入时, IAVerticesVSInvocations 中的值可能会反映也可能不反映相邻顶点所暗示的工作。 如果 GS 声明相邻顶点, 则 IAVertices 中的值应包含相邻顶点 (而不考虑任何后 VS 缓存 ) ,VSInvocations 中的值应包括 (相邻顶点以及 VS 后缓存) 的任何影响。

要求

要求
最低受支持的客户端 在 Windows Vista 和更高版本的 Windows 操作系统中可用。
标头 d3d10umddi.h (包括 D3d10umddi.h)

另请参阅

CheckCounterInfo

D3D10DDIARG_CREATEQUERY

D3D10DDI_COUNTER_INFO

D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS

D3D10_DDI_QUERY_DATA_SO_STATISTICS

D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT