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


функция обратного вызова DXGKDDI_SYSTEM_DISPLAY_ENABLE (dispmprt.h)

Вызывается операционной системой для запроса драйвера мини-порта дисплея для сброса текущего устройства отображения в указанное состояние.

Начиная с Windows 8, операционная система вызывает эту функцию во время операции проверки ошибок после остановки системы.

Синтаксис

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

Дескриптор для блока контекста, связанного с видеоадаптером. Функция DxgkDdiAddevice драйвера мини-порта дисплея ранее предоставляла этот дескриптор подсистеме ядра графики Microsoft DirectX.

[in] TargetId

Значение D3DDDI_VIDEO_PRESENT_TARGET_ID, указывающее идентификатор целевого объекта видео на видеоадапте, к которому подключено устройство отображения. Этот идентификатор может быть для целевого объекта, который был оставлен в текущем состоянии сети видеотрансляции (VidPn) во время предыдущего вызова DxgkDdiCommitVidPn.

Дополнительные сведения об использовании параметра TargetId см. в следующем разделе "Инициализация цели представления видео".

[in] Flags

Указатель на значение, содержащее побитовое ИЛИ флагов. Этот элемент зарезервирован операционной системой.

[out] Width

Значение UINT, указывающее ширину режима отображения указанного устройства в пикселях.

[out] Height

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

[out] ColorFormat

Указатель на значение D3DDDIFORMAT , указывающее формат цвета устройства отображения.

Возвращаемое значение

DxgkDdiSystemDisplayEnable возвращает STATUS_SUCCESS в случае успешного выполнения. Если целевой объект, указанный параметром TargetId, не подключен к устройству отображения, функция возвращает STATUS_NOT_SUPPORTED. В противном случае возвращается один из кодов ошибок, определенных в ntstatus.h.

Комментарии

Обязательные действия по драйверу мини-порта для отображения

Драйвер минипорта дисплея должен выполнить следующие действия при вызове функции DxgkDdiSystemDisplayEnable :
  1. Драйвер должен отменить все операции графического процессора (GPU) или сбросить GPU в состояние простоя.
  2. Операционная система указывает целевой объект видео с помощью параметра TargetId . Драйвер должен поддерживать отображение, связанное с этим целевым объектом, включено и отображаться. Если драйвер не может включить дисплей, вызов этой функции должен завершиться ошибкой. В таком случае операционная система может вызвать функцию DxgkDdiResetDevice и вызвать проверку системной ошибки.
  3. Драйвер должен проверка подключение дисплея, связанного с этим целевым объектом. Если к целевому объекту не подключен дисплей, драйвер должен завершить вызов этой функции и вернуть код ошибки STATUS_NOT_SUPPORTED .
  4. Драйвер должен отключить сигнал для всех остальных дисплеев, подключенных к адаптеру дисплея. Если это невозможно, драйвер должен попытаться разместить пустое изображение на всех остальных дисплеях. Если это невозможно, драйвер должен оставить последнее изображение на экране без изменений.
  5. Драйвер должен сохранить текущий режим отображения на указанном целевом объекте и предоставить этот режим операционной системе в рамках этого вызова функции.
  6. Если драйвер не может поддерживать текущий режим отображения или целевой объект не является частью активной топологии, драйвер должен попытаться установить буфер кадров на другом целевом объекте, который может иметь разрешение экрана не менее 640 x 480 пикселей в формате 24 бита на пиксель. Если это невозможно, драйвер может завершиться сбоем этого вызова функции, что приведет к системной ошибке и отображению черного экрана.

    Драйвер не должен использовать режим линейного буфера кадров. Однако драйвер должен поддерживать операции записи в этот буфер кадров из источников, имеющих формат D3DDDIFMT_A8R8G8B8 перечисления D3DDDIFORMAT .

Ограничения исходного образа

После того как драйвер предоставит операционной системе управление функциями отображения, операционная система может вызвать функцию DxgkDdiSystemDisplayWrite для обновления изображения экрана и записи блока изображений из указанных источников на экран, который был сброшен функцией DxgkDdiSystemDisplayEnable .

DxgkDdiSystemDisplayWrite предоставляет драйверу начальный адрес исходного образа, а также шаг, ширину и высоту. Цветной формат исходного изображения всегда D3DDDIFMT_X8R8G8B8. Операционная система гарантирует, что исходный образ находится в памяти без страниц.

Драйвер должен записать это исходное изображение на текущий экран, начиная с позиций, заданных параметрами PositionX и PositionY функции DxgkDdiSystemDisplayWrite .

Рекомендуется использовать ЦП для записи изображения из источника в буфер кадров, так как проверка системы может быть вызвана повторяющимися экземплярами обнаружения и восстановления времени ожидания (TDR ), в результате которых GPU находится в неизвестном состоянии.

Использование нестраничной памяти

Функции режима ядра Windows могут быть недоступны во время вызова этой функции.

DxgkDdiSystemDisplayEnable можно вызвать в любом IRQL, поэтому он должен находиться в памяти, не допускаемой для страниц. DxgkDdiSystemDisplayEnable не должен вызывать код, который находится в доступной для страниц памяти, и не должен управлять данными, которые находится в доступной для страницы памяти.

Требования

Требование Значение
Минимальная версия клиента Windows 8
Минимальная версия сервера Windows Server 2012
Целевая платформа Персональный компьютер
Верхняя часть dispmprt.h
IRQL Любой уровень (см. раздел "Примечания")

См. также раздел

D3DDDIFORMAT

DxgkCbAcquirePostDisplayOwnership

DxgkDdiAddDevice

DxgkDdiResetDevice

DxgkDdiStopDeviceAndReleasePostDisplayOwnership

DxgkDdiSystemDisplayWrite