Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Для передачи буфера команд через стек графики Windows необходимо выполнить следующую последовательность операций:
Драйвер отображения пользовательского режима (UMD) инициирует отправку буфера команд, если среда выполнения Direct3D вызывает одну из следующих функций UMD для выполнения указанной операции:
- Функция Present для отображения графики.
- Функция Flush для отправки аппаратных команд.
- Функция Lock для блокировки ресурса, используемого в данном пакете команд.
UMD также всегда инициирует отправку буфера команд при заполнении буфера команд.
UMD вызывает функцию среды выполнения Direct3D pfnRenderCb для отправки буфера команд в среду выполнения.
Подсистема графического ядра DirectX (Dxgkrnl) вызывает функцию драйвера минипорта (KMD) DxgkDdiRender или DxgkDdiRenderKm для проверки буфера команд, записи буфера DMA в формате, поддерживаемом оборудованием, и создания списка распределения, описывающего используемые поверхности. Обратите внимание, что буфер DMA еще не исправлен (то есть назначенные физические адреса). Заметка Если среда выполнения инициировала отправку буфера команд путем вызова функции UMD Present , графическая подсистема вызывает функцию KMD DxgkDdiPresent , а не DxgkDdiRender или DxgkDdiRenderKm.
Диспетчер памяти видео вызывает функцию DXGkDDdiBuildPagingBuffer для создания буферов DMA специального назначения, известных как буферы разбиения на страницы, которые перемещают выделения, указанные в списке выделения, сопровождающие буфер DMA и из памяти с поддержкой GPU. Дополнительные сведения см. в разделе "Ресурсы видеопамяти по страницам".
Планировщик GPU вызывает функцию DXGkDdiPatch KMD, чтобы назначить ресурсам физические адреса в буфере DMA. Однако планировщику не требуется вызывать DxgkDdiPatch , чтобы назначить физические адреса буферу разбиения по страницам, так как физические адреса для буфера разбиения по страницам были переданы и назначены во время вызова DxgkDdiBuildPagingBuffer .
Планировщик GPU вызывает функцию DXGkDDdiSubmitCommand чтобы запросить, чтобы драйвер поместил буфер страниц в блок исполнения GPU.
Планировщик GPU вызывает функцию DxgkDdiSubmitCommand, чтобы запросить, чтобы драйвер поставил буфер DMA в очередь на исполнительный блок GPU. Каждый буфер DMA, отправленный в GPU, содержит идентификатор ограждения. После завершения обработки буфера DMA графический процессор создает прерывание.
Уведомление KMD о прерывании выполняется в функции DxgkDdiInterruptRoutine. KMD должен считывать идентификатор синхронизации буфера DMA, только что завершенного, из GPU.
KMD должен вызвать функцию DxgkCbNotifyInterrupt , чтобы уведомить планировщик GPU о завершении буфера DMA.
KMD должен вызвать функцию DxgkCbQueueDpc чтобы поставить в очередь отложенный вызов процедуры (DPC).
DPC KMD уведомляется о необходимости обработки большинства DMA-буферов.