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


Вытеснение GPU

Начиная с Windows 8 была доступна новая модель вытеснения GPU. В этой модели операционная система больше не позволяет отключить вытеснение пакетов прямого доступа к памяти GPU (DMA) и гарантирует, что запросы на вытеснение будут отправляться в GPU до запуска процесса обнаружения и восстановления времени ожидания (TDR).

Требование Описание
Минимальная версия модели драйвера windows Display Driver (WDDM) 1,2
Минимальная версия Windows 8
Реализация драйвера — полная графика и только отрисовка Обязательный
Требования и тесты WHLK Device.Graphics... Тест вытеснения, Device.Graphics... FlipOnVSyncMmIo

Если длительные пакеты не могут быть успешно вытеснированы, высокоприоритетная работа GPU, например работа, необходимая диспетчеру окон рабочего стола (DWM), может быть отложена, что приведет к сбоям при переходе окна и анимации. Кроме того, длительные пакеты GPU, которые не могут быть упрещены, могут привести к повторному сбросу GPU процесса TDR и в конечном итоге может произойти проверка системных ошибок.

Примечание Все драйверы мини-портов для дисплея WDDM 1.2 должны поддерживать модель Windows 8 вытеснения. Однако при работе драйверы WDDM 1.2 также могут отклонять модель Windows 8 вытеснения и сохранять поведение Windows 7 с помощью планировщика подсистемы графического ядра Microsoft DirectX.

Интерфейсы драйверов устройств для вытеснения GPU (DDIs)

Следующие интерфейсы драйверов устройств (DDIs) доступны для драйвера мини-порта дисплея для реализации модели вытеснения Windows 8 GPU.

Отображение реализации драйвера мини-порта

Выполните следующие общие действия, чтобы реализовать модель вытеснения Windows 8 GPU в драйвере мини-порта дисплея.

  1. Скомпилируйте драйвер по заголовкам с DXGKDDI_INTERFACE_VERSION>= DXGKDDI_INTERFACE_VERSION_WIN8.
  2. Объявите поддержку модели вытеснения Windows 8 GPU, установив для членов PreemptionAware и MultiEngineAware структуры DXGK_VIDSCHCAPS значение 1. Для поддержки модели вытеснения Windows 7 задайте для PreemptionAware нулевое значение.
  3. Укажите поддерживаемый уровень детализации вытеснения в структуре D3DKMDT_PREEMPTION_CAPS , которая принимает константные значения из перечислений D3DKMDT_GRAPHICS_PREEMPTION_GRANULARITY и D3DKMDT_COMPUTE_PREEMPTION_GRANULARITY .
  4. Если оборудование поддерживает отложенное переключение контекста, отправьте буфер нулевой длины в функцию DxgkDdiSubmitCommand и задайте для элемента pSubmitCommand-Flags-ContextSwitch>> значение 1. Обратите внимание на обсуждение в элементе ContextSwitchструктуры DXGK_SUBMITCOMMANDFLAGS .
  5. Настройте выделение контекста GPU и выделение контекста устройства, вызвав функцию DxgkCbCreateContextAllocation . Обратите внимание на конкретные инструкции и ограничения, приведенные в разделе Примечания для функции.
  6. Вызовите функцию DxgkCbDesphereContextAllocation , чтобы уничтожить выделения контекста GPU и выделения контекста устройства, созданные с помощью DxgkCbCreateContextAllocation.
  7. При подготовке буфера DMA в ответ на вызов функции DxgkDdiBuildPagingBuffer инициализируйте ресурс контекста, заполнив внутреннюю структуру InitContextResource в структуре DXGKARG_BUILDPAGINGBUFFER . При вытеснении или перемещении контекстных ресурсов диспетчер видеопамяти сохранит содержимое контекстных ресурсов.
  8. Драйвер должен поддерживать отображение операций ввода-вывода, сопоставленных с памятью, при следующей вертикальной синхронизации. В Windows 8 планировщик GPU пытается вытеснять оборудование даже в том случае, если отвертки находятся в состоянии ожидания. Таким образом, чтобы предотвратить разрыв и отрисовку артефактов, драйвер должен поддерживать сопоставленную в памяти модель переключения операций ввода-вывода и задать элемент FlipOnVSyncMmIo структуры DXGK_FLIPCAPS равным 1 и поддерживать операции, описанные в разделе FlipOnVSyncMmIo.

Рекомендации по сопоставлению памяти в реализации

Создайте надежный драйвер, который поддерживает Windows 8 модель вытеснения GPU и обеспечивает качественный пользовательский интерфейс, следуя этим рекомендациям:

  • Запросите вытеснение буфера среднего уровня DMA из GPU, когда планировщик графического ядра DirectX (Dxgkrnl) отправляет команду вытеснения. Аппаратные устройства с более детальной степенью вытеснения буфера DMA в середине должны обеспечить лучшее взаимодействие с клиентами.
  • Разрешить повторное использование идентификаторов забора команд подкачки. Если запрос на вытеснение привел к упреждению команд подкачки в очереди оборудования, планировщик Dxgkrnl повторно отправляет команды предварительного разбиения по страницам с теми же идентификаторами ограждения, которые изначально использовались для них, и команды подкачки будут запланированы перед любыми другими командами в этом обработчике. Команды, не относящиеся к разбиению по страницам, будут повторно передаваться с новыми идентификаторами ограждения.
  • Укажите список расположения исправлений для разделенных буферов DMA. См. раздел Разделение буфера DMA.
  • Доступен режим проверки, называемый обнаружением утечки привязок, который просматривает список расположений исправлений и отклоняет пакеты, которые не отменяют привязку или не перепрограммируют выделения для каждого разделенного пакета. Некоторые аппаратные средства поддерживают виртуальные адреса, обеспечивая дополнительный уровень косвенного обращения, который может сделать эту проверку ненужной. В этом случае, чтобы указать, что драйвер откажется от режима проверки, установите для элемента NoDmaPatching структуры DXGK_VIDSCHCAPS значение 1.
  • В Windows 7 планировщик Dxgkrnl гарантирует, что все разделенные пакеты DMA, соответствующие одной и той же команде отрисовки, выполняются последовательно без переключения в другой контекст отрисовки. В модели Windows 8 вытеснения планировщик может выполнять отрисовку пакетов из разного контекста между двумя разделенными пакетами, соответствующими одной и той же команде отрисовки. Как следствие, драйверы, осведомленные о вытеснениях, должны обрабатывать отправку пакетов DMA с разделением или частичной обработкой так же, как обычная полная отправка пакетов. В частности, состояние GPU должно быть сохранено или восстановлено на границе для таких отправок.
  • Драйвер с поддержкой вытеснения не должен изменять содержимое разделенного буфера DMA, если он транслируется нескольким адаптерам в режиме связанного видеоадаптера (LDA), где несколько физических GPU связаны для формирования одного более быстрого виртуального GPU. Это связано с тем, что в модели Windows 8 вытеснения планировщик Dxgkrnl больше не гарантирует синхронное выполнение последовательности разделенных пакетов без переключения в другой контекст. Драйвер, изменивший содержимое разделенного пакета DMA, будет скомпрометировать целостность данных пакета, так как если пакет будет выполнен на другом механизме, он будет работать с той же копией данных буфера DMA.
  • В модели вытеснения Windows 8 GPU планировщик Dxgkrnl включает вытеснение для пакетов, имеющих связанные примитивы синхронизации "сигнал при отправке". Если устройство использует примитивы синхронизации "сигнал при отправке" в сочетании с аппаратными состояниями ожидания, оно должно поддерживать возможность упреждения инструкции ожидания до выполнения условия ожидания.

Сертификационные требования к оборудованию

Сведения о требованиях, которым должны соответствовать аппаратные устройства при реализации этой функции, см. в соответствующей документации по WHCK на сайте Device.Graphics... Тест вытеснения и устройство.Graphics... FlipOnVSyncMmIo.

Обзор функций, добавленных с помощью Windows 8, см. в разделе Функции WDDM 1.2.