D3DKMTCreateNativeFence 函数 (d3dkmthk.h)

D3D 运行时调用 D3DKMTCreateNativeFence 在特定设备上创建本机 GPU 围栏对象。

语法

NTSTATUS D3DKMTCreateNativeFence(
  D3DKMT_CREATENATIVEFENCE *unnamedParam1
);

参数

unnamedParam1

[in/out]指向描述要创建的围栏对象的 D3DKMT_CREATENATIVEFENCE 结构的指针。

返回值

D3DKMTCreateNativeFence 在成功创建时返回STATUS_SUCCESS。 否则,它将返回 NTSTATUS 错误代码,例如STATUS_INVALID_PARAMETER。

言论

指定的 D3DDDI_NATIVEFENCE_TYPE 决定了 OS 创建的本机围栏的类型。 这些围栏在 CurrentValueMonitoredValue的功能、性能特征和存储要求有所不同。 下表显示了这些差异,其中 CVal 代表 CurrentValue,MVal 代表 MonitoredValue

类型 CurrentValue MonitoredValue 支持 CPU 上的跨进程共享 支持跨适配器共享 UM CPUVA CVal KM CPUVA CVal GPU VA CVal CMPVA CVal UM MVal KM MVal GPU VA MVal CMPVA MVal 用例
D3DDDI_NATIVEFENCE_TYPE_DEFAULT Sysmem Sysmem 是的 是的 ReadOnly 读/写 读/写 读/写 N/A ReadOnly (或读/写) 读/写 应用程序围栏,减少 CPU 中断。 未唤醒 CPU 的情况下取消阻止 GPU 服务员
D3DDDI_NATIVEFENCE_TYPE_DEFAULTOPTIMIZED Sysmem VRAM 是的 是的 ReadOnly 读/写 读/写 读/写 N/A ReadOnly (或读/写) 读/写 与类型 0 相同,但随着 MVal 读取的 PCI 总线流量减少,GPU 是本地的。 GPU 信号命令由于延迟降低(吞吐量++)而更快完成。
D3DDDI_NATIVEFENCE_TYPE_INTRA_GPU VRAM VRAM 是的 N/A N/A 读/写 读/写 N/A N/A ReadOnly (或读/写) 读/写 同一 GPU 中的命令缓冲区级别(不可见)同步。 读取/写入围栏值(CVal)是本地值,因此信号/取消阻止操作的速度很快。
  • D3DDDI_NATIVEFENCE_TYPE_DEFAULT

    • 在 Windows 11 版本 24H2 中受支持。
    • 此围栏类型支持所有现有的 D3DKMT 同步对象 Wait/Signal from CPU/GPU 操作。
    • 此围栏类型的 CurrentValueMonitoredValue 存储均在系统内存段中分配。
  • D3DDDI_NATIVEFENCE_TYPE_DEFAULT优化

    • 操作系统当前不支持此功能。
    • 优化版本的 D3DDDI_NATIVEFENCE_TYPE_DEFAULT(可在 VRAM 中分配 MonitoredValue 存储)将加快从 GPU 引擎读取 MonitoredValue
    • 此优化不会向 UMD 公开。 相反,Dxgkrnl 和 KMD 将决定是否可以通过在 VRAM 中分配 MonitoredValue 存储来优化默认围栏类型。
    • 如果系统承受本地内存压力,MonitoredValue VRAM 中分配的存储仍可能会降级到系统内存。
    • 如果 OS 支持此围栏类型,则会在 DXGKARGCB_FEATURE_NATIVEFENCE_CAPS_1 功能接口表中将 SupportOptimizedDefaultFenceType 设置为 TRUE。 KMD 预计将在驱动程序初始化期间查询功能接口表,以确定此 OS 功能。
  • D3DDDI_NATIVEFENCE_TYPE_INTRA_GPU

    • 操作系统当前不支持此功能。
    • D3DDDI_NATIVEFENCE_TYPE_INTRA_GPU 围栏不支持任何 CPU 操作;也就是说,OS 不允许用户模式排队等待并向此围栏对象发出信号。
    • 因此,此类型不能用于必须支持 CPU 等待和信号语义的 DX 应用程序围栏。 此类型主要用于内部 UMD 围栏,以便在 GPU 引擎之间进行同步。 将此类型创建为 D3DKMT 本机围栏对象可为 GpuView 和调试等工具提供对这些围栏的可见性。
    • 此围栏支持的段必须是非 CPU 可见的本地内存段。
    • 如果系统处于本地内存压力下,本地内存中分配的存储仍可能会降级到系统内存。
    • 如果 OS 支持此围栏类型,则会在 DXGKARGCB_FEATURE_NATIVEFENCE_CAPS_1 功能接口表中将 SupportIntraGpuFenceType 设置为 TRUE。 KMD 预计将在驱动程序初始化期间查询功能接口表,以确定此 OS 功能。

有关本机 GPU 围栏的详细信息,请参阅 本机 GPU 围栏对象

要求

要求 价值
最低支持的客户端 Windows 11 版本 24H2
标头 d3dkmthk.h

另请参阅

D3DKMT_CREATENATIVEFENCE

D3DKMTOpenNativeFenceFromNTHandle

D3DKMTDestroySynchronizationObject

DxgkDdiCreateNativeFence