Considerazioni sulle prestazioni per l'interoperabilità fra Direct3D9 e WPF

È possibile ospitare contenuto Direct3D9 usando la D3DImage classe . L'hosting di contenuto Direct3D9 può influire sulle prestazioni dell'applicazione. Questo argomento descrive le procedure consigliate per ottimizzare le prestazioni quando si ospita contenuto Direct3D9 in un'applicazione Windows Presentation Foundation (WPF). Queste procedure consigliate includono come usare D3DImage e procedure consigliate quando si usano le visualizzazioni di Windows Vista, Windows XP e multi-monitor.

Nota

Per esempi di codice che illustrano queste procedure consigliate, vedere Interoperabilità WPF e Direct3D9.

Usare la spaziatura D3DImage

Il contenuto Direct3D9 ospitato in un'istanza D3DImage di non viene eseguito il rendering rapido come in un'applicazione Direct3D pura. La copia della superficie e lo scaricamento del buffer dei comandi possono essere operazioni costose. Man mano che aumenta il numero di D3DImage istanze, si verifica un maggiore scaricamento e le prestazioni diminuiscono. Pertanto, è consigliabile usare D3DImage con moderazione.

Procedure consigliate in Windows Vista

Per ottenere prestazioni ottimali in Windows Vista con uno schermo configurato per l'uso del modello wdDM (Windows Display Driver Model), creare la superficie Direct3D9 in un IDirect3DDevice9Ex dispositivo. Ciò consente la condivisione della superficie. La scheda video deve supportare le D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES funzionalità del driver e D3DCAPS2_CANSHARERESOURCE in Windows Vista. Tutte le altre impostazioni causano la copia della superficie tramite software, riducendo in modo significativo le prestazioni.

Nota

Se Windows Vista ha uno schermo configurato per l'uso del modello XDDM (Display Driver Model), la superficie viene sempre copiata tramite software, indipendentemente dalle impostazioni. Con le impostazioni appropriate e la scheda video, si noteranno prestazioni migliori in Windows Vista quando si usa WDDM perché le copie di superficie vengono eseguite nell'hardware.

Procedure consigliate in Windows XP

Per ottenere prestazioni ottimali in Windows XP, che usa windows XP Display Driver Model (XDDM), creare una superficie bloccabile che si comporta correttamente quando viene chiamato il IDirect3DSurface9::GetDC metodo . Internamente, il BitBlt metodo trasferisce la superficie tra i dispositivi nell'hardware. Il GetDC metodo funziona sempre sulle superfici XRGB. Tuttavia, se il computer client esegue Windows XP con SP3 o SP2 e se il client dispone anche dell'hotfix per la funzionalità finestra a più livelli, questo metodo funziona solo sulle superfici ARGB. La scheda video deve supportare la D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES funzionalità del driver.

Una profondità di visualizzazione desktop a 16 bit può ridurre significativamente le prestazioni. È consigliabile usare un desktop a 32 bit.

Se si sviluppa per Windows Vista e Windows XP, testare le prestazioni in Windows XP. L'esaurimento della memoria video in Windows XP è un problema. Inoltre, D3DImage in Windows XP usa più memoria video e larghezza di banda rispetto a Windows Vista WDDM, a causa di una copia di memoria video aggiuntiva necessaria. Pertanto, è possibile prevedere prestazioni peggiori in Windows XP rispetto a Windows Vista per lo stesso hardware video.

Nota

XDDM è disponibile sia in Windows XP che in Windows Vista; Tuttavia, WDDM è disponibile solo in Windows Vista.

Procedure consigliate generali

Quando si crea il dispositivo, usare il D3DCREATE_MULTITHREADED flag di creazione. Ciò riduce le prestazioni, ma il sistema di rendering WPF chiama metodi su questo dispositivo da un altro thread. Assicurarsi di seguire correttamente il protocollo di blocco, in modo che nessun thread accachi contemporaneamente al dispositivo.

Se il rendering viene eseguito su un thread gestito WPF, è consigliabile creare il dispositivo con il D3DCREATE_FPU_PRESERVE flag di creazione. Senza questa impostazione, il rendering D3D può ridurre l'accuratezza delle operazioni a precisione doppia WPF e introdurre problemi di rendering.

L'affiancamento di un oggetto D3DImage è veloce, a meno che non si riquadri una superficie non pow2 senza supporto hardware o se si riquadri un DrawingBrush oggetto o VisualBrush che contiene un oggetto D3DImage.

Procedure consigliate per la visualizzazione a più monitor

Se si usa un computer con più monitor, è necessario seguire le procedure consigliate descritte in precedenza. Esistono anche alcune considerazioni aggiuntive sulle prestazioni per una configurazione con più monitor.

Quando si crea il buffer nascosto, viene creato in un dispositivo e in un adattatore specifico, ma WPF può visualizzare il buffer anteriore in qualsiasi scheda. La copia tra adattatori per aggiornare il buffer anteriore può essere molto costosa. In Windows Vista configurato per l'uso di WDDM con più schede video e con un IDirect3DDevice9Ex dispositivo, se il buffer anteriore si trova su una scheda diversa ma ancora la stessa scheda video, non c'è alcuna penalità per le prestazioni. Tuttavia, in Windows XP e XDDM con più schede video, si verifica una riduzione significativa delle prestazioni quando il buffer anteriore viene visualizzato in una scheda diversa rispetto al buffer nascosto. Per altre informazioni, vedere Interoperabilità di WPF e Direct3D9.

Riepilogo delle prestazioni

La tabella seguente illustra le prestazioni dell'aggiornamento del buffer anteriore come funzione del sistema operativo, del formato pixel e della bloccabilità della superficie. Si presuppone che il buffer anteriore e il buffer nascosto si trovino nello stesso adattatore. A seconda della configurazione della scheda, gli aggiornamenti hardware sono in genere molto più veloci rispetto agli aggiornamenti software.

Formato pixel superficie Windows Vista, WDDM e 9Ex Altre configurazioni di Windows Vista Windows XP SP3 o SP2 w/ hotfix Windows XP SP2
D3DFMT_X8R8G8B8 (non bloccabile) Aggiornamento hardware Aggiornamento software Aggiornamento software Aggiornamento software
D3DFMT_X8R8G8B8 (bloccabile) Aggiornamento hardware Aggiornamento software Aggiornamento hardware Aggiornamento hardware
D3DFMT_A8R8G8B8 (non bloccabile) Aggiornamento hardware Aggiornamento software Aggiornamento software Aggiornamento software
D3DFMT_A8R8G8B8 (bloccabile) Aggiornamento hardware Aggiornamento software Aggiornamento hardware Aggiornamento software

Vedi anche