Отрисовка на дискретном GPU с использованием ресурсов между адаптерами
Начиная с Windows 8.1 дискретный GPU использует ресурс перекрестного адаптера в качестве:
- Назначение для передачи битовых блоков (bitblt) или настоящих операций, но без растяжения или преобразования цвета.
- Ресурс, к которому операционная система запрашивает драйвер отображения пользовательского режима для выполнения операции bitblt или present.
Интегрированный GPU использует ресурс перекрестного адаптера в качестве:
- Текстура во время композиции с помощью диспетчера окон рабочего стола (DWM).
- Целевой объект отрисовки для аппаратного ускорения GDI.
- Основной элемент отображения.
- Не является целевым объектом отрисовки для трехмерных операций.
В следующих разделах описывается архитектура и процессы, связанные с тремя возможными сценариями, в которых приложение выполняет отрисовку на дискретном GPU в гибридной системе.
Перенаправленная модель представления bitblt
- Ресурс перекрестного адаптера для окна верхнего уровня создается в режиме ядра в виде стандартного выделения на интегрированном GPU.
- При открытии этого ресурса на дискретном GPU подсистема графического ядра DirectX (Dxgkrnl.sys) вызывает функцию DxgkDdiGetStandardAllocationDriverData и создает новый ресурс на дискретном GPU, используя то же резервное хранилище (запоминающее устройство), что и для интегрированного GPU.
- Среда выполнения Direct3D предписывает дискретному драйверу отображения графического процессора в пользовательском режиме открыть ресурс перекрестного адаптера с помощью частных данных драйвера.
- Приложение DirectX выполняет отрисовку на дискретном GPU в ресурсе обратного буфера. См. операцию "Отрисовка" на рисунке.
- Когда приложение DirectX вызывает метод Present , среда выполнения Direct3D вызывает функцию PresentDXGI (или pfnPresent) дискретного драйвера пользовательского режима GPU для копирования обратного буфера в ресурс перекрестного адаптера. См. операцию "Present" на рисунке.
- Когда приложение интерфейса графических устройств Windows (GDI) отрисовывается в окне верхнего уровня, подсистема графического ядра DirectX вызывает функцию DxgkDdiRenderKm драйвера мини-порта дисплея интегрированного графического процессора и указывает, что ресурс перекрестного адаптера является целевым объектом отрисовки. См. подключение между приложением GDI и поверхностью перекрестного адаптера на рисунке.
- Процесс DWM открывает ресурс кроссадаптера во встроенном GPU и использует его во время композиции в качестве исходной текстуры. См. операцию "Композиция" на рисунке.
Модель представления с прямым отражением
- Среда выполнения Direct3D предписывает дискретному драйверу отображения пользовательского режима GPU создать ресурс перекрестного адаптера для каждой поверхности цепочки буферов.
- На дискретном GPU среда выполнения Direct3D может задать элементы Primary и VidPnSourceIdструктуры D3DDDI_ALLOCATIONINFO , если режим прямого переворачивания доступен. Эти значения элементов должны передаваться при вызове функции pfnAllocateCb .
- Среда выполнения Direct3D предписывает интегрированному драйверу отображения в пользовательском режиме GPU открыть ресурс между адаптерами, которым должен управлять DWM.
- Приложение выполняет отрисовку на дискретном GPU, используя целевую текстуру отрисовки в качестве назначения. См. операцию "Отрисовка" на рисунке.
- Когда приложение вызывает метод Present , среда выполнения Direct3D вызывает функцию BltDXGI (или pfnBlt) драйвера пользовательского режима дискретного GPU для выполнения копирования в ресурс кроссадаптера. Затем среда выполнения вызывает функцию PresentDXGI (или pfnPresent) дискретного драйвера пользовательского режима GPU, при этом источнику присваивается ресурс перекрестного адаптера, а целевому выделению — значение NULL. См. операцию копирования на рисунке.
- DwM выполняет свою композицию с помощью ресурса из интегрированного GPU. Если требуется операция прямого переворачивания (DXGK_SEGMENTFLAGS.Задано значение DirectFlip ). DWM предписывает встроенному драйверу мини-порта дисплея GPU выполнить операцию переворачивания от одного выделения перекрестного адаптера к другому. См. операцию "Перевернуть DWM" на рисунке.
Полноэкранная модель
- Среда выполнения Direct3D предписывает интегрированному драйверу отображения пользовательского режима GPU создать общее основное выделение между адаптерами для каждой поверхности цепочки буферов.
- Среда выполнения Direct3D указывает дискретному драйверу отображения в пользовательском режиме GPU открыть ресурсы между адаптерами.
- Приложение выполняет отрисовку на дискретном GPU, используя целевую текстуру отрисовки в качестве назначения.
- Когда приложение вызывает метод Present , среда выполнения Direct3D предписывает дискретному драйверу отображения пользовательского режима GPU выполнить копирование в ресурс кроссадаптера.
- Встроенный драйвер дисплея в пользовательском режиме GPU и драйвер мини-порта дисплея должны перейти к этому ресурсу кроссадаптера.