Delen via


Windows Display Driver Model -bewerkingsstroom (WDDM)

In het volgende diagram ziet u de stroom van WDDM-bewerkingen die optreden vanaf het moment waarop een render-apparaat wordt gemaakt, tot wanneer de inhoud op het scherm wordt gepresenteerd. De informatie die volgt op het diagram beschrijft de geordende volgorde van de bewerkingsstroom in meer detail.

Diagram met de WDDM-bewerkingsstroom van het maken van een renderingapparaat tot het presenteren van inhoud op de weergave.

  • Een renderingapparaat maken

    Nadat een toepassing aanvraagt om een renderingapparaat te maken:

    • 1: Het DirectX Graphics Kernel-subsysteem (Dxgkrnl) roept de kernel-modus miniport stuurprogramma (KMD) DxgkDdiCreateDevice functie aan.

      KMD initialiseert directe geheugentoegang (DMA) door een aanwijzer te retourneren naar een gevulde DXGK_DEVICEINFO structuur in het pInfo-lid van de DXGKARG_CREATEDEVICE-structuur .

    • 2: Als de aanroep naar DxgkDdiCreateDevice slaagt, roept de Direct3D-runtime de functie CreateDevice van het stuurprogramma (UMD) in de gebruikersmodus aan.

    • 3: In de aanroep CreateDevice moet UMD expliciet de pfnCreateContextCb-functie van de runtime aanroepen om een of meer GPU-contexten te maken. Dit zijn GPU-threads voor uitvoering op het zojuist gemaakte apparaat. De runtime retourneert informatie naar UMD in de pCommandBuffer en CommandBufferSize leden van de D3DDDICB_CREATECONTEXT-structuur om de opdrachtbuffer te initialiseren.

  • Surfaces voor een apparaat maken

    Nadat een toepassing verzoekt om oppervlakken voor het renderingapparaat te creƫren:

  • De opdrachtbuffer verzenden naar kernelmodus

    Nadat een toepassing aanvraagt om te tekenen op een oppervlak:

    • 7: De Direct3D-runtime roept de UMD-functie aan die is gerelateerd aan de tekenbewerking, bijvoorbeeld DrawPrimitive2.

    • 8: De Direct3D-runtime roept de functie Present of Flush van de UMD aan om ervoor te zorgen dat de opdrachtbuffer wordt verzonden naar de kernelmodus. Opmerking: UMD verzendt ook de opdrachtbuffer wanneer de opdrachtbuffer vol is.

    • 9: In reactie op stap 8 roept UMD een van de volgende door runtime geleverde functies aan:

    • 10: De functie DxgkDdiPresent van KMD wordt aangeroepen als pfnPresentCb is aangeroepen, of de functie DxgkDdiRender of DxgkDdiRenderKm als pfnRenderCb is aangeroepen. KMD valideert de commando buffer, schrijft naar de DMA-buffer in het formaat dat overeenkomt met de hardware, en produceert een allocatielijst die de gebruikte oppervlakken beschrijft.

  • De DMA-buffer verzenden naar hardware

    • 11: Dxgkrnl roept de functie DxgkDdiBuildPagingBuffer van KMD aan om speciale DMA-buffers te maken waarmee de toewijzingen die zijn opgegeven in de toewijzingslijst worden verplaatst naar en van gpu toegankelijk geheugen. Deze speciale DMA-buffers worden wisselbuffers genoemd. DxgkDdiBuildPagingBuffer wordt niet voor elk frame aangeroepen.

    • 12: Dxgkrnl roept de functie DxgkDdiSubmitCommand van KMD aan om de paginabuffers in de wachtrij te plaatsen voor de GPU-uitvoeringseenheid.

    • 13: Dxgkrnl roept de functie DxgkDdiPatch van KMD aan om fysieke adressen toe te wijzen aan de resources in de DMA-buffer.

    • 14: Dxgkrnl roept de functie DxgkDdiSubmitCommand van KMD aan om de DMA-buffer in de wachtrij te plaatsen bij de GPU-uitvoeringseenheid. Elke DMA-buffer die naar de GPU wordt verzonden, bevat een fence-id, dat een getal is. Nadat de GPU klaar is met het verwerken van de DMA-buffer, genereert de GPU een interrupt.

    • 15: KMD wordt op de hoogte gesteld van de interrupt in de functie DxgkDdiInterruptRoutine . KMD moet de fence identifier van de voltooide DMA-buffer van de GPU lezen.

    • 16: KMD moet DxgkCbNotifyInterrupt aanroepen om Dxgkrnl te informeren dat de DMA-buffer is voltooid. KMD moet ook DxgkCbQueueDpc aanroepen om een uitgestelde procedureaanroep (DPC) in de wachtrij te plaatsen.