최상의 성능을 위해 DXGI 대칭 이동 모델을 사용합니다.

이 항목에서는 최신 버전의 Windows에서 프레젠테이션 스택의 성능과 효율성을 최대화하는 방법에 대한 개발자 지침을 제공합니다. DXGI 대칭 이동 모델, DirectX 12: 프레젠테이션 모드 Windows 10(비디오)Windows 10 프레젠테이션 개선 사항: 초기 보기(비디오)가 중단된 위치를 선택합니다.

조치 사항

여전히 DXGI_SWAP_EFFECT_DISCARD 또는 DXGI_SWAP_EFFECT_SEQUENTIAL("blt" 현재 모델이라고도 함)을 사용하는 경우 중지해야 합니다.

DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL 또는 DXGI_SWAP_EFFECT_FLIP_DISCARD(대칭 이동 모델이라고도 하는)로 전환하면 성능이 향상되고 전력 사용량이 낮아지고 풍부한 기능 집합이 제공됩니다. 이러한 값에 대한 자세한 내용은 DXGI_SWAP_EFFECT 열거형 을 참조하세요.

대칭 이동 모델 선물은 클래식 "전체 화면 배타적" 모드와 비교할 때 창 모드를 효과적으로 동일하거나 더 좋게 만듭니다. 사실, 대칭 이동 모델 테두리 없는 창의 이점에는 더 빠른 Alt-Tab 전환 및 최신 디스플레이 기능과의 더 나은 통합이 포함되므로 애플리케이션에 실제로 전체 화면 전용 모드가 필요한지 여부를 재고할 수 있습니다.

지금이어야 하는 이유는 무엇인가요? 2018년 4월 업데이트 이전에 Blt 모델 선물은 하이브리드 GPU 구성에서 사용될 때 눈에 띄는 찢어질 수 있으며, 하이 엔드 노트북에서 자주 발견됩니다( KB 3158621 참조). 2018년 4월 업데이트에서 이 분리는 일부 추가 작업 비용으로 수정되었습니다. 하이브리드 GPU, 특히 4K와 같은 고해상도에서 높은 프레임 속도로 Blt 프레젠테이션을 수행하는 경우 이 추가 작업이 전반적인 성능에 영향을 줄 수 있습니다. 이러한 시스템에서 최상의 성능을 유지하려면 Blt에서 flip present 모델로 전환합니다. 또한 특히 사용자 상호 작용의 기본 지점이 아닌 경우(VR 미리 보기 창의 경우와 같이) 스왑 체인의 해상도를 줄이는 것이 좋습니다.

간략한 기록

대칭 이동 모델이란? 대안은 무엇입니까?

Windows 7 이전에는 D3D에서 콘텐츠를 표시하는 유일한 방법은 창 또는 화면이 소유한 표면에 "blt"하거나 복사하는 것이었습니다. D3D9의 FLIPEX 스왑 효과부터 시작하여 Windows 8 FLIP_SEQUENTIAL 스왑 효과를 통해 DXGI에 들어오면서 최소한의 복사본으로 데스크톱 작성기와 직접 공유하여 콘텐츠를 화면에 배치하는 보다 효율적인 방법을 개발했습니다. 기술에 대한 개략적인 개요는 DXGI 플립 모델을 참조하세요.

이 최적화는 Windows 데스크톱을 구동하는 작성기인 DWM(데스크톱 창 관리자) 덕분에 가능합니다.

Blt 모델은 언제 사용해야 하나요?

대칭 이동 모델이 제공하지 않는 한 가지 기능이 있습니다. 즉, 콘텐츠를 생성하는 여러 다른 API를 포함하는 기능, 즉 모든 계층이 동일한 HWND로 현재 기준으로 함께 계층화됩니다. 예를 들어 D3D를 사용하여 창 배경을 그리고 Windows GDI 를 사용하여 위에 무언가를 그리거나 두 개의 다른 그래픽 API 또는 동일한 API에서 두 개의 스왑 체인을 사용하여 교대로 프레임을 생성하는 것이 있습니다. 그래픽 구성 요소 간에 HWND 수준 interop이 필요하지 않은 경우 Blt 모델이 필요하지 않습니다.

원래 대칭 이동 모델 디자인에는 제공되지 않았지만 현재 사용할 수 있는 두 번째 기능이 있습니다. 이 기능은 스로틀되지 않은 프레임 속도로 표시할 수 있습니다. 동기화 간격 0을 사용하는 애플리케이션의 경우 IDXGIFactory5::CheckFeatureSupport API를 사용할 수 있고 DXGI_FEATURE_PRESENT_ALLOW_TEARING 대한 지원을 보고하지 않는 한 대칭 이동 모델로 전환하지 않는 것이 좋습니다. 이 기능은 최신 버전의 Windows 10 최신 하드웨어에서 거의 유비쿼터스입니다.

DirectFlip

DirectX 12: 프레젠테이션 모드 Windows 10 시청한 경우 "직접 대칭 이동" 및 "독립 대칭 이동"에 대한 설명이 표시됩니다. 대칭 이동 모델 스왑 체인을 사용하는 애플리케이션에 대해 사용하도록 설정된 최적화입니다. 창 및 버퍼 구성에 따라 데스크톱 컴퍼지션을 완전히 우회하고 전용 전체 화면과 동일한 방식으로 애플리케이션 프레임을 화면으로 직접 보낼 수 있습니다.

요즘 이러한 최적화는 기능 향상을 위해 3가지 시나리오 중 하나에 참여할 수 있습니다.

  1. DirectFlip: 스왑 체인 버퍼가 화면 크기와 일치하고 창 클라이언트 영역이 화면을 덮습니다. DWM 스왑 체인을 사용하여 화면에 표시하는 대신 애플리케이션 스왑 체인이 사용됩니다.
  2. 패널 피터가 있는 DirectFlip: 창 클라이언트 영역이 화면을 덮고 스왑 체인 버퍼가 화면의 일부 하드웨어 종속 배율 인수(예: 0.25x~4x) 내에 있습니다. GPU 스캔아웃 하드웨어는 버퍼를 디스플레이로 보내는 동안 버퍼 크기를 조정하는 데 사용됩니다.
  3. MPO(다중 평면 오버레이)가 있는 DirectFlip: 스왑 체인 버퍼는 창 차원의 일부 하드웨어 종속 크기 조정 요소 내에 있습니다. DWM은 애플리케이션에 대한 전용 하드웨어 스캔 아웃 평면을 예약할 수 있으며, 이 평면은 검사되고 잠재적으로 화면의 알파 혼합 하위 영역으로 확장됩니다.

창 대칭 이동 모델을 사용하면 애플리케이션이 다양한 DirectFlip 시나리오에 대한 하드웨어 지원을 쿼리하고 IDXGIOutput6::CheckHardwareCompositionSupport를 사용하여 다양한 유형의 동적 크기 조정을 구현할 수 있습니다. 주의해야 할 한 가지 주의 사항은 패널 피터를 사용하는 경우 커서가 DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_CURSOR_STRETCHED 통해 표시되는 스트레칭 부작용을 겪을 수 있다는 것입니다.

스왑 체인이 "DirectFlipped"된 후에는 DWM이 절전 모드로 전환되고 애플리케이션 외부에서 변경된 경우에만 절전 모드를 해제할 수 있습니다. 애플리케이션 프레임은 전체 화면 전용과 동일한 효율성으로 독립적으로 화면으로 직접 전송됩니다. 이는 "독립 대칭 이동"이며 위의 모든 시나리오에 참여할 수 있습니다. 다른 데스크톱 콘텐츠가 맨 위에 오면 DWM은 원활하게 다시 구성 모드로 전환하거나, 애플리케이션을 뒤집기 전에 애플리케이션 위에 있는 콘텐츠를 효율적으로 "역방향으로 작성"하거나, MPO를 활용하여 독립적인 대칭 이동 모드를 유지할 수 있습니다.

PresentMon 도구를 확인하여 위의 사용 항목에 대한 인사이트를 얻습니다.

플립 모델의 새로운 기능은 무엇인가요?

특별한 기능 없이 표준 스왑 체인에 적용되는 위의 개선 사항 외에도 대칭 이동 모델 애플리케이션에서 사용할 수 있는 몇 가지 기능이 있습니다.

  • DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT 사용하여 대기 시간 감소 독립 대칭 이동 모드에서는 최신 버전의 Windows에서 최대 1프레임의 대기 시간을 얻을 수 있으며, 구성 시 가능한 최소값으로 정상적인 대체를 수행할 수 있습니다.
    • 주의: Windows 10 1주년 업데이트 및 이전 버전에서 최소 두 프레임의 대기 시간을 제공하는 문제가 있었습니다. 자세한 내용은 이 포럼 항목을 참조하세요. 이 문제는 Fall Creator's Update에서 수정되었습니다.
  • DXGI_SWAP_EFFECT_FLIP_DISCARD 직접 대칭 이동의 "역방향 컴퍼지션" 모드를 사용하도록 설정하여 데스크톱을 표시하는 전체 작업이 줄어듭니다. DWM은 자체 스왑 체인에 전체 복사본을 수행하는 대신 애플리케이션 버퍼를 낙서하고 화면으로 보낼 수 있습니다.
  • DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING 다중 평면 오버레이가 지원되는 시스템의 창에서도 대기 가능한 개체보다 훨씬 짧은 대기 시간을 사용할 수 있습니다.
  • 애플리케이션은 스왑 체인을 만드는 동안 설정된 DXGI_SCALING 속성을 사용하여 창 크기 조정 중에 발생하는 콘텐츠 크기 조정을 제어할 수 있습니다.
  • HDR 형식(R10G10B10A2_UNORM 또는 R16G16B16A16_FLOAT)의 콘텐츠는 SDR 데스크톱으로 구성되지 않는 한 고정되지 않습니다.
  • 현재 통계는 창 모드에서 사용할 수 있습니다.
  • UWP(유니버설 Windows 플랫폼) 애플리케이션 모델 및 DX12와의 호환성이 향상됩니다. 이는 대칭 이동 모델과만 호환되기 때문에 입니다.

대칭 이동 모델을 사용하려면 어떻게 해야 하나요?

Flip 모델 스왑 체인에는 Blt 스왑 체인을 기반으로 몇 가지 추가 요구 사항이 있습니다.

  1. 버퍼 수는 2 이상이어야 합니다.
  2. Present 호출 후 백 버퍼를 D3D11 직접 컨텍스트에 명시적으로 다시 바인딩해야 다시 사용할 수 있습니다.
  3. SetFullscreenState를 호출한 후 애플리케이션은 Present 전에 ResizeBuffers를 호출해야 합니다.
  4. MSAA(다중 샘플 앤티앨리어싱) 스왑 체인은 대칭 이동 모델에서 직접 지원되지 않으므로 애플리케이션은 Present를 발급하기 전에 MSAA resolve 수행해야 합니다.

올바른 렌더링 및 프레젠테이션 해상도를 선택하는 방법

과거에 애플리케이션에 대한 기존 패턴은 사용자가 배타적 전체 화면 모드를 선택할 때 선택할 수 있는 해상도 목록을 사용자에게 제공하는 것이었습니다. 최신 디스플레이를 사용하여 콘텐츠 크기 조정을 원활하게 시작할 수 있으므로 출력 해상도와 관계없이 창 모드에서도 성능 크기 조정을 위한 렌더링 해상도를 선택할 수 있는 기능을 사용자에게 제공하는 것이 좋습니다. 또한 애플리케이션은 IDXGIOutput6::CheckHardwareCompositionSupport 를 활용하여 콘텐츠를 표시하기 전에 크기를 조정해야 하는지 또는 하드웨어에서 크기 조정을 수행하도록 해야 하는지를 결정해야 합니다.

현재 또는 컴퍼지션 작업의 일부로 콘텐츠를 한 GPU에서 다른 GPU로 마이그레이션해야 할 수 있습니다. 다중 GPU 노트북 또는 외부 GPU가 연결된 시스템에서도 마찬가지입니다. 이러한 구성이 더 일반화되고 고해상도 디스플레이가 일반화됨에 따라 전체 해상도 스왑 체인을 표시하는 비용이 증가합니다. VR 장면의 2D 미리 보기를 보조 창으로 제공하는 VR 타이틀의 경우처럼 스왑 체인의 대상이 사용자 상호 작용의 기본 지점이 아닌 경우 낮은 해상도의 스왑 체인을 사용하여 다른 GPU 간에 전송해야 하는 대역폭의 양을 최소화하는 것이 좋습니다.

기타 고려 사항

GPU에 스왑 체인 백 버퍼에 쓰도록 처음 요청하는 것은 GPU가 버퍼를 사용할 수 있을 때까지 기다리는 동안 중단되는 시간입니다. 가능하면 이 지점을 가능한 한 프레임으로 지연합니다.