Megosztás a következőn keresztül:


Parancspuffer elküldése

A parancspuffer Windows grafikus vermen keresztüli átviteléhez a következő műveletsort kell végrehajtani:

  1. A felhasználói módú megjelenítési illesztőprogram (UMD) parancspuffer-küldést kezdeményez, ha a Direct3D futtatókörnyezet a következő UMD-függvények egyikét hívja meg a megadott művelet végrehajtásához:

    • Az Present függvény a grafikus elemek megjelenítéséhez.
    • A Flush függvény a hardverparancsok elküldéséhez.
    • Az aktuális parancskötegben használt erőforrás zárolásához használt Lock függvény.

    Az UMD mindig kezdeményez egy parancspuffer-küldést, ha a parancspuffer megtelt.

  2. Az UMD meghívja a Direct3D futtatókörnyezet pfnRenderCb függvényét, hogy küldje el a parancspuffert a futtatókörnyezetnek.

  3. A DirectX grafikus kernel alrendszere (Dxgkrnl) meghívja a kernel módú megjelenítési miniportillesztő (KMD) DxgkDdiRender vagy DxgkDdiRenderKm függvényét a parancspuffer ellenőrzéséhez, egy DMA-puffer hardverformátumban való írásához, és létrehoz egy foglalási listát, amely leírja a használt felületeket. Vegye figyelembe, hogy a DMA-puffer még nem lett javítva (azaz hozzárendelt fizikai címek). Jegyzet Ha a futtatókörnyezet az UMD Present függvényének meghívásával indította el a parancspuffer-küldést, a grafikus alrendszer a DxgkDdiPresent függvényt hívja meg a DxgkDdiRender vagy a DxgkDdiRenderKm helyett.

  4. A videomemória-kezelő meghívja a KMD DxgkDdiBuildPagingBuffer függvényét, hogy hozzon létre speciális célú DMA-puffereket, más néven lapozópuffereket, amelyek áthelyezik a DMA-puffert a GPU által hozzáférhető memóriába és onnan elkísérő foglalási listában megadott foglalásokat. További információért lásd a videomemória-erőforrások lapozása részt.

  5. A GPU-ütemező meghívja a KMD DxgkDdiPatch függvényét, hogy fizikai címeket rendeljen a DMA-puffer erőforrásaihoz. Az ütemezőnek azonban nem kell meghívnia a DxgkDdiPatchet , hogy fizikai címeket rendeljen a lapozópufferhez, mert a lapozópuffer fizikai címei a DxgkDdiBuildPagingBuffer hívás során lettek átadva és hozzárendelve.

  6. A GPU-ütemező meghívja a KMD DxgkDdiSubmitCommand függvényét, hogy kérje az illesztőprogramot a lapozópuffernek a GPU végrehajtási egységéhez történő sorba állítására.

  7. A GPU-ütemező meghívja a KMD DxgkDdiSubmitCommand függvényét, hogy megkérje az illesztőprogramot, hogy sorba állítsa a DMA-puffert a GPU végrehajtási egységéhez. A GPU-nak küldött összes DMA-puffer tartalmaz egy kerítésazonosítót. Miután a GPU befejezte a DMA-puffer feldolgozását, a GPU megszakítást hoz létre.

  8. A KMD értesítést kap a megszakításról a DxgkDdiInterruptRoutine függvényben. A KMD-nek a GPU-ból be kell olvasnia az imént befejezett DMA-puffer kerítésazonosítóját.

  9. A KMD meghívja a DxgkCbNotifyInterrupt függvényt , hogy értesítse a GPU-ütemezőt a DMA-puffer befejezéséről.

  10. A KMD-nek meg kell hívnia a DxgkCbQueueDpc függvényt egy halasztott eljáráshívás (DPC) várólistára helyezéséhez.

  11. A rendszer értesíti a KMD DPC-jét, hogy kezelje a DMA pufferfeldolgozásának nagy részét.