Udostępnij przez


Przesyłanie buforu poleceń

Aby przekazać bufor poleceń za pośrednictwem stosu grafiki systemu Windows, należy wykonać następującą sekwencję operacji:

  1. Sterownik wyświetlania trybu użytkownika (UMD) inicjuje przesyłanie buforu poleceń, jeśli środowisko uruchomieniowe Direct3D wywołuje jedną z następujących funkcji UMD w celu wykonania określonej operacji:

    • Funkcja Present do wyświetlania grafiki.
    • Funkcja Flush do przesyłania poleceń sprzętowych.
    • Funkcja Lock do blokowania zasobu, który jest używany w bieżącej partii poleceń.

    UMD zawsze inicjuje również przesyłanie buforu poleceń za każdym razem, gdy bufor poleceń jest pełny.

  2. UMD wywołuje funkcję pfnRenderCb środowiska uruchomieniowego Direct3D w celu przesłania buforu poleceń do środowiska uruchomieniowego.

  3. Podsystem jądra grafiki DirectX (Dxgkrnl) wywołuje funkcję sterownika miniportu trybu jądra (KMD) DxgkDdiRender lub DxgkDdiRenderKm aby zweryfikować bufor poleceń, zapisać bufor DMA w formacie sprzętu i utworzyć listę alokacji, która opisuje używane powierzchnie. Należy pamiętać, że bufor DMA nie został jeszcze załatany (to znaczy, nie przypisano mu adresów fizycznych). Uwaga Jeśli środowisko uruchomieniowe zainicjowało przesyłanie buforu poleceń przez wywołanie funkcji Present UMD, podsystem graficzny wywołuje funkcję DxgkDdiPresent KMD, a nie DxgkDdiRender lub DxgkDdiRenderKm.

  4. Menedżer pamięci wideo wywołuje funkcję DxgkDdiBuildPagingBuffer usługi KMD w celu utworzenia specjalnych buforów DMA, znanych jako bufory stronicowania, które przenoszą alokacje określone na liście alokacji towarzyszącej buforowi DMA do i z pamięci dostępnej dla procesora GPU. Aby uzyskać więcej informacji, zapoznaj się z stronicowaniem zasobów pamięci wideo.

  5. Harmonogram procesora GPU wywołuje funkcję DxgkDdiPatch usługi KMD w celu przypisania adresów fizycznych do zasobów w buforze DMA. Jednak harmonizator nie musi wywoływać DxgkDdiPatch w celu przypisania adresów fizycznych do buforu stronicowania, ponieważ adresy fizyczne buforu stronicowania zostały przekazane i przypisane w trakcie wywołania DxgkDdiBuildPagingBuffer.

  6. Scheduler GPU wywołuje funkcję KMD DxgkDdiSubmitCommand, aby zażądać od sterownika zakolejkowania bufora stronicowania do jednostki wykonawczej GPU.

  7. Harmonogram procesora GPU wywołuje funkcję DxgkDdiSubmitCommand usługi KMD , aby zażądać, aby sterownik kolejkował bufor DMA do jednostki wykonywania procesora GPU. Każdy bufor DMA przesłany do procesora GPU zawiera identyfikator ogrodzenia. Po zakończeniu przetwarzania buforu DMA procesor GPU generuje przerwanie.

  8. KMD jest powiadamiany o przerwaniu w swojej funkcji DxgkDdiInterruptRoutine. KMD powinien odczytywać z GPU identyfikator sygnału końcowego buforu DMA, który został zakończony.

  9. Sterownik KMD powinien wywołać funkcję DxgkCbNotifyInterrupt, aby powiadomić harmonogram procesora GPU o zakończeniu przetwarzania bufora DMA.

  10. KMD powinien wywołać funkcję DxgkCbQueueDpc w celu kolejkowania wywołania procedury odroczonej (DPC).

  11. DPC usługi KMD jest powiadamiany o obsłudze większości przetwarzania buforu DMA.