DXGK_VIDSCHCAPS结构(d3dkmddi.h)

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

语法

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 和 SP1 开始支持 Windows Vista。

PreemptionAware

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

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

如果 PreemptionAware 设置为零(FALSE),驱动程序支持 Windows 7 的抢占策略。 使用此策略,OS 可能不会发出抢占请求,而 GPU 上可能长时间运行的作正在执行。 因此,在启动 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 能够以原子方式更新 64 位值,如 CPU 可见。

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 在信号中断时设置此 TRUE,则 GPU 可以在 DXGKARGCB_NOTIFY_INTERRUPT_DATA::NativeFenceSignaled 仅指定正在运行的 HWQueue 的 KMD 句柄。 有关详细信息,请参阅 本机 GPU 围栏对象。 从 Windows 11 版本 22H2(WDDM 3.1 开始)开始可用。

Reserved

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

Value

访问联合中的位字段标志的替代方法。

要求

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

另请参阅

DXGK_DRIVERCAPS

DxgkDdiCancelCommand

DxgkDdiCreateContext

DxgkDdiDestroyContext

DxgkDdiPatch

DxgkDdiPresent

DxgkDdiRender