Requisiti di elaborazione dei dispositivi e dei vertici (Direct3D 9)

Le prestazioni delle operazioni di elaborazione dei vertici, tra cui la trasformazione e l'illuminazione, dipendono fortemente dalla posizione in cui esiste il buffer del vertice in memoria e sul tipo di dispositivo di rendering usato. Le applicazioni controllano l'allocazione della memoria per i buffer dei vertici quando vengono creati. Quando viene impostato il flag di memoria D3DPOOL_SYSTEMMEM, il buffer del vertice viene creato nella memoria di sistema. Quando viene usato il flag di memoria D3DPOOL_DEFAULT, il driver del dispositivo determina la posizione in cui la memoria per il buffer del vertice è più adatta allocata, spesso definita memoria ottimale del driver. La memoria ottimale del driver può essere memoria video locale, memoria video non locale o memoria di sistema.

L'impostazione della costante D3DUSAGE_SOFTWAREPROCESSING con IDirect3DDevice9::CreateVertexBuffer abilita l'elaborazione del vertice software sui dati del buffer dei vertici. Questo flag è necessario per l'elaborazione dei vertici software durante la modalità mista. Il flag potrebbe non essere usato per la modalità di elaborazione dei vertici hardware. I buffer vertex usati con l'elaborazione dei vertici software includono quanto segue:

Il motivo usato per determinare la posizione di memoria - sistema o driver ottimale - per i buffer dei vertici è uguale a quello per le trame. L'elaborazione dei vertici, inclusa la trasformazione e l'illuminazione, nell'hardware funziona meglio quando i buffer dei vertici vengono allocati nella memoria ottimale del driver, mentre l'elaborazione del vertice software funziona meglio con i buffer dei vertici allocati nella memoria di sistema. Per le trame, la rasterizzazione hardware funziona meglio quando le trame vengono allocate nella memoria ottimale del driver, mentre la rasterizzazione software funziona meglio con trame di memoria di sistema.

Microsoft Direct3D 9 supporta l'elaborazione autonoma dei vertici, senza eseguire il rendering di alcuna primitiva con il metodo IDirect3DDevice9::P rocessVertices . Questa elaborazione dei vertici autonomi viene sempre eseguita nel software nel processore host. A causa di questo, i buffer dei vertici usati come origini impostati con IDirect3DDevice9::SetStreamSource devono essere creati con il flag di D3DUSAGE_SOFTWAREPROCESSING. La funzionalità fornita da IDirect3DDevice9::P rocessVertices è identica a quella dei metodi IDirect3DDevice9::D rawPrimitive e IDirect3DDevice9 ::D rawIndexedPrimitive durante l'uso dell'elaborazione del vertice software.

Se l'applicazione esegue l'elaborazione dei vertici e passa vertici trasformati, illuminati e ritagliati ai metodi di rendering, l'applicazione può scrivere direttamente vertici in un buffer di vertice allocato nella memoria ottimale del driver. Questa tecnica impedisce un'operazione di copia ridondante in un secondo momento. Si noti che questa tecnica non funzionerà correttamente se l'applicazione legge i dati da un buffer dei vertici, perché le operazioni di lettura eseguite dall'host dalla memoria ottimale del driver possono essere molto lente. Pertanto, se l'applicazione deve leggere durante l'elaborazione o scrive i dati nel buffer in modo erratico, un buffer del vertice di memoria di sistema è una scelta migliore.

Quando si usano le funzionalità di elaborazione dei vertici Direct3D (passando vertici non trasformati ai metodi di rendering del buffer dei vertici), l'elaborazione può verificarsi nell'hardware o nel software a seconda del tipo di dispositivo e dei flag di creazione del dispositivo. È consigliabile allocare i buffer dei vertici nel pool D3DPOOL_DEFAULT per ottenere prestazioni ottimali in tutti i casi. Quando un dispositivo usa l'elaborazione del vertice hardware, esistono numerose ottimizzazioni aggiuntive che possono essere eseguite in base ai flag D3DUSAGE_DYNAMIC e D3DUSAGE_WRITEONLY. Per altre informazioni sull'uso di questi flag, vedere IDirect3DDevice9::CreateVertexBuffer.

Buffer vertex