다음을 통해 공유


멀티헤드(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::CreateDeviceIDirect3DDevice9::GetNumberOfSwapChains참조하세요.

프로그래밍 팁