Multihead (Direct3D 9)

Kartu multihead adalah kartu yang memiliki buffer bingkai dan akselerator umum, konverter digital-ke-analog independen (DAC), dan output monitor. Perangkat tersebut dapat menawarkan dukungan beberapa monitor yang jauh lebih dapat digunakan daripada jumlah adaptor tampilan heterogen yang serupa.

Kartu multihead diekspos dalam API sebagai satu perangkat tingkat API yang dapat mendorong beberapa rantai pertukaran layar penuh. Akibatnya, semua sumber daya dibagikan dengan semua kepala, dan setiap kepala memiliki kemampuan yang sama persis. Setiap kepala dapat diatur ke mode tampilan independen. Anda dapat menggunakan panggilan terpisah ke IDirect3DSwapChain9::P resent untuk merefresh setiap kepala. Anda juga dapat menggunakan satu panggilan ke IDirect3DDevice9::P resent untuk me-refresh setiap head secara berurutan.

Catatan

Refresh setiap kepala tidak terjadi secara bersamaan dengan satu panggilan ke IDirect3DDevice9::P resent. Statistik saat ini dalam Direct3D 9Ex dapat menggunakan struktur D3DPRESENTSTATS untuk menjaga refresh setiap kepala dekat satu sama lain untuk membatasi efek merobek di beberapa kepala adaptor. Untuk informasi tentang menyinkronkan bingkai aplikasi model balik Direct3D 9Ex, lihat Direct3D 9Ex Improvements.

 

Setiap rantai pertukaran untuk perangkat multihead harus layar penuh. Ketika perangkat telah memasuki mode multihead, perangkat harus tetap layar penuh. Transisi kembali ke mode berjendela memerlukan penghancuran perangkat (kecuali untuk operasi ALT+TAB-to-minimize normal).

Metode lama membagi memori video antara kepala dan memperlakukan setiap kepala sebagai akselerator yang sepenuhnya independen masih akan menjadi skenario penggunaan umum. Proposal ini tidak menggantikan mekanisme tersebut kecuali aplikasi telah dikodekan secara khusus untuk berfungsi dalam mode multihead Direct3D 9.

Driver diberi pengetahuan yang memadai untuk beralih di antara dua mode operasi.

Satu kepala akan dipanggil kepala utama, dan semua kepala lain pada kartu yang sama disebut kepala bawahan. Jika lebih dari satu adaptor multihead ada dalam sistem, master dan bawahannya dari satu adaptor multihead disebut grup. Grup ditandai dengan ordinal adaptor kepala master mereka.

Struktur D3DCAPS9 telah diperbarui untuk mengekspos batas perangkat keras baru berikut.

UINT NumberOfAdaptersInGroup; 
UINT MasterAdapterOrdinal; 
UINT AdapterOrdinalInGroup;
  • NumberOfAdaptersInGroup adalah 1 untuk adaptor konvensional, dan lebih besar dari 1 untuk adaptor master kartu multihead. Nilainya akan menjadi 0 untuk adaptor bawahan kartu multihead. Setiap kartu dapat memiliki paling banyak satu master, tetapi mungkin memiliki banyak bawahan.
  • MasterAdapterOrdinal menunjukkan perangkat mana yang merupakan master untuk bawahan ini.
  • AdapterOrdinalInGroup menunjukkan urutan di mana kepala dirujuk oleh API. Adaptor master selalu memiliki AdapterOrdinalInGroup 0. Nilai-nilai ini tidak sesuai dengan ordinal adaptor yang diteruskan ke metode IDirect3D9, tetapi hanya berlaku untuk kepala dalam grup.

Definisi ini memungkinkan kartu multihead untuk terus menyajikan beberapa adaptor seolah-olah mereka adalah kartu independen, seperti yang mereka lakukan di DirectX 8.

Untuk membuat perangkat multihead, tentukan bendera perilaku D3DCREATE_ADAPTERGROUP_DEVICE di IDirect3D9::CreateDevice. Parameter presentasi (array D3DPRESENT_PARAMETERS) harus berisi elemen NumberOfAdaptersInGroup. Runtime akan menetapkan setiap elemen ke setiap kepala dalam urutan numerik AdapterOrdinalInGroup. Saat D3DCREATE_ADAPTERGROUP_DEVICE diatur, setiap parameter presentasi harus memiliki:

  • Anggota Berjendela diatur ke FALSE (dengan kata lain, layar penuh).
  • Nilai yang sama untuk anggota EnableAutoDepthStencil dari D3DPRESENT_PARAMETERS.

Selain itu, jika EnableAutoDepthStencil TRUE, maka masing-masing bidang berikut harus memiliki nilai yang sama untuk setiap D3DPRESENT_PARAMETERS:

  • AutoDepthStencilFormat
  • BackBufferWidth
  • BackBufferHeight
  • BackBufferFormat

Jika DAC diatur, panggilan tambahan ke IDirect3DDevice9::CreateAdditionalSwapChain adalah ilegal.

Jika perangkat dibuat dengan DAC, IDirect3DDevice9::Reset akan mengharapkan array D3DPRESENT_PARAMETERS.

Setiap struktur D3DPRESENT_PARAMETERS yang diteruskan ke IDirect3DDevice9::Reset harus layar penuh. Untuk beralih kembali ke mode berjendela, aplikasi harus menghancurkan perangkat dan membuat ulang perangkat non-multihead dalam mode berjendela.

Berikut adalah skenario penggunaan dasar:

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

Untuk informasi selengkapnya, lihat IDirect3D9::CreateDevice dan IDirect3DDevice9::GetNumberOfSwapChains.

Tips Pemrograman