Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az alábbi ábra a WDDM-műveletek folyamatát mutatja be, amelyek akkor következnek be, amikor egy renderelő eszköz létrejön, és amikor a tartalom megjelenik a kijelzőn. A diagramot követő információk részletesebben ismertetik a műveleti folyamat rendezett sorrendjét.
Renderelő eszköz létrehozása
Miután egy alkalmazás egy renderelő eszköz létrehozását kérte:
1: A DirectX grafikus kernel alrendszere (Dxgkrnl) meghívja a kernel módú megjelenítési miniportillesztő (KMD) DxgkDdiCreateDevice függvényét .
A KMD inicializálja a közvetlen memóriahozzáférést (DMA) úgy, hogy visszaad egy mutatót egy kitöltött DXGK_DEVICEINFO struktúrára a DXGKARG_CREATEDEVICE struktúra pInfo tagjában.
2: Ha a DxgkDdiCreateDevice hívása sikeres, a Direct3D futtatókörnyezet meghívja a felhasználói módú megjelenítési illesztőprogram (UMD) CreateDevice függvényét .
3: A CreateDevice hívásban az UMD-nek explicit módon meg kell hívnia a futtatókörnyezet pfnCreateContextCb függvényét egy vagy több GPU-környezet létrehozásához, amelyek gpu-végrehajtási szálak az újonnan létrehozott eszközön. A futtatási környezet információkat ad vissza az UMD-nek a pCommandBuffer és CommandBufferSize tagokban a D3DDDICB_CREATECONTEXT struktúrában a parancspuffer inicializálásához.
Felületek létrehozása eszközhöz
Miután egy alkalmazás felületeket kért a renderelő eszközhöz:
4: A Direct3D futtatókörnyezet meghívja az UMD CreateResource függvényét.
5: A CreateResource meghívja a futtatókörnyezet által megadott pfnAllocateCb függvényt .
6: A futtatókörnyezet meghívja a KMD DxgkDdiCreateAllocation függvényét, megadva a létrehozandó foglalások számát és típusait. A DxgkDdiCreateAllocation a DXGKARG_CREATEALLOCATION struktúra pAllocationInfo tagjában lévő DXGK_ALLOCATIONINFO struktúrák tömbjében lévő foglalásokról ad vissza információkat.
A parancspuffer elküldése kernel módba
Miután egy alkalmazás egy felületre való rajzolásra vonatkozó kérést kér:
7: A Direct3D futtatókörnyezet meghívja a rajzművelethez kapcsolódó UMD függvényt, például a DrawPrimitive2 függvényt.
8: A Direct3D futtatókörnyezet meghívja az UMD Present vagy Flush függvényét, hogy a parancspuffer kernel módba legyen küldve. Megjegyzés: Az UMD akkor is elküldi a parancspuffert, ha a parancspuffer megtelt.
9: A 8. lépésre válaszul az UMD a következő futtatókörnyezetben megadott függvények egyikét hívja meg:
- A futtatókörnyezet pfnPresentCb függvénye, ha meghívták a Present-et.
- A futtatókörnyezet pfnRenderCb függvénye, ha flush volt meghívva, vagy a parancspuffer megtelt.
10: A KMD DxgkDdiPresent függvényét a rendszer meghívja , ha a pfnPresentCb meghívást kapott, vagy a DxgkDdiRender vagy a DxgkDdiRenderKm függvényt, ha pfnRenderCb volt meghívva. A KMD ellenőrzi a parancspuffert, a hardver formátumában írja a DMA-pufferbe, és létrehoz egy foglalási listát, amely leírja a használt felületeket.
A DMA-puffer elküldése hardverre
11: A Dxgkrnl meghívja a KMD DxgkDdiBuildPagingBuffer függvényét, hogy olyan speciális célú DMA-puffereket hozzon létre, amelyek áthelyezik a foglalási listában megadott foglalásokat a GPU által elérhető memóriába és onnan. Ezeket a speciális DMA-puffereket lapozópuffereknek nevezzük. A DxgkDdiBuildPagingBuffer nem minden kerethez van meghívva.
12: A Dxgkrnl meghívja a KMD DxgkDdiSubmitCommand függvényét, hogy a lapozópuffereket ütemezze a GPU végrehajtási egységére.
13: A Dxgkrnl meghívja a KMD DxgkDdiPatch függvényét, hogy fizikai címeket rendeljen a DMA-puffer erőforrásaihoz.
14: Dxgkrnl meghívja a KMD DxgkDdiSubmitCommand függvényét a DMA-puffer várólistára állításához a GPU végrehajtási egységéhez. A GPU-nak küldött összes DMA-puffer tartalmaz egy kerítésazonosítót, amely egy szám. Miután a GPU befejezte a DMA-puffer feldolgozását, a GPU megszakítást hoz létre.
15: A KMD értesítést kap a megszakításról a DxgkDdiInterruptRoutine függvényben. A KMD-nek be kell olvasnia a befejezett DMA-puffer kerítésazonosítóját a GPU-ból.
16: A KMD meghívja a DxgkCbNotifyInterruptet , hogy értesítse a Dxgkrnl-et a DMA-puffer befejezéséről. A KMD-nek a DxgkCbQueueDpc-t is meg kell hívnia a késleltetett eljáráshívás (DPC) várólistára helyezéséhez.