DXGI 1.4 개선 사항

다음 기능은 Direct3D 12를 지원하기 위해 Microsoft DXGI(DirectX Graphics Infrastructure) 1.4에서 추가되거나 변경되었습니다.

저렴한 어댑터 열거형

Direct3D 12의 경우 더 이상 디바이스에서 디바이스를 만드는 데 사용된 IDXGIAdapter 로 역추적할 수 없습니다. D3D12CreateDevice에 D3D_DRIVER_TYPE_WARP 제공할 수도 없습니다. 개발을 더 쉽게 하기 위해 IDXGIFactory4 를 사용하여 이 두 가지를 모두 처리할 수 있습니다. IDXGIFactory4::EnumAdapterByLuid ( ID3D12Device::GetAdapterLuid와 페어링되도록 설계됨)를 사용하면 앱이 Direct3D 12 디바이스가 만들어진 어댑터에 대한 정보를 검색할 수 있습니다. IDXGIFactory4::EnumWarpAdapter 는 WARP 렌더러를 사용하기 위해 D3D12CreateDevice 에 제공할 수 있는 어댑터를 제공합니다.

비디오 메모리 예산 추적

애플리케이션 개발자는 비디오 메모리 예약 시스템을 사용하여 앱이 없이는 사용할 수 없는 실제 비디오 메모리 양을 OS에 알리는 것이 좋습니다.

프로세스에 사용할 수 있는 실제 메모리의 양을 "비디오 메모리 예산"으로 알려져 있습니다. 예산은 백그라운드 프로세스가 절전 모드가 되고 해제될 때마다 크게 변동할 수 있고, 사용자가 다른 애플리케이션으로 전환할 때 크게 변동할 수 있습니다. 예산이 변경되면 애플리케이션에 알림을 보내고 현재 예산과 현재 소비된 메모리 양을 둘 다 폴링할 수 있습니다. 애플리케이션이 예산 내에서 유지되지 않으면 다른 애플리케이션을 실행하거나 생성 API가 실패를 반환할 수 있도록 프로세스가 일시적으로 동결됩니다. IDXGIAdapter3 인터페이스는 이 기능과 관련된 메서드 특히 QueryVideoMemoryInfoRegisterVideoMemoryBudgetChangeNotificationEvent를 제공합니다.

자세한 내용은 상주에 대한 Direct3D 12 항목을 참조하세요.

Direct3D 12 스왑 체인 변경 내용

기존 Direct3D 11 스왑 체인 기능 중 일부는 Direct3D 12의 오버헤드 감소를 달성하기 위해 더 이상 사용되지 않습니다. Direct3D 12 개념에 맞게 조정하거나 Direct3D 12 기능을 더 잘 지원하도록 다른 변경 내용이 적용되었습니다.

고정 백 버퍼 ID

Direct3D 11에서 애플리케이션은 GetBuffer( 0, ... ) 를 한 번만 호출할 수 있습니다. Present를 호출할 때마다 반환된 인터페이스의 리소스 ID가 암시적으로 변경되었습니다. Direct3D 12는 필요한 CPU 오버헤드 및 유연한 리소스 설명자 디자인으로 인해 암시적 리소스 ID 변경을 더 이상 지원하지 않습니다. 따라서 애플리케이션은 스왑 체인으로 만든 모든 버퍼에 대해 GetBuffer 를 수동으로 호출해야 합니다. 애플리케이션은 Present를 호출한 후 시퀀스의 다음 버퍼로 수동으로 렌더링해야 합니다. 애플리케이션은 각 Present에 여러 개체를 다시 만드는 대신 각 버퍼에 대한 설명자 캐시를 만드는 것이 좋습니다.

다중 어댑터 지원

다중 GPU 어댑터에서 스왑 체인을 만들 때 백 버퍼는 모두 노드 1에 만들어지고 단일 명령 큐만 지원됩니다. ResizeBuffers1 을 사용하면 애플리케이션이 서로 다른 노드에 백 버퍼를 만들 수 있으므로 각 노드에 다른 명령 큐를 사용할 수 있습니다. 이러한 기능을 사용하면 AFR(대체 프레임 렌더링) 기술을 스왑 체인과 함께 사용할 수 있습니다. 다중 어댑터 시스템을 참조하세요.

기타

  • 명령 큐 개체는 Direct3D 12 디바이스 개체 대신 CreateSwapChain 메서드에 전달되어야 합니다.
  • 다음 두 가지 대칭 이동 모델 스왑 효과만 지원됩니다.
    애플리케이션이 백버퍼를 제시하기 전에 완전히 렌더링하거나 다중 어댑터 시나리오를 쉽게 지원하는 데 관심이 있는 경우 DXGI_SWAP_EFFECT_FLIP_DISCARD 선호해야 합니다.
    DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL 부분 프레젠테이션 최적화를 사용하거나 이전에 제공된 백 버퍼에서 정기적으로 읽는 애플리케이션에서 사용해야 합니다.
  • SetFullscreenState 는 더 이상 디스플레이를 독점적으로 소유하지 않으므로 사용자가 시작한 운영 체제 요소가 애플리케이션 출력 앞에 원활하게 나타날 수 있습니다. 볼륨 설정이 예입니다.

Direct3D 12 하드웨어 기능 수준

DXGI 프로그래밍 가이드