L'ordine dei dati del buffer dei vertici durante il rendering delle primitive indicizzate è importante?


14

Sto costruendo i triangoli di un oggetto 3d. Se riesco a scriverli nel buffer nell'ordine in cui vengono calcolati, questo semplifica il codice della CPU. I vertici per i triangoli non saranno contigui.

C'è una penalità per le prestazioni per averli scritti fuori servizio?

Risposte:


12

Ci sono (almeno) due fattori in gioco qui. Le GPU possono utilizzare una cache di vertice post-trasformazione quando vengono renderizzate le primitive indicizzate. La dimensione di questa cache varia e viene utilizzata durante una singola chiamata di disegno (non per più chiamate, per quanto ne so, quindi non importa con quale frequenza si modificano i dati del buffer in quel contesto).

Se organizzi i tuoi dati per sfruttare questa cache (un algoritmo di esempio è qui ), puoi vedere i miglioramenti delle prestazioni. Tuttavia, questa organizzazione ha più a che fare con l'ordinamento degli indici in modo che ogni triplo indice riutilizzi il maggior numero possibile di vertici visti di recente. Probabilmente ha poco a che fare con il tuo scenario specifico, a meno che i tuoi triangoli, tramite il tuo buffer indice, siano sparsi casualmente nel buffer ... nel qual caso probabilmente stai soffiando spesso nella cache. Non mi era chiaro nella tua domanda se questo fosse o meno il caso, quindi ho pensato che valesse la pena menzionarlo.

La cosa più probabile che sia un problema è che le GPU memorizzano anche nella cache gli accessi di memoria ai dati dei vertici durante un disegno. Anche la dimensione di quella cache ha dimensioni abbastanza sgradevoli ed è ipotizzabile che si possa ottenere un'alta frequenza di miss in quella cache sui singoli core che elaborano quegli indici in dati di vertice localizzati in maniera molto scarsa.

Il fatto che possa causare o meno un problema di prestazioni abbastanza da essere una bandiera rossa nella tua applicazione, e particolare (sembra) riprogettare il tuo algoritmo per organizzare meglio i dati a spese della leggibilità dell'algoritmo ... non è qualcosa a cui posso rispondere, dovrai delineare alcuni scenari e vedere.

Personalmente commetterei errori sul lato del codice leggibile e gestibile, tuttavia, poiché penso che qualsiasi cache mancante che causerai non sarà abbastanza significativa da essere notata dagli utenti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.