어댑터 간 리소스를 사용하여 불연속 GPU에서 렌더링
Windows 8.1 부터 불연속 GPU는 다음과 같이 어댑터 간 리소스를 사용합니다.
- 비트 블록 전송(비트블렛) 또는 현재 작업을 위한 대상이지만 늘이기 또는 색 변환이 없는 대상입니다.
- 운영 체제가 비트blt 또는 현재 작업을 수행하도록 사용자 모드 표시 드라이버를 요청하는 리소스입니다.
통합 GPU는다음과 같이 어댑터 간 리소스를 사용합니다.
- DWM(데스크톱 창 관리자)에서 컴퍼지션하는 동안의 텍스처입니다.
- GDI 하드웨어 가속을 위한 렌더링 대상입니다.
- 디스플레이 기본입니다.
- 3D 작업의 렌더링 대상이 아닙니다.
다음 섹션에서는 애플리케이션이 하이브리드 시스템 내의 개별 GPU에서 렌더링되는 세 가지 가능한 시나리오와 관련된 아키텍처 및 프로세스에 대해 설명합니다.
리디렉션된 비트blt 프레젠테이션 모델
- 최상위 창에 대한 교차 어댑터 리소스는 통합 GPU에 대한 표준 할당으로 커널 모드로 만들어집니다.
- 이 리소스가 불연속 GPU에서 열리면 DirectX 그래픽 커널 하위 시스템(Dxgkrnl.sys)은 DxgkDdiGetStandardAllocationDriverData 함수를 호출하고 통합 GPU와 동일한 백업 저장소(대용량 스토리지 디바이스)를 사용하여 개별 GPU에 새 리소스를 만듭니다.
- Direct3D 런타임은 개별 GPU의 사용자 모드 표시 드라이버에 프라이빗 드라이버 데이터를 사용하여 어댑터 간 리소스를 열도록 지시합니다.
- DirectX 애플리케이션은 개별 GPU에서 백 버퍼 리소스로 렌더링됩니다. 그림에서 "렌더링" 작업을 참조하세요.
- DirectX 애플리케이션이 Present 메서드를 호출하면 Direct3D 런타임은 불연속 GPU의 사용자 모드 드라이버의 PresentDXGI (또는 pfnPresent) 함수를 호출하여 백 버퍼를 어댑터 간 리소스에 복사합니다. 그림에서 "Present" 작업을 참조하세요.
- Windows GDI(그래픽 디바이스 인터페이스) 애플리케이션이 최상위 창으로 렌더링되면 DirectX 그래픽 커널 하위 시스템은 통합 GPU의 디스플레이 미니포트 드라이버의 DxgkDdiRenderKm 함수를 호출하고 어댑터 간 리소스가 렌더링 대상임을 나타냅니다. 그림에서 GDI 애플리케이션과 교차 어댑터 표면 간의 연결을 참조하세요.
- DWM 프로세스는 통합된 GPU에서 어댑터 간 리소스를 열고 컴퍼지션 중에 원본 텍스처로 사용합니다. 그림에서 "컴퍼지션" 작업을 참조하세요.
직접 대칭 이동 프레젠테이션 모델
- Direct3D 런타임은 개별 GPU의 사용자 모드 디스플레이 드라이버에 각 스왑 체인 표면에 대한 교차 어댑터 리소스를 만들도록 지시합니다.
- 개별 GPU에서 Direct3D 런타임은 직접 대칭 이동 모드를 사용할 수 있는 경우 D3DDDI_ALLOCATIONINFO 구조체의 Primary 및 VidPnSourceId 멤버를 설정할 수 있습니다. pfnAllocateCb 함수가 호출될 때 이러한 멤버 값을 전달해야 합니다.
- Direct3D 런타임은 통합 GPU의 사용자 모드 표시 드라이버에 DWM에서 관리할 어댑터 간 리소스를 열도록 지시합니다.
- 애플리케이션은 렌더링 대상 텍스처를 대상으로 사용하여 불연속 GPU에서 렌더링합니다. 그림에서 "렌더링" 작업을 참조하세요.
- 애플리케이션이 Present 메서드를 호출하면 Direct3D 런타임은 불연속 GPU 사용자 모드 드라이버의 BltDXGI (또는 pfnBlt) 함수를 호출하여 어댑터 간 리소스에 대한 복사본을 수행합니다. 그런 다음 런타임은 원본이 어댑터 간 리소스로 설정되고 대상 할당이 NULL로 설정된 개별 GPU 사용자 모드 드라이버의 PresentDXGI(또는 pfnPresent) 함수를 호출합니다. 그림에서 "복사" 작업을 참조하세요.
- DWM은 통합 GPU의 리소스를 사용하여 컴퍼지션을 수행합니다. 직접 대칭 이동 작업이 필요한 경우(DXGK_SEGMENTFLAGS.DirectFlip 이 설정됨) DWM은 통합 GPU의 디스플레이 미니포트 드라이버에 한 교차 어댑터 할당에서 다른 어댑터로의 대칭 이동 작업을 수행하도록 지시합니다. 그림에서 "DWM 대칭 이동" 작업을 참조하세요.
전체 화면 모델
- Direct3D 런타임은 통합 GPU의 사용자 모드 디스플레이 드라이버에 각 스왑 체인 표면에 대한 교차 어댑터 공유 기본 할당을 만들도록 지시합니다.
- Direct3D 런타임은 개별 GPU의 사용자 모드 표시 드라이버에 어댑터 간 리소스를 열도록 지시합니다.
- 애플리케이션은 렌더링 대상 텍스처를 대상으로 사용하여 불연속 GPU에서 렌더링합니다.
- 애플리케이션이 Present 메서드를 호출할 때 Direct3D 런타임은 개별 GPU의 사용자 모드 표시 드라이버에 어댑터 간 리소스에 대한 복사를 수행하도록 지시합니다.
- 통합 GPU의 사용자 모드 디스플레이 드라이버 및 디스플레이 미니포트 드라이버는 이 교차 어댑터 리소스로 대칭 이동하도록 지시됩니다.