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

디스플레이 어댑터와 연결된 컨텍스트 블록에 대한 핸들입니다. 디스플레이 미니포트 드라이버의 DxgkDdiAddDevice 함수는 이전에 이 핸들을 Microsoft DirectX 그래픽 커널 하위 시스템에 제공했습니다.

[in] TargetId

디스플레이 디바이스가 연결된 디스플레이 어댑터에 있는 비디오 대상의 식별자를 지정하는 D3DDDI_VIDEO_PRESENT_TARGET_ID 값입니다. 이 식별자는 DxgkDdiCommitVidPn에 대한 이전 호출 중에 현재 비디오 현재 네트워크(VidPn) 상태에 남아 있는 대상에 대한 것일 수 있습니다.

TargetId 매개 변수 사용에 대한 자세한 내용은 다음 "비디오 현재 대상 초기화" 섹션을 참조하세요.

[in] Flags

비트 OR 플래그가 포함된 값에 대한 포인터입니다. 이 멤버는 운영 체제에서 예약됩니다.

[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. 드라이버가 현재 디스플레이 모드를 유지할 수 없거나 대상이 활성 토폴로지의 일부가 아닌 경우 드라이버는 픽셀당 24비트 형식으로 최소 640 x 480픽셀의 디스플레이 해상도가 가능한 다른 대상에 프레임 버퍼를 설정하려고 시도해야 합니다. 가능하지 않으면 드라이버가 이 함수 호출에 실패할 수 있으며, 이로 인해 시스템 버그 검사와 검은색 화면이 표시됩니다.

    드라이버가 선형 프레임 버퍼 모드를 사용할 필요는 없습니다. 그러나 드라이버는 D3DDDIFORMAT 열거형의 D3DDDIFMT_A8R8G8B8 형식을 가진 소스에서 이 프레임 버퍼에 대한 쓰기 작업을 지원해야 합니다.

원본 이미지 제한 사항

드라이버가 운영 체제에 디스플레이 기능을 제어한 후 운영 체제는 DxgkDdiSystemDisplayWrite 함수를 호출하여 화면 이미지를 업데이트하고 지정된 소스의 이미지 블록을 DxgkDdiSystemDisplayEnable 함수에 의해 다시 설정된 화면에 쓸 수 있습니다.

DxgkDdiSystemDisplayWrite 는 드라이버에 원본 이미지의 시작 주소와 보폭, 너비 및 높이를 제공합니다. 원본 이미지의 색 형식은 항상 D3DDDIFMT_X8R8G8B8. 운영 체제는 원본 이미지가 페이징되지 않은 메모리에 있음을 보장합니다.

드라이버는 DxgkDdiSystemDisplayWrite 함수의 PositionXPositionY 매개 변수로 지정된 위치에서 시작하여 현재 화면에 이 원본 이미지를 작성해야 합니다.

GPU가 알 수 없는 상태에 있는 반복된 TDR(시간 제한 검색 및 복구) 인스턴스로 인해 시스템 버그 검사가 발생할 수 있으므로 드라이버가 CPU를 사용하여 원본의 이미지를 프레임 버퍼에 쓰는 것이 좋습니다.

페이징이 아닌 메모리 사용

이 함수가 호출되는 동안에는 Windows 커널 모드 함수를 사용할 수 없습니다.

DxgkDdiSystemDisplayEnable 은 모든 IRQL에서 호출할 수 있으므로 페이지를 매길 수 없는 메모리에 있어야 합니다. DxgkDdiSystemDisplayEnable 은 페이징 가능한 메모리에 있는 코드를 호출해서는 안 되며 페이징 가능한 메모리에 있는 데이터를 조작해서는 안 됩니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8
지원되는 최소 서버 Windows Server 2012
대상 플랫폼 데스크톱
머리글 dispmprt.h
IRQL 모든 수준(설명 섹션 참조)

추가 정보

D3DDDIFORMAT

DxgkCbAcquirePostDisplayOwnership

DxgkDdiAddDevice

DxgkDdiResetDevice

DxgkDdiStopDeviceAndReleasePostDisplayOwnership

DxgkDdiSystemDisplayWrite