如何:检查驱动程序支持

本主题演示如何确定硬件加速是否支持多线程功能(包括 资源创建命令列表)。

我们建议应用程序检查多线程的图形硬件支持。 如果驱动程序和图形硬件不支持多线程对象创建,则可以通过以下方式限制性能:

  • 同时创建多个对象(甚至不同类型的)可能会受到限制。
  • 使用 即时上下文 呈现图形命令时创建对象可能会受到限制。 例如,如果硬件不支持多线程,应用程序应避免在后台线程上创建需要很长时间才能创建的对象。 创建操作需要很长时间,可能会阻止即时上下文呈现,并增加视觉帧速率口音的风险。

无论驱动程序和硬件支持如何,运行时都支持多线程和命令列表;如果没有多线程或命令列表的驱动程序和硬件支持,运行时将模拟该功能。 有关多线程的详细信息,请参阅 Direct3D 11 中的多线程处理简介。

若要检查驱动程序是否支持多线程,

  1. 初始化 ID3D11Device 接口对象。 默认情况下,启用多线程处理。
  2. 调用 ID3D11Device::CheckFeatureSupport。 将D3D11_FEATURE_THREADING值传递给 Feature 参数,将D3D11_FEATURE_DATA_THREADING结构传递给 pFeatureSupportData 参数,并将D3D11_FEATURE_DATA_THREADING结构的大小传递给 FeatureSupportDataSize 参数。
  3. 如果 ID3D11Device::CheckFeatureSupport 方法成功,则会使用有关多线程支持的信息初始化在上一步中传递的D3D11_FEATURE_DATA_THREADING结构。
    • 如果 DriverConcurrentCreatesTRUE,驱动程序可以在不同的线程上同时创建多个资源(并发)。

      如果 DriverCommandListsTRUE,驱动程序支持命令列表。 也就是说,即时上下文发出的呈现命令可以与在单独的线程上创建对象时并发,同时存在帧速率口吃风险较低的线程。

    • 如果 DriverConcurrentCreatesFALSE,驱动程序不支持并发创建,这意味着可能的并发量极有限。 图形硬件不能同时在不同的线程上创建不同类型的对象。 此外,图形硬件不能使用即时上下文发出呈现命令,而图形硬件尝试在另一个线程上创建资源。

如何使用 Direct3D 11

多线程处理