멀티헤드(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 멀티헤드 모드에서 작동하도록 특별히 코딩되지 않는 한 해당 메커니즘을 대체하지 않습니다.
드라이버에는 두 가지 작업 모드 간에 전환할 수 있는 충분한 지식이 제공됩니다.
한 헤드를 master 머리라고 하고, 같은 카드 다른 모든 헤드를 종속 헤드라고 부릅니다. 시스템에 다중 헤드 어댑터가 두 개 이상 있는 경우 하나의 멀티헤드 어댑터에서 master 하위 어댑터를 그룹이라고 합니다. 그룹은 master 헤드의 어댑터 서수로 표시됩니다.
D3DCAPS9 구조체는 다음과 같은 새로운 하드웨어 캡을 노출하도록 업데이트되었습니다.
UINT NumberOfAdaptersInGroup;
UINT MasterAdapterOrdinal;
UINT AdapterOrdinalInGroup;
- NumberOfAdaptersInGroup은 기존 어댑터의 경우 1이고 다중 헤드 카드 master 어댑터의 경우 1보다 큽니다. 다중 헤드 카드 하위 어댑터의 경우 값은 0입니다. 각 카드 최대 하나의 master 가질 수 있지만 많은 부하가 있을 수 있습니다.
- MasterAdapterOrdinal은 이 하위 master 디바이스를 나타냅니다.
- AdapterOrdinalInGroup은 API에서 헤드를 참조하는 순서를 나타냅니다. master 어댑터에는 항상 AdapterOrdinalInGroup 0이 있습니다. 이러한 값은 IDirect3D9 메서드에 전달된 어댑터 서수에 해당하지 않지만 그룹 내의 헤드에만 적용됩니다.
이 정의를 사용하면 멀티헤드 카드가 DirectX 8에서와 마찬가지로 독립 카드인 것처럼 여러 어댑터를 계속 표시할 수 있습니다.
멀티헤드 디바이스를 만들려면 IDirect3D9::CreateDevice에서 D3DCREATE_ADAPTERGROUP_DEVICE 동작 플래그를 지정합니다. 프레젠테이션 매개 변수( D3DPRESENT_PARAMETERS 배열)에는 NumberOfAdaptersInGroup 요소가 포함되어야 합니다. 런타임은 AdapterOrdinalInGroup 숫자 순서로 각 헤드에 각 요소를 할당합니다. D3DCREATE_ADAPTERGROUP_DEVICE 설정되면 각 프레젠테이션 매개 변수에는 다음이 있어야 합니다.
- Windowed 멤버가 FALSE 로 설정됩니다(즉, 전체 화면).
- D3DPRESENT_PARAMETERS EnableAutoDepthStencil 멤버에 대해 동일한 값입니다.
또한 EnableAutoDepthStencil이 TRUE이면 다음 필드 각각에 대해 각 D3DPRESENT_PARAMETERS 동일한 값이 있어야 합니다.
- AutoDepthStencilFormat
- BackBufferWidth
- BackBufferHeight
- BackBufferFormat
DAC가 설정되면 IDirect3DDevice9::CreateAdditionalSwapChain 에 대한 추가 호출이 잘못되었습니다.
DAC를 사용하여 디바이스를 만든 경우 IDirect3DDevice9::Reset 에는 D3DPRESENT_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를 참조하세요.
관련 항목