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 创建的本机围栏的类型。 这些围栏在 CurrentValue 和 MonitoredValue的功能、性能特征和存储要求有所不同。 下表显示了这些差异,其中 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_DEFAULT(OPTIMIZED) | 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 操作。
- 此围栏类型的 CurrentValue 和 MonitoredValue 存储均在系统内存段中分配。
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 |
另请参阅
D3DKMTOpenNativeFenceFromNTHandle