提交命令緩衝區

必須執行下列作業順序,才能透過 Windows Vista 圖形堆疊傳遞命令緩衝區:

  1. 如果使用者模式顯示驅動程式會起始命令緩衝區提交,如果 Direct3D 執行時間呼叫下列其中一個使用者模式顯示驅動程式函式來執行指定的作業:

    請注意,每當命令緩衝區已滿時,使用者模式顯示驅動程式也會一律起始命令緩衝區提交。

  2. 使用者模式顯示驅動程式會呼叫 Direct3D 執行時間的 pfnRenderCb 函式,將命令緩衝區提交至執行時間。

  3. DirectX 圖形核心子系統會呼叫顯示迷你埠驅動程式的 DxgkDdiRenderDxgkDdiRenderKm 函式來驗證命令緩衝區、以硬體的格式撰寫 DMA 緩衝區,並產生描述所使用介面的配置清單。 請注意,DMA 緩衝區尚未修補 (,也就是指派的實體位址) 。 注意如果執行時間藉由呼叫使用者模式顯示驅動程式的Present函式來起始命令緩衝區提交,圖形子系統會呼叫 display miniport 驅動程式的DxgkDdiPresent函式,而不是DxgkDdiRender 或 DxgkDdiRenderKm

  4. 視訊記憶體管理員會呼叫顯示迷你埠驅動程式的 DxgkDdiBuildPagingBuffer 函式來建立特殊用途的 DMA 緩衝區,稱為分頁緩衝區,將 DMA 緩衝區隨附于 DMA 緩衝區的配置移入和移出 GPU 可存取的記憶體。 如需詳細資訊,請參閱 分頁視訊記憶體資源

  5. GPU 排程器會呼叫 display miniport 驅動程式的 DxgkDdiPatch 函式,以將實體位址指派給 DMA 緩衝區中的資源。 不過,排程器不需要呼叫 DxgkDdiPatch ,即可將實體位址指派給分頁緩衝區,因為分頁緩衝區的實體位址是在 DxgkDdiBuildPagingBuffer 呼叫期間傳入並指派的。

  6. GPU 排程器會呼叫顯示迷你埠驅動程式的 DxgkDdiSubmitCommand 函式,要求驅動程式將分頁緩衝區排入 GPU 執行單位。

  7. GPU 排程器會呼叫顯示迷你埠驅動程式的 DxgkDdiSubmitCommand 函式,要求驅動程式將 DMA 緩衝區排入 GPU 執行單位。 提交至 GPU 的每個 DMA 緩衝區都包含柵欄識別碼。 GPU 完成處理 DMA 緩衝區之後,GPU 會產生中斷。

  8. 顯示迷你埠驅動程式會在其 DxgkDdiInterruptRoutine 函式中收到中斷通知。 顯示迷你埠驅動程式應該從 GPU 讀取剛完成之 DMA 緩衝區的柵欄識別碼。

  9. 顯示迷你埠驅動程式應該呼叫 DxgkCbNotifyInterrupt 函式,以通知 GPU 排程器 DMA 緩衝區已完成。

  10. 顯示迷你埠驅動程式應該呼叫 DxgkCbQueueDpc 函式,將延遲的程式調用排入佇列 (DPC) 。

  11. 顯示迷你埠驅動程式的 DPC 會收到通知,以處理大部分的 DMA 緩衝區處理。