共用方式為


D3DKMT_CREATE_DOORBELL結構 (d3dkmthk.h)

D3DKMT_CREATE_DOORBELL 結構包含 D3DKMTCreateDoorbell的參數。

語法

typedef struct _D3DKMT_CREATE_DOORBELL {
  D3DKMT_HANDLE                hHwQueue;
  D3DKMT_HANDLE                hRingBuffer;
  D3DKMT_HANDLE                hRingBufferControl;
  D3DKMT_CREATE_DOORBELL_FLAGS Flags;
  UINT                         PrivateDriverDataSize;
  VOID                         *PrivateDriverData;
  VOID                         *DoorbellCPUVirtualAddress;
  VOID                         *DoorbellSecondaryCPUVirtualAddress;
  VOID                         *DoorbellStatusCPUVirtualAddress;
  VOID                         *HwQueueProgressFenceLastQueuedValueCPUVirtualAddress;
  D3DKMT_HANDLE                hDoorbell;
} D3DKMT_CREATE_DOORBELL;

成員

hHwQueue

[in]在先前呼叫 D3DKMTCreateHwQueue中建立的硬體佇列物件 UMD 句柄。 此句柄會識別需要指派門鈴的硬體佇列。

hRingBuffer

[in]UMD 處理的通道緩衝區配置,UMD 先前建立。 配置必須是 GPU 可見且已常駐。 Dxgkrnl 會將 GPU 虛擬位址 (VA) 和此配置的大小傳遞至對應 DxgkDdiCreateDoorbell 呼叫中的 KMD。 ResizeRingBufferOperation 旗標是 UMD 到 KMD 的提示,指出此硬體佇列的門鈴會以新的重設大小通道緩衝區重新建立。

hRingBufferControl

[in/optional]UMD 緩衝區控制項配置的 UMD 句柄 先前由 UMD 建立。 UMD 和 KMD 可以使用此配置作為控制區域,視需要儲存環形緩衝區讀取/寫入指標位置。 當UMD呼叫 D3DKMTCreateDoorbell時,配置必須是 GPU 可見且已常駐。 Dxgkrnl 會在對應的 DxgkDdiCreateDoorbell 呼叫中,沿著 GPU VA 傳遞此配置的大小給 KMD。

Flags

[in/optional]指定門鈴建立旗標之 D3DKMT_CREATE_DOORBELL_FLAGS 值的位欄位。

PrivateDriverDataSize

[in]pPrivateDriverData 指向的私人驅動程序數據大小,以位元組為單位。

PrivateDriverData

[in/out]指向驅動程式私用之緩衝區的指標。 這個緩衝區的大小是由 PrivateDriverDataSize所指定。 允許的緩衝區大小上限為D3DDDI_DOORBELL_PRIVATEDATA_MAX_BYTES_WDDM3_1個字節。

DoorbellCPUVirtualAddress

[out]此門鈴作系統保留的CPU VA指標(兩者皆為讀取/寫入)。 UMD 會將特定值寫入此位址,有效地「響鈴」,以通知 GPU 排程器硬體佇列上的新工作提交。 即使基礎實體門鈴中斷連線,這個位址在門鈴的存留期內仍然保持不變。 UMD 應該一律使用此位址來寫入/讀取此門鈴。

DoorbellSecondaryCPUVirtualAddress

[out/optional]作系統為此門鈴保留的次要 CPU VA 指標(兩者都是讀取/寫入)。

在實作次要門鈴位置的硬體上,UMD 會設定 RequireSecondaryCpuVA 旗標。 針對這類裝置,OS 會為此門鈴保留另一個 CPU VA。 在門鈴的存留期內,即使基礎實體門鈴中斷聯機,此位址仍會保持不變。

DoorbellStatusCPUVirtualAddress

[out]門鈴狀態的 CPU VA 指標。 這個位址的值會向UMD指出指派給此硬體佇列的門鈴目前是否已連線。 每次 UMD 將新工作提交至佇列並響起門鈴時,都必須檢查此值,以判斷門鈴是否成功。 如果通道失敗,UMD 必須呼叫 D3DKMTConnectDoorbell 重新連線門鈴,然後再嘗試提交工作。

OS 會配置並寫入此 64 位門鈴狀態記憶體、將其對應至進程的位址空間,並將其使用者模式 CPU VA 提供給 UMD 以讀取來源。 因此,UMD 應該讀取儲存在此位址中的 64 位值,以取得門鈴狀態。 這個位址的值可以是其中一個 D3DDDI_DOORBELL_STATUS 列舉值。

即使基礎實體門鈴中斷連線,這個位址在門鈴的存留期內仍然保持不變。 UMD 應該一律使用此位址來讀取門鈴的狀態。

只有 OS 寫入並更新此狀態記憶體:

  • 在從 DxgkDdiConnectDoorbell成功傳回時,OS 會將狀態寫入為 D3DDDI_DOORBELL_STATUS_CONNECTED。
  • 如果作系統在暫停硬體佇列或關閉 GPU 時中斷門鈴的連線,則會呼叫 KMD 的 DxgkDdiDisconnectDoorbell,然後將狀態寫入為D3DDDI_DOORBELL_STATUS_DISCONNECTED_RETRY。
  • 如果 KMD 因故想要中斷門鈴的連線,它會呼叫 DxgkDisconnectDoorbellCB 回呼以通知 OS。 KMD 會提供D3DDDI_DOORBELL_STATUS作為作系統寫入此狀態頁面的狀態。
  • 在 GPU 遺失或停止的情況下,OS 會將D3DDDI_DOORBELL_STATUS_DISCONNECTED_ABORT寫入為狀態。

HwQueueProgressFenceLastQueuedValueCPUVirtualAddress

[out]UMD 會在每次將新的命令緩衝區附加至通道緩衝區時,寫入新佇列進度柵欄值的位置 CPU VA。

hDoorbell

[out]新建立之 Doorbell 物件的運行時間句柄。

言論

如需詳細資訊,請參閱 使用者模式工作提交

要求

要求 價值
最低支援的用戶端 Windows 11 版本 24H2 (WDDM 3.2)
標頭 d3dkmthk.h

另請參閱

D3DKMT_CREATE_DOORBELL_FLAGS

D3DKMTConnectDoorbell

D3DKMTCreateAllocation

D3DKMTCreateDoorbell

DxgkDdiConnectDoorbell

DxgkDdiCreateDoorbell