멀티헤드(Direct3D 9)
멀티헤드 카드는 공통 프레임 버퍼 및 액셀러레이터, 독립적인 DAC(디지털-아날로그 변환기) 및 모니터 출력이 있는 카드입니다. 이러한 디바이스는 유사한 수의 다른 유형의 디스플레이 어댑터보다 훨씬 더 많이 사용할 수 있는 여러 모니터 지원을 제공할 수 있습니다.
멀티헤드 카드는 여러 전체 화면 스왑 체인을 구동할 수 있는 단일 API 수준 디바이스로 API에 노출됩니다. 따라서 모든 리소스가 모든 헤드와 공유되고 각 헤드는 정확히 동일한 기능을 갖습니다. 각 헤드는 독립 표시 모드로 설정할 수 있습니다. 별도의 호출을 사용하여 IDirect3DSwapChain9::P resent 사용하여 각 헤드를 새로 고칠 수 있습니다. 하나의 호출을 사용하여 IDirect3DDevice9::P resent각 헤드를 순차적으로 새로 고칠 수도 있습니다.
메모
각 헤드의 새로 고침은 IDirect3DDevice9::P resent대한 단일 호출과 동시에 수행되지 않습니다. Direct3D 9Ex의 현재 통계는 D3DPRESENTSTATS 구조를 사용하여 각 헤드에 대한 새로 고침을 서로 가깝게 유지하여 여러 어댑터 헤드에서 찢어내는 효과를 제한할 수 있습니다. Direct3D 9Ex 대칭 이동 모델 애플리케이션의 프레임을 동기화하는 방법에 대한 자세한 내용은 Direct3D 9Ex 개선 사항참조하세요.
멀티헤드 디바이스의 각 스왑 체인은 전체 화면이어야 합니다. 디바이스가 멀티헤드 모드로 전환되면 전체 화면으로 유지되어야 합니다. 창 모드로 다시 전환하려면 디바이스를 삭제해야 합니다(일반 ALT+TAB-최소화 작업 제외).
비디오 메모리를 머리 간에 나누고 각 헤드를 완전히 독립적인 가속기로 처리하는 이전 방법은 여전히 일반적인 사용 시나리오입니다. 이 제안은 애플리케이션이 Direct3D 9 멀티헤드 모드에서 작동하도록 특별히 코딩되지 않은 한 해당 메커니즘을 대체하지 않습니다.
드라이버에는 두 가지 작업 모드 간에 전환할 수 있는 충분한 지식이 제공됩니다.
하나의 헤드는 마스터 헤드라고 하며, 같은 카드의 다른 모든 헤드를 하위 헤드라고 합니다. 시스템에 여러 멀티헤드 어댑터가 있는 경우 하나의 멀티헤드 어댑터에서 마스터 및 해당 하위 어댑터를 그룹이라고 합니다. 그룹은 마스터 헤드의 어댑터 서수로 표시됩니다.
D3DCAPS9 구조는 다음과 같은 새로운 하드웨어 캡을 노출하도록 업데이트되었습니다.
UINT NumberOfAdaptersInGroup;
UINT MasterAdapterOrdinal;
UINT AdapterOrdinalInGroup;
- NumberOfAdaptersInGroup은 기존 어댑터의 경우 1이고 멀티헤드 카드의 마스터 어댑터에 대해 1보다 큽니다. 다중 헤드 카드의 하위 어댑터 값은 0입니다. 각 카드에는 최대 하나의 마스터가 있을 수 있지만 많은 종속자가 있을 수 있습니다.
- MasterAdapterOrdinal은 이 하위의 마스터 디바이스를 나타냅니다.
- AdapterOrdinalInGroup은 헤드가 API에서 참조되는 순서를 나타냅니다. 마스터 어댑터에는 항상 AdapterOrdinalInGroup 0이 있습니다. 이러한 값은 IDirect3D9 메서드에 전달된 어댑터 서수에 해당하지 않지만 그룹 내의 헤드에만 적용됩니다.
이 정의를 사용하면 멀티헤드 카드가 DirectX 8에서와 마찬가지로 독립 카드인 것처럼 여러 어댑터를 계속 표시할 수 있습니다.
멀티헤드 디바이스를 만들려면 IDirect3D9::CreateDevice동작 플래그 D3DCREATE_ADAPTERGROUP_DEVICE 지정합니다. 프레젠테이션 매개 변수(D3DPRESENT_PARAMETERS배열)에는 NumberOfAdaptersInGroup 요소가 포함되어야 합니다. 런타임은 AdapterOrdinalInGroup 숫자 순서로 각 헤드에 각 요소를 할당합니다. D3DCREATE_ADAPTERGROUP_DEVICE 설정되면 각 프레젠테이션 매개 변수에는 다음이 있어야 합니다.
- FALSE 설정된 Windowed 멤버입니다(즉, 전체 화면임).
- D3DPRESENT_PARAMETERSEnableAutoDepthStencil 멤버에 대해 동일한 값입니다.
또한 EnableAutoDepthStencil이 TRUE 경우 다음 필드 각각은 각 D3DPRESENT_PARAMETERS대해 동일한 값을 가져야 합니다.
- AutoDepthStencilFormat
- BackBufferWidth
- BackBufferHeight
- BackBufferFormat
DAC가 설정된 경우 IDirect3DDevice9::CreateAdditionalSwapChain 대한 추가 호출은 불법입니다.
DAC를 사용하여 디바이스를 만든 경우 IDirect3DDevice9::ResetD3DPRESENT_PARAMETERS배열이 예상됩니다.
IDirect3DDevice9::Reset 전달된 각 D3DPRESENT_PARAMETERS 구조체는 전체 화면이어야 합니다. 창 모드로 다시 전환하려면 애플리케이션이 디바이스를 삭제하고 창 모드에서 다중 헤드가 아닌 디바이스를 다시 만들어야 합니다.
기본 사용 시나리오는 다음과 같습니다.
1. Create multihead device
2. For each swap chain of device:
3. Call GetBackBuffer for the i-th swapchain
4. Call SetRenderTarget
5. Call DrawPrimitive
6. Optionally call swapchain::Present (or wait until
all swap chains are drawn and present outside of loop)
7. End the for loop
8. Optionally present all swap chains with device::Present
자세한 내용은 IDirect3D9::CreateDevice 및 IDirect3DDevice9::GetNumberOfSwapChains참조하세요.
관련 항목