DXGI DDI 지원
Microsoft DXGI(DirectX Graphics Infrastructure) DDI(디바이스 드라이버 인터페이스)를 지원하려면 사용자 모드 디스플레이 드라이버에 Dxgiddi.h 헤더 파일이 포함되어야 합니다. Dxgiddi.h 에는 애플리케이션 수준 DXGI 구문과 공유되는 정의가 포함된 Dxgitype.h 헤더 파일도 포함되어 있습니다. Dxgiddi.h 는 드라이버가 커널과 통신하는 데 사용할 수 있는 여러 사용자 모드 디스플레이 드라이버 진입점 및 DXGI 콜백 함수(디스플레이 미니포트 드라이버 포함)를 정의합니다.
Microsoft Direct3D 런타임은 CreateDevice(D3D10) 함수를 호출할 때 D3D10DDIARG_CREATEDEVICE 구조체의 DXGIBaseDDI 멤버가 가리키는 DXGI_DDI_BASE_ARGS 구조에서 DXGI DDI에 대한 액세스를 제공합니다. 사용자 모드 표시 드라이버는 DXGI 함수에 대한 포인터를 제공합니다.
드라이버는 DXGI_DDI_BASE_ARGS pDXGIDDIBaseFunctionsXxx 멤버 가 가리키는 구조 체의 멤버를 통해 이러한 함수를 구현합니다. 드라이버는 나중에 사용하기 위해 DXGI_DDI_BASE_ARGSpDXGIBaseCallbacks 멤버가 가리키는 DXGI 콜백 함수 테이블에 대한 포인터를 기록해야 합니다. Direct3D 런타임은 사용자 모드 표시 드라이버 내에 스레드가 없을 때마다 콜백 함수의 주소를 변경할 수 있으므로 드라이버는 DXGI 콜백 함수에 대한 개별 포인터를 기록하는 대신 DXGI 콜백 함수 테이블에 대한 포인터를 기록해야 합니다.
소프트웨어 래스터라이저에 대한 추가 DXGI 사용자 모드 디스플레이 드라이버 요구 사항이 있습니다. 이러한 사용자 모드 디스플레이 드라이버(특히 그래픽 어댑터에서 Direct3D 버전 9 DDI 구현과 공유되는 하드웨어를 지원하지 않는 모든 드라이버)는 CreateDevice(D3D10) 함수의 S_OK 값 대신 DXGI_STATUS_NO_REDIRECTION 값을 반환해야 합니다. 이 반환 값은 DWM(데스크톱 창 관리자)과의 통신에 영향을 주기 위해 공유 리소스 프레젠테이션 경로를 사용하면 안 됨을 DXGI에 나타냅니다. 공유 리소스 프레젠테이션 경로는 공유 리소스 함수(즉, CreateResource(D3D10) 및 D3D10_DDI_RESOURCE_MISC_SHARED 플래그 집합이 있는 OpenResource(D3D10) 함수)에 대한 호출이 발생할 때 만들어집니다. 그러나 DXGI는 CPU에서만 버퍼를 사용할 수 있는 스왑 체인과 관련된 기술을 대신 사용해야 합니다. 예를 들어 DXGI는 공유 리소스 프레젠테이션 경로 이외의 수단을 사용하여 렌더링된 데이터를 백 버퍼에서 바탕 화면으로 이동해야 합니다. 이 경우 DXGI는 실제로 드라이버의 PresentDXGI 함수를 호출하여 DWM과의 통신을 적용하는 대신 렌더링된 데이터를 이동합니다.
Direct3D 버전 10 DXGI 함수
이 섹션에서는 사용자 모드 디스플레이 드라이버 DLL이 Microsoft Direct3D 버전 10 런타임에 제공하는 Microsoft DXGI(DirectX Graphics Infrastructure) 함수에 대해 설명합니다. 드라이버는 사용자 모드 디스플레이 드라이버의 CreateDevice(D3D10) 함수 호출에서 DXGI_DDI_BASE_FUNCTIONS 구조체의 멤버를 통해 DXGI 함수에 대한 포인터를 제공합니다.
BltDXGI: GetGammaCapsDXGI
PresentDXGI: QueryResourceResidencyDXGI
ResolveSharedResourceDXGI: RotateResourceIdentitiesDXGI
SetDisplayModeDXGI: SetResourcePriorityDXGI
Direct3D 버전 11.1 DXGI 함수
이 섹션에서는 Microsoft Direct3D 버전 11.1 런타임에 대해 추가된 사용자 모드 디스플레이 드라이버에 의해 구현되는 Microsoft DXGI(DirectX Graphics Infrastructure) 함수에 대해 설명합니다. Direct3D 11.1은 Windows 8 도입되었습니다.
사용자 모드 디스플레이 드라이버 DLL은 OpenAdapter10_2 함수를 내보내고 런타임이 CreateDevice(D3D10)를 호출할 때 D3D10_2DDI_ADAPTERFUNCS 구조의 멤버를 통해 어댑터별 함수에 대한 포인터를 제공합니다.
드라이버는 사용자 모드 디스플레이 드라이버의 어댑터별 CreateDevice(D3D10) 함수 호출에서 DXGI1_2_DDI_BASE_FUNCTIONS 구조체의 멤버를 통해 Direct3D 버전 11.1 DXGI 함수에 대한 포인터를 제공합니다.
Direct3D 버전 11.2 DXGI 함수
이 섹션의 참조 페이지에서는 Microsoft Direct3D 버전 11.2 런타임에 대해 추가된 사용자 모드 디스플레이 드라이버에 의해 구현되는 Microsoft DXGI(DirectX Graphics Infrastructure) 함수에 대해 설명합니다. Direct3D 11.2는 Windows 8.1 도입되었습니다.
사용자 모드 표시 드라이버 DLL은 OpenAdapter10_2 함수를 내보내고 런타임이 CreateDevice(D3D10)를 호출할 때 D3D10_2DDI_ADAPTERFUNCS 구조의 멤버를 통해 어댑터별 함수에 대한 포인터를 제공합니다.
드라이버는 사용자 모드 디스플레이 드라이버의 어댑터별 CreateDevice(D3D10) 함수 호출에서 DXGI1_3_DDI_BASE_FUNCTIONS 구조체의 멤버를 통해 Direct3D 버전 11.2 DXGI 함수에 대한 포인터를 제공합니다.
PFNDDXGIDDI_PRESENT_MULTIPLANE_OVERLAYCB: PFNDDXGIDDI_PRESENTCB
PFNDDXGIDDI_SUBMITPRESENTBLTTOHWQUEUECB: PFNDDXGIDDI_SUBMITPRESENTTOHWQUEUECB
참고
Direct3D 11.2 런타임에서 지원하는 추가 DXGI 함수는 사용자 모드 드라이버에서 구현하는 다중 평면 오버레이 함수 섹션에 포함되어 있습니다.