функция обратного вызова DXGKDDI_SYSTEM_DISPLAY_ENABLE (dispmprt.h)
ОС вызывает функцию драйвера в режиме ядра (KMD) DxgkddiSystemDisplayEnable, чтобы запросить, чтобы KMD сбросил текущее устройство отображения в указанное состояние.
Синтаксис
DXGKDDI_SYSTEM_DISPLAY_ENABLE DxgkddiSystemDisplayEnable;
NTSTATUS DxgkddiSystemDisplayEnable(
[in] PVOID MiniportDeviceContext,
[in] D3DDDI_VIDEO_PRESENT_TARGET_ID TargetId,
[in] PDXGKARG_SYSTEM_DISPLAY_ENABLE_FLAGS Flags,
[out] UINT *Width,
[out] UINT *Height,
[out] D3DDDIFORMAT *ColorFormat
)
{...}
Параметры
[in] MiniportDeviceContext
Обработка блока контекста, связанного с адаптером отображения. Функция KMD
[in] TargetId
Значение D3DDDI_VIDEO_PRESENT_TARGET_ID, указывающее идентификатор видео, к которому подключено отображаемое устройство. Этот идентификатор может быть для целевого объекта, который был оставлен в текущем состоянии текущей сети (VidPn) во время предыдущего вызова DxgkDdiCommitVidPn.
[in] Flags
Указатель на значение DXGKARG_SYSTEM_DISPLAY_ENABLE_FLAGS, содержащее побитовое ЗНАЧЕНИЕ ИЛИ флагов. Этот элемент зарезервирован операционной системой.
[out] Width
Ширина режима отображения указанного устройства в пикселях.
[out] Height
Высота режима отображения указанного устройства в пикселях.
[out] ColorFormat
Указатель на значение D3DDDIFORMAT, указывающее цветной формат устройства отображения.
Возвращаемое значение
DxgkDdiSystemDisplayEnable возвращает STATUS_SUCCESS в случае успешного выполнения. Если целевой объект, указанный параметром targetId, не подключен к экрану устройства, функция возвращает STATUS_NOT_SUPPORTED. В противном случае возвращается один из кодов ошибок, определенных в Ntstatus.h.
Замечания
ОС вызывает DxgkddiSystemDisplayEnable во время операции проверки ошибок после ошибки остановки системы.
Обязательные действия по KMD
KMD должен выполнить следующие действия, когда вызывается функция DxgkDdiSystemDisplayEnable:
- Отмените все операции GPU или сбросьте GPU в состояние простоя.
- ОС указывает целевой объект видео, представленный с помощью параметра TargetId. Драйвер должен поддерживать отображение, связанное с этим целевым объектом, на основе и видимых. Если драйвер не может работать на дисплее, он должен завершиться сбоем вызова этой функции. В таком случае ос может вызвать DxgkDdiResetDevice и вызвать ошибку системы.
- Проверьте подключение дисплея, связанного с этим целевым объектом. Если целевой объект не подключен к экрану, драйвер должен завершить вызов этой функции и вернуть код ошибки STATUS_NOT_SUPPORTED.
- Отключите сигнал для всех остальных дисплеев, подключенных к адаптеру дисплея. Если это невозможно, драйвер должен попытаться разместить пустое изображение на всех остальных дисплеях. Если это невозможно, драйвер должен оставить последнее изображение на экране без изменений.
- Сохраните текущий режим отображения в указанном целевом объекте и предоставьте этот режим обратно в ОС в рамках этого вызова функции.
- Если драйвер не может поддерживать текущий режим отображения, или если целевой объект не является частью активной топологии, драйвер должен попытаться установить буфер кадра на другом целевом объекте, который способен разрешение дисплея не менее 640 x 480 пикселей в формате 24 бита на пиксель. Если это невозможно, драйвер может завершиться сбоем этого вызова функции, что приведет к ошибке системы и отображению черного экрана.
KMD не требует использования режима буфера линейного кадра. Однако KMD должен поддерживать операции записи в этот буфер кадров из источников, имеющих D3DDDIFMT_A8R8G8B8 формат перечисления D3DDDIFORMAT.
Ограничения исходного образа
После того как KMD предоставляет функции управления отображением операционной системы, ОС может вызывать функцию DxgkDdiSystemDisplayWrite для обновления изображения экрана и записи блока изображений из указанных источников на экран, который был сброшен функцией DxgkDdiSystemDisplayEnable.
DxgkDdiSystemDisplayWrite предоставляет драйверу начальный адрес исходного образа, а также шаг, ширину и высоту. Цветной формат исходного изображения всегда D3DDDIFMT_X8R8G8B8. ОС гарантирует, что исходный образ находится в нестраничной памяти.
KMD должен записывать этот исходный образ на текущий экран, начиная с позиций,
Рекомендуется, чтобы драйвер использовал ЦП для записи изображения из источника в буфер кадров, так как системная ошибка может быть вызвана повторной обнаружение времени ожидания и восстановления (TDR) экземпляров, которые приводят к тому, что GPU находится в неизвестном состоянии.
Использование нестраничной памяти
Функции режима ядра Windows могут быть недоступны при вызове этой функции.
DxgkDdiSystemDisplayEnable можно вызывать в любом IRQL, поэтому он должен находиться в неизменяемой памяти. DxgkDdiSystemDisplayEnable не должен вызывать код, который находится в памяти, доступной для страниц, и не должен управлять данными, которые находится в памяти, доступной для страниц.
Автоматическое переключение отображения
Драйвер автоматического переключателя отображения DxgkDdiSystemDisplayEnable DDI должен убедиться, что в конце вызова панель самообновится (PSR). Дополнительные сведения см. в автоматического переключателя отображения.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows 8 (WDDM 1.2) |
минимальный поддерживаемый сервер | Windows Server 2012 |
целевая платформа | Настольный |
заголовка | dispmprt.h |
IRQL | Любой уровень (см. раздел "Примечания") |
См. также
DxgkCbAcquirePostDisplayOwnership