共用方式為


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

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

顯示WDDM作業流程的圖表,從建立轉譯裝置到顯示內容。

  • 建立轉譯裝置

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

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

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

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

    • 3:在 CreateDevice 呼叫中,UMD 必須明確呼叫運行時間的 pfnCreateContextCb 函式,以建立一或多個 GPU 內容,這些是新建立裝置上執行的 GPU 線程。 運行時間會將資訊傳回 pCommandBuffer 和 CommandBufferS D3DDDICB_CREATECONTEXT ize 結構中的 UMD,以初始化命令緩衝區。

  • 建立裝置的 Surface

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

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

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

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

    • 8:D irect3D 運行時間會呼叫 UMD 的 Present Flush 函式,讓命令緩衝區提交至內核模式。 注意:UMD 也會在命令緩衝區已滿時提交命令緩衝區。

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

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

  • 將 DMA 緩衝區提交至硬體

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

    • 12:D xgkrnl 會呼叫 KMD 的 DxgkDdiSubmitCommand 函式,將分頁緩衝區排入佇列至 GPU 執行單位。

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

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

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

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