必須執行下列作業順序,才能透過 Windows 圖形堆棧傳遞命令緩衝區:
當 Direct3D 執行期間呼叫下列 UMD 函式之一以執行指定操作時,使用者模式顯示驅動程式 (UMD) 會啟動命令緩衝區提交。
每當命令緩衝區已滿時,UMD 總是會啟動命令緩衝區提交。
UMD 會呼叫 Direct3D 運行時間的 pfnRenderCb 函式,將命令緩衝區提交至運行時間。
DirectX 圖形核心子系統 (Dxgkrnl) 會呼叫內核模式顯示迷你埠驅動程式的 (KMD) DxgkDdiRender 或 DxgkDdiRenderKm 函式來驗證命令緩衝區、以硬體格式撰寫 DMA 緩衝區,並產生描述所使用介面的配置清單。 請注意,DMA 緩衝區尚未修補(也就是指派的實體位址)。 注意如果運行時間藉由呼叫 UMD 的 Present 函式來起始命令緩衝區提交,圖形子系統會呼叫 KMD 的 DxgkDdiPresent 函式,而不是 DxgkDdiRender 或 DxgkDdiRenderKm。
視訊記憶體管理員會呼叫 KMD 的 DxgkDdiBuildPagingBuffer 函式來建立特定用途的 DMA 緩衝區,這些緩衝區稱為分頁緩衝區,以便在 DMA 緩衝區所附的配置清單中,將指定的配置移入或移出 GPU 可存取的記憶體。 如需更多資訊,請參閱分頁的視訊記憶體資源。
GPU 排程器會呼叫 KMD 的 DxgkDdiPatch 函式,將實體位址指派給 DMA 緩衝區中的資源。 不過,排程器不需要呼叫 DxgkDdiPatch 將實體位址指派給分頁緩衝區,因為分頁緩衝區的實體位址是在 DxgkDdiBuildPagingBuffer 呼叫期間傳入並指派的。
GPU 排程器會呼叫 KMD 的 DxgkDdiSubmitCommand 函式,要求驅動程式將分頁緩衝區排入 GPU 執行單位佇列。
GPU 排程器會呼叫 KMD 的 DxgkDdiSubmitCommand 函式,要求驅動程式將 DMA 緩衝區排入 GPU 執行單位佇列。 提交至 GPU 的每個 DMA 緩衝區都包含柵欄標識碼。 GPU 完成處理 DMA 緩衝區之後,GPU 會產生中斷。
KMD 會在其 DxgkDdiInterruptRoutine 函式中收到中斷的通知。 KMD 應該從 GPU 讀取剛完成之 DMA 緩衝區的柵欄標識碼。
KMD 應該呼叫 DxgkCbNotifyInterrupt 函式,通知 GPU 排程器 DMA 緩衝區已完成。
KMD 應該呼叫 DxgkCbQueueDpc 函式,以將延遲程序呼叫(DPC)排入佇列。
KMD 的 DPC 會收到通知,負責處理大部分的 DMA 緩衝區。