Share via


Windows 顯示驅動程式模型 (WDDM) 作業流程

下圖顯示當呈現裝置呈現至顯示內容時,從 建立轉譯裝置時所發生的 WDDM 作業流程。 下圖後面的資訊會更詳細地描述作業流程的已排序次序。

此圖顯示 WDDM 作業流程,從建立轉譯裝置到顯示中呈現內容。

  • 建立轉譯裝置

    應用程式要求建立轉譯裝置之後:

    • 1:DirectX 圖形核心子系統 (Dxgkrnl) 呼叫顯示迷你埠驅動程式 (KMD) DxgkDdiCreateDevice 函式。

      KMD 會傳回 DXGKARG_CREATEDEVICE 結構之 pInfo成員中填滿DXGK_DEVICEINFO結構的指標,以初始化 DMA (DMA ) 直接記憶體存取。

    • 2:如果 對 DxgkDdiCreateDevice 的呼叫成功,Direct3D 執行時間會呼叫使用者模式顯示驅動程式的 (UMD) CreateDevice 函式。

    • 3:在 CreateDevice 呼叫中,UMD 必須明確呼叫執行時間的 pfnCreateCoNtextCb 函式,以建立一或多個 GPU 內容,也就是新建立裝置上執行的 GPU 執行緒。 執行時間會將資訊傳回pCommandBuffer 和 CommandBufferSD3DDDICB_CREATECONTEXTize結構中的 UMD,以初始化命令緩衝區。

  • 建立裝置的介面

    在應用程式要求建立轉譯裝置的介面之後:

  • 將命令緩衝區提交至核心模式

    在應用程式要求繪製至表面之後:

    • 7:Direct3D 執行時間會呼叫與繪圖作業相關的 UMD 函式,例如 DrawPrimitive2

    • 8:Direct3D 執行時間會呼叫 UMD 的 PresentFlush 函式,讓命令緩衝區提交至核心模式。 注意:UMD 也會在命令緩衝區已滿時提交命令緩衝區。

    • 9:為了回應步驟 8,UMD 會呼叫下列其中一個執行時間提供的函式:

    • 10:如果呼叫pfnPresentCb,則會呼叫KMD 的 DxgkDdiPresent函式,如果呼叫pfnRenderCb,則會呼叫DxgkDdiRender 或 DxgkDdiRenderKm函式。 KMD 會驗證命令緩衝區、以硬體格式寫入 DMA 緩衝區,並產生描述所使用介面的配置清單。

  • 將 DMA 緩衝區提交至硬體

    • 11Dxgkrnl 會呼叫 KMD 的 DxgkDdiBuildPagingBuffer 函 式,以建立特殊用途的 DMA 緩衝區,以將配置清單中指定的配置從 GPU 存取記憶體來回移動。 這些特殊的 DMA 緩衝區稱為分頁緩衝區。 不會針對每個畫面呼叫DxgkDdiBuildPagingBuffer

    • 12Dxgkrnl 會呼叫 KMD 的 DxgkDdiSubmitCommand 函 式,將分頁緩衝區排入 GPU 執行單位。

    • 13Dxgkrnl 會呼叫 KMD 的 DxgkDdiPatch 函式,將實體位址指派給 DMA 緩衝區中的資源。

    • 14Dxgkrnl 會呼叫 KMD 的 DxgkDdiSubmitCommand 函式,將 DMA 緩衝區排入 GPU 執行單位。 提交至 GPU 的每個 DMA 緩衝區都包含一個柵欄識別碼,也就是數位。 GPU 完成處理 DMA 緩衝區之後,GPU 會產生中斷。

    • 15:KMD 會在其 DxgkDdiInterruptRoutine 函式中收到中斷的通知。 KMD 應該從 GPU 讀取剛完成之 DMA 緩衝區的柵欄識別碼。

    • 16:KMD 應該呼叫 DxgkCbNotifyInterrupt 函式,以通知 DXGK DMA 緩衝區已完成。 KMD 也應該呼叫 DxgkCbQueueDpc 函式,將延遲程序呼叫排入佇列 (DPC) 。