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 中斷的應用程式柵欄。 GPU 等候程式已解除封鎖,而不會喚醒 CPU |
D3DDDI_NATIVEFENCE_TYPE_DEFAULT (OPTIMIZED) | Sysmem | VRAM | 是的 | 是的 | ReadOnly | 讀取/寫入 | 讀取/寫入 | 讀取/寫入 | N/A | 寫 | ReadOnly (或讀取/寫入) | 讀取/寫入 | 與類型 0 相同,但已減少 PCI 總線流量,因為 MVal 讀取是 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 支援此柵欄類型,它會在
功能介面數據表中將 supportIntraGpuFenceTypeDXGKARGCB_FEATURE_NATIVEFENCE_CAPS_1 設定為 TRUE。 KMD 預期會在驅動程式初始化期間查詢功能介面數據表,以判斷此 OS 功能。
如需原生 GPU 柵欄的詳細資訊,請參閱 原生 GPU 柵欄物件。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 11 版本 24H2 |
標頭 | d3dkmthk.h |
另請參閱
D3DKMTOpenNativeFenceFromNTHandle