DXGI 1.4 개선 사항
Direct3D 12를 지원하기 위해 Microsoft DXGI(DirectX Graphics Infrastructure) 1.4에서 다음 기능이 추가되거나 변경되었습니다.
저렴한 어댑터 열거형
Direct3D 12의 경우 더 이상 디바이스에서 디바이스를 만드는 데 사용된 IDXGIAdapter 역추적할 수 없습니다. 더 이상 D3D12CreateDeviceD3D_DRIVER_TYPE_WARP 제공할 수 없습니다. 개발을 더 쉽게 하기 위해 IDXGIFactory4 사용하여 이 두 가지를 모두 처리할 수 있습니다. IDXGIFactory4::EnumAdapterByLuid(ID3D12Device::GetAdapterLuid페어링되도록 설계됨)을 사용하면 앱이 Direct3D 12 디바이스가 만들어진 어댑터에 대한 정보를 검색할 수 있습니다. IDXGIFactory4::EnumWarpAdapter WARP 렌더러를 사용하기 위해 D3D12CreateDevice 제공할 수 있는 어댑터를 제공합니다.
비디오 메모리 예산 추적
애플리케이션 개발자는 비디오 메모리 예약 시스템을 사용하여 앱이 없이는 사용할 수 없는 실제 비디오 메모리의 양을 OS에 알리는 것이 좋습니다.
프로세스에 사용할 수 있는 실제 메모리의 양을 "비디오 메모리 예산"으로 알려져 있습니다. 백그라운드 프로세스의 절전 모드 해제 및 절전 모드 해제로 예산이 눈에 띄게 변동할 수 있습니다. 사용자가 다른 애플리케이션으로 전환할 때 급격히 변동합니다. 예산이 변경되면 애플리케이션에 알림을 받고 현재 예산과 현재 사용된 메모리 양을 폴링할 수 있습니다. 애플리케이션이 예산 내에 유지되지 않으면 다른 애플리케이션을 실행할 수 있도록 프로세스가 간헐적으로 중지되거나 생성 API가 실패를 반환합니다. IDXGIAdapter3 인터페이스는 이 기능, 특히 QueryVideoMemoryInfoRegisterVideoMemoryBudgetChangeNotificationEvent관련된 메서드를 제공합니다.
자세한 내용은 Residency대한 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호출한 후 시퀀스에서 다음 버퍼에 수동으로 렌더링해야 합니다. 애플리케이션은 각 여러 개체를 다시 만드는 대신 각 버퍼에 대한 설명자 캐시를 만드는 것이 좋습니다.
다중 어댑터 지원
다중 GPU 어댑터에 스왑 체인이 만들어지면 백버퍼는 모두 노드 1에 만들어지고 단일 명령 큐만 지원됩니다. ResizeBuffers1 사용하면 애플리케이션이 서로 다른 노드에 백버퍼를 만들 수 있으므로 각각 다른 명령 큐를 사용할 수 있습니다. 이러한 기능을 사용하면 AFR(대체 프레임 렌더링) 기술을 스왑 체인과 함께 사용할 수 있습니다. 다중 어댑터 시스템 참조하세요.
기타
- Direct3D 12 디바이스 개체 대신 CreateSwapChain 메서드에 명령 큐 개체를 전달해야 합니다.
- 다음 두 개의 대칭 이동 모델 교환 효과만 지원됩니다.
- 애플리케이션이 백버퍼를 제시하기 전에 완전히 렌더링하거나 다중 어댑터 시나리오를 쉽게 지원하는 데 관심이 있는 경우 DXGI_SWAP_EFFECT_FLIP_DISCARD 것이 좋습니다.
DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL 부분 프레젠테이션 최적화를 사용하거나 이전에 제공된 백버퍼에서 정기적으로 읽는 애플리케이션에서 사용해야 합니다. - SetFullscreenState 더 이상 디스플레이만 소유하지 않으므로 사용자가 시작한 운영 체제 요소가 애플리케이션 출력 앞에 원활하게 표시될 수 있습니다. 볼륨 설정이 그 예입니다.
관련 항목
DXGI 대한 프로그래밍 가이드