2009-06-28 8 views
19

Ho letto documenti sulla computer grafica e ogni tanto mi imbatto nel termine "dipendente dalla lettura della trama" o "dipendente dal recupero delle texture" usato nel contesto di interrogare le trame nel codice dello shader. Cosa legge una trama dipendente e qual è la differenza tra questa e una trama "normale"?Cosa legge una trama dipendente?

risposta

23

Una "lettura di trama dipendente" è quando vengono utilizzati i valori di ritorno da una ricerca di trama (o da altri calcoli in-shader) per determinare WHERE da cercare da una seconda trama. Un'importante implicazione è che le coordinate della trama (da cui si guarda in alto) non sono determinate fino alla metà dell'esecuzione dello shader ... non c'è alcun tipo di analisi statica che si possa fare sullo shader (anche conoscendo i valori di tutti i parametri) che ti dirà quali saranno le coordinate in anticipo. E 'anche rigorosamente ordina i due consistenza legge e limiti di quanto l'ordine di esecuzione potrebbe essere cambiato da ottimizzazioni nel driver, ecc

Su vecchie schede grafiche, ha usato per essere un bel paio di limitazioni su questo genere di cose . Ad esempio, a un punto (IIRC) è possibile cercare da più trame ma solo con un piccolo numero di coordinate di trama distinte. L'hardware è stato effettivamente implementato in modo tale che alcuni tipi di letture dipendenti dalla trama fossero o impossibili o molto inefficienti.

Nell'ultima generazione o due di carte, non dovresti preoccuparti di questo. Ma potresti leggere libri o articoli di un paio di anni fa quando davvero dovevi prestare molta attenzione a queste cose.

+8

In realtà, in base a PowerVR, è necessario prestare attenzione a hardware abbastanza recente :-) http://bit.ly/yvSnM – Justicle

+0

Sulla mia GTX 570, le ricerche di texture dipendenti nello shader di frammenti sono un ordine di grandezza più lento di ricerche di texture indipendenti. (Questo ha spinto il motore su cui stavo lavorando da zero/soffocamento FPS a 20 FPS.) Ho sperimentato un aumento di velocità leggermente inferiore rimuovendo una "ricerca costante di array" dipendente nello shader della geometria. (Il conteggio primitivo dipendeva da questo valore). Il contesto è tutto! – Philip

+0

Questo non è corretto, vedere la mia risposta. – benthehutt

10

Una lettura di trama normale utilizza solo le coordinate di trama passate nello shader. Una lettura della trama dipendente è con le coordinate della trama che sono state calcolate in parte utilizzando i valori recuperati da un'altra trama precedentemente accessibile nello shader. Quindi il secondo accesso alla trama è "dipendente" dal valore recuperato dal primo.

21

La risposta accettata (e quella sottostante) limita in modo errato le letture della trama dipendente all'utilizzo dell'output di un'altra trama letta. Non è corretto

Una trama dipendente dalla lettura è qualsiasi trama letta con le coordinate che non sono le coordinate esatte passate nel programma shader. Anche uno swizzle causerà una lettura della trama dipendente.

Questo è preso direttamente da Apple's OpenGL ES programming guide.

+0

Grazie, @benthehutt, ho chiarito nella mia risposta. –