DXGK_VIDSCHCAPS 结构 (d3dkmddi.h)

DXGK_VIDSCHCAPS 结构具有位字段标志,用于标识 GPU 的计划功能,内核模式显示微型端口驱动程序 (KMD) 可以支持这些功能。

语法

typedef struct _DXGK_VIDSCHCAPS {
  union {
    struct {
      UINT MultiEngineAware : 1;
      UINT VSyncPowerSaveAware : 1;
      UINT PreemptionAware : 1;
      UINT NoDmaPatching : 1;
      UINT CancelCommandAware : 1;
      UINT No64BitAtomics : 1;
      UINT LowIrqlPreemptCommand : 1;
      UINT HwQueuePacketCap : 4;
      UINT NativeGpuFence : 1;
      UINT OptimizedNativeFenceSignaledInterrupt : 1;
#if ...
      UINT Reserved : 19;
#elif
      UINT Reserved : 21;
#elif
      UINT Reserved : 25;
#elif
      UINT Reserved : 27;
#else
      UINT Reserved : 30;
#endif
    };
    UINT Value;
  };
} DXGK_VIDSCHCAPS;

成员

MultiEngineAware

一个 UINT 值,指定驱动程序是否支持通过 DxgkDdiCreateContextDxgkDdiDestroyContext 函数 (创建和销毁设备 (上下文) ,以及通过 DxgkDdiPresentDxgkDdiRender 函数) 使用设备上下文。 如果驱动程序不支持上下文创建,则对于每次调用将句柄传递到上下文的驱动程序,Microsoft DirectX 图形内核子系统会将上下文的句柄替换为设备的句柄。

VSyncPowerSaveAware

一个 UINT 值,该值指定驱动程序是否支持垂直同步节能功能。

如果将 VSyncPowerSaveAware 设置为 1 (TRUE) ,则 OS 可以通过禁用和启用某些应用程序时发生的垂直同步中断来节省电源。 如果 VSyncPowerSaveAware 设置为零 (FALSE) ,则 OS 永远不会对可能导致垂直同步中断的应用程序禁用垂直同步中断。 支持从 Windows Server 2008 和 Windows Vista SP1 开始。

PreemptionAware

一个 UINT 值,该值指定驱动程序是否支持 Windows 8 及更高版本的 Windows 的 GPU 抢占策略。 使用此策略时,OS 始终在启动 **超时检测和恢复 (TDR) 进程之前向 GPU 发出抢占请求。 支持从Windows 8开始。

如果 PreemptionAware 设置为 1 (TRUE) ,则驱动程序支持 windows Windows 8 及更高版本的抢占策略。 请注意,如果 PreemptionAware 设置为 1,则 MultiEngineAware 成员还必须设置为值 1。 如果 PreemptionAware 设置为 1,但 MultiEngineAware 设置为零,则 OS 将停止驱动程序初始化过程并返回失败代码。

如果 PreemptionAware 设置为零 (FALSE) ,则驱动程序支持 Windows 7 的抢占策略。 使用此策略,在 GPU 上执行可能长时间运行的操作时,OS 可能不会发出抢占请求。 因此,在启动 TDR 进程之前,不会抢占这些 GPU 请求。 这可能会导致 TDR 进程重复重置 GPU,从而导致系统停止错误。

NoDmaPatching

一个 UINT 值,该值指定驱动程序是否对拆分为多个部分的 DMA 缓冲区禁用泄漏检测。 此检测是在调用驱动程序的 DxgkDdiPatch 函数以向 DMA 缓冲区的每个部分分配或 修补物理地址之后执行的。 支持从Windows 8开始。

支持虚拟地址的显示设备可以将虚拟地址重新编程到新的视频内存位置,而无需修补 DMA 缓冲区地址的值。 对于这些类型的显示设备,驱动程序应将 NoDmaPatching 设置为 1。

如果将 NoDmaPatching 设置为 1 (TRUE) ,驱动程序将禁用泄漏检测,并且 DMA 缓冲区拆分的行为与 Windows 7 中的行为相同。 请注意,当 NoDmaPatching 设置为 1 时, PreemptionAwareMultiEngineAware 成员也必须设置为 1。 如果 NoDmaPatching 设置为 1,但 PreemptionAwareMultiEngineAware 设置为零,则 OS 将停止驱动程序初始化过程并返回失败代码。

如果将 NoDmaPatching 设置为 0 (FALSE) ,驱动程序会为修补的 DMA 缓冲区地址启用泄漏检测。 OS 在调用驱动程序的 DxgkDdiPatch 函数之前执行泄漏检测。

CancelCommandAware

一个 UINT 值,该值指定驱动程序是否支持在从硬件队列中删除命令后 (通过 DxgkDdiCancelCommand 函数) 清理内部资源。 支持从Windows 8开始。

如果 CancelCommandAware 设置为 1 (TRUE) ,则驱动程序支持清理与已取消的 DMA 数据包关联的资源。 请注意,当 CancelCommandAware 设置为 1 时, MultiEngineAware 成员也必须设置为 1。 如果 CancelCommandAware 设置为 1,但 MultiEngineAware 设置为零,则 OS 将返回失败代码。

如果 CancelCommandAware 设置为零 (FALSE) ,则驱动程序不支持清理资源。

No64BitAtomics

如果将 No64BitAtomics 设置为 1 (TRUE) ,则驱动程序指示 GPU 只能以原子方式更新 32 位值。 在这种情况下,OS 将自动处理围栏环绕情况,但它将施加一个限制,即未完成的等待和信号围栏值不能超过 UINT_MAX/2,除了最后一个信号围栏值。 从 Windows 10 开始支持。

如果将 No64BitAtomics 设置为零 (FALSE) ,则驱动程序指示 GPU 能够以原子方式更新 CPU 可见的 64 位值。

LowIrqlPreemptCommand

HwQueuePacketCap

允许排队到节点的最大 DMA 数据包数。

NativeGpuFence

如果 OS 已启用 DXGK_FEATURE_NATIVE_FENCE 功能,驱动程序可以通过将 NativeGpuFence 位设置为 1,在适配器初始化期间声明对本机 GPU 围栏功能的支持。 此功能通过相应的 D3DKMT_WDDM_3_1_CAPS::NativeGpuFenceSupported 位向用户模式公开。 有关详细信息,请参阅 本机 GPU 围栏对象。 从 Windows 11 版本 22H2 (WDDM 3.1) 开始可用。

OptimizedNativeFenceSignaledInterrupt

如果在发出信号的中断时,GPU 可以在 DXGKARGCB_NOTIFY_INTERRUPT_DATA::NativeFenceSignaled 中指定仅运行 HWQueue 的 KMD 句柄,则驱动程序将设置此 TRUE。 有关详细信息,请参阅 本机 GPU 围栏对象。 从 Windows 11 版本 22H2 (WDDM 3.1) 开始可用。

Reserved

此成员为保留成员,应设置为零。

Value

访问联合中的位字段标志的另一种方法。

要求

要求
最低受支持的客户端 Windows Vista
标头 d3dkmddi.h (包括 D3dkmddi.h)

另请参阅

DXGK_DRIVERCAPS

DxgkDdiCancelCommand

DxgkDdiCreateContext

DxgkDdiDestroyContext

DxgkDdiPatch

DxgkDdiPresent

DxgkDdiRender