Multihead (Direct3D 9)

Le schede multihead sono quelle che hanno un buffer e un acceleratore di frame comuni, convertitori digitali-analogici indipendenti e monitorano gli output. Tali dispositivi possono offrire un supporto di monitoraggio molto più utilizzabile rispetto a un numero simile di schede di visualizzazione eterogenee.

Le schede multihead vengono esposte nell'API come un singolo dispositivo a livello DI API che può guidare diverse catene di scambio a schermo intero. Di conseguenza, tutte le risorse sono condivise con tutte le teste e ogni testa ha esattamente le stesse funzionalità. Ogni testa può essere impostata su modalità di visualizzazione indipendenti. È possibile usare chiamate separate a IDirect3DSwapChain9::P resent per aggiornare ogni head. È anche possibile usare una chiamata a IDirect3DDevice9::P resent per aggiornare ogni testa in sequenza.

Nota

L'aggiornamento di ogni head non si verifica simultaneamente con una singola chiamata a IDirect3DDevice9::P resent. Presentare le statistiche in Direct3D 9Ex può usare la struttura D3DPRESENTSTATS per mantenere gli aggiornamenti a ogni testa vicino tra loro per limitare gli effetti di strappo su più teste di schede. Per informazioni sulla sincronizzazione dei fotogrammi delle applicazioni di flip Direct3D 9Ex, vedere Miglioramenti di Direct3D 9Ex.

 

Ogni catena di scambio per un dispositivo multihead deve essere a schermo intero. Quando un dispositivo ha immesso la modalità multihead, deve rimanere a schermo intero. La transizione alla modalità finestra richiede la distruzione del dispositivo (ad eccezione della normale operazione ALT+TAB-to-minimize).

Il vecchio metodo di dividere la memoria video tra le teste e trattare ogni testa come acceleratore completamente indipendente sarà ancora uno scenario di utilizzo comune. Questa proposta non sostituisce tale meccanismo a meno che l'applicazione non sia stata codificata in modo specifico per funzionare nella modalità multihead Direct3D 9.

I driver hanno una conoscenza adeguata per passare tra le due modalità di operazione.

Una testa verrà chiamata testa master e tutte le altre teste sulla stessa carta saranno chiamate teste subordinate. Se in un sistema sono presenti più schede multihead, il master e i relativi subordinati da una scheda multihead vengono chiamati un gruppo. I gruppi vengono denotati dall'ordinale dell'adattatore della testa master.

La struttura D3DCAPS9 è stata aggiornata per esporre i nuovi limiti hardware seguenti.

UINT NumberOfAdaptersInGroup; 
UINT MasterAdapterOrdinal; 
UINT AdapterOrdinalInGroup;
  • NumberOfAdaptersInGroup è 1 per le schede convenzionali e maggiore di 1 per l'adattatore master di una scheda multihead. Il valore sarà 0 per un adattatore subordinato di una scheda multihead. Ogni scheda può avere al massimo un master, ma potrebbe avere molti subordinati.
  • MasterAdapterOrdinal indica quale dispositivo è il master per questo subordinato.
  • AdapterOrdinalInGroup indica l'ordine in cui i test vengono a cui fa riferimento l'API. L'adattatore master ha sempre AdapterOrdinalInGroup 0. Questi valori non corrispondono ai ordinali dell'adapter passati ai metodi IDirect3D9, ma si applicano solo ai capi all'interno di un gruppo.

Questa definizione consente a schede multihead di continuare a presentare più schede come se fossero schede indipendenti, proprio come hanno fatto in DirectX 8.

Per creare un dispositivo multihead, specificare il flag di comportamento D3DCREATE_ADAPTERGROUP_DEVICE in IDirect3D9::CreateDevice. I parametri di presentazione (una matrice di D3DPRESENT_PARAMETERS) devono contenere elementi NumberOfAdaptersInGroup. Il runtime assegna ogni elemento a ogni head nell'ordine numerico AdapterOrdinalInGroup. Quando D3DCREATE_ADAPTERGROUP_DEVICE è impostato, ogni parametro di presentazione deve avere:

  • Il membro windowed impostato su FALSE (in altre parole, essere a schermo intero).
  • Lo stesso valore per il membro EnableAutoDepthStencil di D3DPRESENT_PARAMETERS.

Inoltre, se EnableAutoDepthStencil è TRUE, ognuno dei campi seguenti deve avere lo stesso valore per ogni D3DPRESENT_PARAMETERS:

  • AutoDepthStencilFormat
  • BackBufferWidth
  • BackBufferHeight
  • BackBufferFormat

Se l'applicazione livello dati è impostata, le chiamate aggiuntive a IDirect3DDevice9::CreateAdditionalSwapChain sono illegali.

Se il dispositivo è stato creato con l'applicazione livello dati, IDirect3DDevice9::Reset prevede una matrice di D3DPRESENT_PARAMETERS.

Ogni struttura D3DPRESENT_PARAMETERS passata a IDirect3DDevice9::Reset deve essere a schermo intero. Per tornare alla modalità finestrata, l'applicazione deve distruggere il dispositivo e ricreare un dispositivo non a più intestazioni in modalità finestra.

Ecco uno scenario di utilizzo di base:

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

Per altre informazioni, vedere IDirect3D9::CreateDevice e IDirect3DDevice9::GetNumberOfSwapChains.

Suggerimenti per la programmazione