Поделиться через


Поток операций модели драйвера Windows (WDDM)

На следующей схеме показан поток операций WDDM, возникающих при создании устройства отрисовки до момента отображения содержимого. Сведения, приведенные на схеме, подробно описывают упорядоченную последовательность потока операций.

Схема, показывющая поток операций WDDM от создания устройства отрисовки до представления содержимого на дисплее.

  • Создание устройства отрисовки

    После запроса приложения на создание устройства отрисовки:

  • Создание поверхностей для устройства

    После запроса приложения на создание поверхностей для устройства отрисовки:

  • Отправка буфера команд в режим ядра

    После запроса приложения на рисование на поверхность:

    • 7. Среда выполнения Direct3D вызывает функцию UMD, связанную с операцией рисования, например DrawPrimitive2.

    • 8. Среда выполнения Direct3D вызывает функцию UMD Present или Flush, чтобы привести к отправке буфера команд в режим ядра. Примечание. UMD также отправляет буфер команд при заполнении буфера команд.

    • 9. В ответ на шаг 8 UMD вызывает одну из следующих функций, предоставляемых средой выполнения:

    • 10: функция DXGkDdiPresent KMD вызывается, если был вызван pfnPresentCb, или функция DxgkDdiRender или DxgkDdiRenderKm, если был вызван pfnRenderCb. KMD проверяет буфер команд, записывает в буфер DMA в формате оборудования и создает список выделения, описывающий используемые поверхности.

  • Отправка буфера DMA в оборудование

    • 11. Dxgkrnl вызывает функцию KMD DxgkDdiBuildPagingBuffer для создания буферов DMA специального назначения, которые перемещают выделения, указанные в списке выделения, в память с поддержкой GPU и из нее. Эти специальные буферы DMA называются буферами разбиения по страницам. DxgkDdiBuildPagingBuffer не вызывается для каждого кадра.

    • 12. Dxgkrnl вызывает функцию KMD DxgkDdiSubmitCommand, чтобы очередь буферов разбиения по страницам в единицу выполнения GPU.

    • 13. Dxgkrnl вызывает функцию KMD DxgkDdiPatch, чтобы назначить физические адреса ресурсам в буфере DMA.

    • 14. Dxgkrnl вызывает функцию KMD DxgkDdiSubmitCommand для очереди буфера DMA в единицу выполнения GPU. Каждый буфер DMA, отправленный в GPU, содержит идентификатор ограждения, который является числом. После завершения обработки буфера DMA GPU GPU создает прерывание.

    • 15: KMD уведомляется о прерывании в функции DxgkDdiInterruptRoutine . KMD должен считывать из GPU идентификатор забора буфера DMA, который только что завершился.

    • 16. KMD должен вызвать DxgkCbNotifyInterrupt , чтобы уведомить DXGK о завершении буфера DMA. KMD также должен вызывать DxgkCbQueueDpc в очередь отложенного вызова процедуры (DPC).