다음을 통해 공유


어댑터 간 리소스를 사용하여 불연속 GPU에서 렌더링

Windows 8.1 부터 불연속 GPU다음과 같이 어댑터 간 리소스를 사용합니다.

  • 비트 블록 전송(비트블렛) 또는 현재 작업을 위한 대상이지만 늘이기 또는 색 변환이 없는 대상입니다.
  • 운영 체제가 비트blt 또는 현재 작업을 수행하도록 사용자 모드 표시 드라이버를 요청하는 리소스입니다.

통합 GPU는다음과 같이 어댑터 간 리소스를 사용합니다.

  • DWM(데스크톱 창 관리자)에서 컴퍼지션하는 동안의 텍스처입니다.
  • GDI 하드웨어 가속을 위한 렌더링 대상입니다.
  • 디스플레이 기본입니다.
  • 3D 작업의 렌더링 대상이 아닙니다.

다음 섹션에서는 애플리케이션이 하이브리드 시스템 내의 개별 GPU에서 렌더링되는 세 가지 가능한 시나리오와 관련된 아키텍처 및 프로세스에 대해 설명합니다.

리디렉션된 비트blt 프레젠테이션 모델

개별 GPU에서 렌더링하기 위해 하이브리드 그래픽 리디렉션 비트블릿 모델을 보여 주는 다이어그램

  1. 최상위 창에 대한 교차 어댑터 리소스는 통합 GPU에 대한 표준 할당으로 커널 모드로 만들어집니다.
  2. 이 리소스가 불연속 GPU에서 열리면 DirectX 그래픽 커널 하위 시스템(Dxgkrnl.sys)은 DxgkDdiGetStandardAllocationDriverData 함수를 호출하고 통합 GPU와 동일한 백업 저장소(대용량 스토리지 디바이스)를 사용하여 개별 GPU에 새 리소스를 만듭니다.
  3. Direct3D 런타임은 개별 GPU의 사용자 모드 표시 드라이버에 프라이빗 드라이버 데이터를 사용하여 어댑터 간 리소스를 열도록 지시합니다.
  4. DirectX 애플리케이션은 개별 GPU에서 백 버퍼 리소스로 렌더링됩니다. 그림에서 "렌더링" 작업을 참조하세요.
  5. DirectX 애플리케이션이 Present 메서드를 호출하면 Direct3D 런타임은 불연속 GPU의 사용자 모드 드라이버의 PresentDXGI (또는 pfnPresent) 함수를 호출하여 백 버퍼를 어댑터 간 리소스에 복사합니다. 그림에서 "Present" 작업을 참조하세요.
  6. Windows GDI(그래픽 디바이스 인터페이스) 애플리케이션이 최상위 창으로 렌더링되면 DirectX 그래픽 커널 하위 시스템은 통합 GPU의 디스플레이 미니포트 드라이버의 DxgkDdiRenderKm 함수를 호출하고 어댑터 간 리소스가 렌더링 대상임을 나타냅니다. 그림에서 GDI 애플리케이션과 교차 어댑터 표면 간의 연결을 참조하세요.
  7. DWM 프로세스는 통합된 GPU에서 어댑터 간 리소스를 열고 컴퍼지션 중에 원본 텍스처로 사용합니다. 그림에서 "컴퍼지션" 작업을 참조하세요.

직접 대칭 이동 프레젠테이션 모델

개별 GPU에서 렌더링하기 위한 하이브리드 그래픽 직접 대칭 이동 모델을 보여 주는 다이어그램

  1. Direct3D 런타임은 개별 GPU의 사용자 모드 디스플레이 드라이버에 각 스왑 체인 표면에 대한 교차 어댑터 리소스를 만들도록 지시합니다.
  2. 개별 GPU에서 Direct3D 런타임은 직접 대칭 이동 모드를 사용할 수 있는 경우 D3DDDI_ALLOCATIONINFO 구조체의 PrimaryVidPnSourceId 멤버를 설정할 수 있습니다. pfnAllocateCb 함수가 호출될 때 이러한 멤버 값을 전달해야 합니다.
  3. Direct3D 런타임은 통합 GPU의 사용자 모드 표시 드라이버에 DWM에서 관리할 어댑터 간 리소스를 열도록 지시합니다.
  4. 애플리케이션은 렌더링 대상 텍스처를 대상으로 사용하여 불연속 GPU에서 렌더링합니다. 그림에서 "렌더링" 작업을 참조하세요.
  5. 애플리케이션이 Present 메서드를 호출하면 Direct3D 런타임은 불연속 GPU 사용자 모드 드라이버의 BltDXGI (또는 pfnBlt) 함수를 호출하여 어댑터 간 리소스에 대한 복사본을 수행합니다. 그런 다음 런타임은 원본이 어댑터 간 리소스로 설정되고 대상 할당이 NULL로 설정된 개별 GPU 사용자 모드 드라이버의 PresentDXGI(또는 pfnPresent) 함수를 호출합니다. 그림에서 "복사" 작업을 참조하세요.
  6. DWM은 통합 GPU의 리소스를 사용하여 컴퍼지션을 수행합니다. 직접 대칭 이동 작업이 필요한 경우(DXGK_SEGMENTFLAGS.DirectFlip 이 설정됨) DWM은 통합 GPU의 디스플레이 미니포트 드라이버에 한 교차 어댑터 할당에서 다른 어댑터로의 대칭 이동 작업을 수행하도록 지시합니다. 그림에서 "DWM 대칭 이동" 작업을 참조하세요.

전체 화면 모델

  1. Direct3D 런타임은 통합 GPU의 사용자 모드 디스플레이 드라이버에 각 스왑 체인 표면에 대한 교차 어댑터 공유 기본 할당을 만들도록 지시합니다.
  2. Direct3D 런타임은 개별 GPU의 사용자 모드 표시 드라이버에 어댑터 간 리소스를 열도록 지시합니다.
  3. 애플리케이션은 렌더링 대상 텍스처를 대상으로 사용하여 불연속 GPU에서 렌더링합니다.
  4. 애플리케이션이 Present 메서드를 호출할 때 Direct3D 런타임은 개별 GPU의 사용자 모드 표시 드라이버에 어댑터 간 리소스에 대한 복사를 수행하도록 지시합니다.
  5. 통합 GPU의 사용자 모드 디스플레이 드라이버 및 디스플레이 미니포트 드라이버는 이 교차 어댑터 리소스로 대칭 이동하도록 지시됩니다.