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 함수가 호출되는 경우 다음 단계를 따라야 합니다.- 드라이버는 모든 GPU(그래픽 처리 장치) 작업을 취소하거나 GPU를 유휴 상태로 다시 설정해야 합니다.
- 운영 체제는 TargetId 매개 변수를 통해 비디오가 있는 대상을 나타냅니다. 드라이버는 이 대상과 연결된 디스플레이를 켜고 표시하도록 유지해야 합니다. 드라이버가 디스플레이에 전원을 공급할 수 없는 경우 이 함수에 대한 호출에 실패해야 합니다. 이러한 오류의 경우 운영 체제에서 DxgkDdiResetDevice 함수를 호출하여 시스템 버그 검사가 발생할 수 있습니다.
- 드라이버는 이 대상과 연결된 디스플레이의 연결을 검사 합니다. 대상에 연결된 디스플레이가 없는 경우 드라이버는 이 함수에 대한 호출을 완료하고 STATUS_NOT_SUPPORTED 오류 코드를 반환해야 합니다.
- 드라이버는 디스플레이 어댑터에 연결된 다른 모든 디스플레이에 신호를 사용하지 않도록 설정해야 합니다. 이렇게 할 수 없는 경우 드라이버는 다른 모든 디스플레이에 빈 이미지를 배치하려고 시도해야 합니다. 이렇게 할 수 없는 경우 드라이버는 화면의 마지막 이미지를 변경하지 않고 유지해야 합니다.
- 드라이버는 표시된 대상에서 현재 디스플레이 모드를 유지하고 이 함수 호출의 일부로 이 모드를 운영 체제에 다시 제공해야 합니다.
-
드라이버가 현재 디스플레이 모드를 유지할 수 없거나 대상이 활성 토폴로지의 일부가 아닌 경우 드라이버는 픽셀당 24비트 형식으로 최소 640 x 480픽셀의 디스플레이 해상도가 가능한 다른 대상에 프레임 버퍼를 설정하려고 시도해야 합니다. 가능하지 않으면 드라이버가 이 함수 호출에 실패할 수 있으며, 이로 인해 시스템 버그 검사와 검은색 화면이 표시됩니다.
드라이버가 선형 프레임 버퍼 모드를 사용할 필요는 없습니다. 그러나 드라이버는 D3DDDIFORMAT 열거형의 D3DDDIFMT_A8R8G8B8 형식을 가진 소스에서 이 프레임 버퍼에 대한 쓰기 작업을 지원해야 합니다.
원본 이미지 제한 사항
드라이버가 운영 체제에 디스플레이 기능을 제어한 후 운영 체제는 DxgkDdiSystemDisplayWrite 함수를 호출하여 화면 이미지를 업데이트하고 지정된 소스의 이미지 블록을 DxgkDdiSystemDisplayEnable 함수에 의해 다시 설정된 화면에 쓸 수 있습니다.DxgkDdiSystemDisplayWrite 는 드라이버에 원본 이미지의 시작 주소와 보폭, 너비 및 높이를 제공합니다. 원본 이미지의 색 형식은 항상 D3DDDIFMT_X8R8G8B8. 운영 체제는 원본 이미지가 페이징되지 않은 메모리에 있음을 보장합니다.
드라이버는 DxgkDdiSystemDisplayWrite 함수의 PositionX 및 PositionY 매개 변수로 지정된 위치에서 시작하여 현재 화면에 이 원본 이미지를 작성해야 합니다.
GPU가 알 수 없는 상태에 있는 반복된 TDR(시간 제한 검색 및 복구) 인스턴스로 인해 시스템 버그 검사가 발생할 수 있으므로 드라이버가 CPU를 사용하여 원본의 이미지를 프레임 버퍼에 쓰는 것이 좋습니다.
페이징이 아닌 메모리 사용
이 함수가 호출되는 동안에는 Windows 커널 모드 함수를 사용할 수 없습니다.DxgkDdiSystemDisplayEnable 은 모든 IRQL에서 호출할 수 있으므로 페이지를 매길 수 없는 메모리에 있어야 합니다. DxgkDdiSystemDisplayEnable 은 페이징 가능한 메모리에 있는 코드를 호출해서는 안 되며 페이징 가능한 메모리에 있는 데이터를 조작해서는 안 됩니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 8 |
지원되는 최소 서버 | Windows Server 2012 |
대상 플랫폼 | 데스크톱 |
머리글 | dispmprt.h |
IRQL | 모든 수준(설명 섹션 참조) |
추가 정보
DxgkCbAcquirePostDisplayOwnership