次の方法で共有


マルチヘッド (Direct3D 9)

マルチヘッド カードとは、共通のフレーム バッファーとアクセラレーター、独立した DAC コンバーター、およびモニター出力を持つカードです。そのようなデバイスは、異種ディスプレイ アダプターの数よりもはるかに多くの有用な複数モニター サポートを提供できます。

マルチヘッド カードは、複数の全画面スワップ チェーンを駆動できる単一の API レベルデバイスとして、API に公開されます。そのため、すべてのリソースがすべてのヘッドで共有され、各ヘッドの能力はまったく同じです。各ヘッドは、独立したディスプレイ モードに設定でき、さまざまな時間でリフレッシュできます (IDirect3DSwapChain9::Present を使って)。同時設定には、IDirect3DDevice9::Present を使用します。

マルチヘッド ドライブの各スワップ チェーンは全画面でなければなりません。デバイスがマルチヘッド モードに入っても、全画面のままでなければなりません。情報がウィンドウ表示モードに戻るには、デバイスの破棄が必要です (操作を最小化する通常の ALT+TAB を除く)。

ヘッド間でのビデオ メモリーの分割、および各ヘッドを完全独立アクセラレーターとして処理する古い方法は、今後も一般的な利用方法となります。ただし、アプリケーションが具体的に Direct3D 9 マルチヘッド モードの関数にコード化されていない限り、メカニズムに優先されることはありません。

ドライバーには、2 つの操作モードを切り替える適切な情報が与えられます。

あるヘッドはマスター ヘッドと呼ばれ、同じカード上にある残りのヘッドはすべて従属ヘッドと呼ばれます。1 つのシステム内にマルチヘッド アダプターが複数存在する場合、1 つのマルチヘッド アダプターのマスターおよびその従属は 1 つのグループと見なされます。グループは、それらのマスター ヘッドのアダプター序数で示されます。

次の新しいハードウェアの能力公開するために、D3DCAPS9 構造体が更新されています。

UINT NumberOfAdaptersInGroup; 
UINT MasterAdapterOrdinal; 
UINT AdapterOrdinalInGroup;
  • NumberOfAdaptersInGroup は従来のアダプターに対して 1 であり、マルチヘッド カードのマスター アダプターに対しては 1 より大きな数です。マルチヘッド カードの従属アダプターの場合は、0 になります。どのカードの場合でも、マスターは最大で 1 つですが、従属は多数持つことができます。
  • MasterAdapterOrdinal は、この従属デバイスのマスター デバイスを示します。
  • AdapterOrdinalInGroup は、API によってヘッドが参照される順序を示します。マスター アダプターは常に AdapterOrdinalInGroup 0 を持ちます。これらの値は、IDirect3D9 メソッドに渡されるアダプター序数に対応していませんが、グループ内のヘッドのみに適用されます。

この定義により、マルチヘッド カードは、複数のアダプターが独立したカードであるかのように (DirectX 8 でそうであったように) 表示し続けることができます。

マルチヘッドデバイスを作成するには、IDirect3D9::CreateDevice に動作フラグ DAC を指定します。プレゼンテーション パラメーター (D3DPRESENT_PARAMETERS の配列) は、NumberOfAdaptersInGroup 要素を含む必要があります。ランタイムは各要素を AdapterOrdinalInGroup の番号順に各ヘッドに割り当てます。DAC が設定されている場合、各プレゼンテーション パラメーターは次を必要とします。

  • FALSE (つまり全画面) に設定されている Windowed メンバー。
  • D3DPRESENT_PARAMETERS の EnableAutoDepthStencil メンバーに対する同じ値。

さらに、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」を参照してください。