Devo distribuire shader in forma compilata o in testo semplice?


13

Avendo un'applicazione che utilizza shader scritti in GLSL, qual è la migliore strategia per la distribuzione nel mondo reale e per desktop e dispositivi mobili?

Sto mirando a distribuire questo in forma binaria o come semplice testo serializzato, vorrei un buon suggerimento al riguardo.

Risposte:


15

La logica principale per l'utilizzo di shader binari è se la compilazione degli shader di testo è un carico di lavoro troppo grande per il dispositivo di destinazione. Gli shader binari GLSL non hanno un formato standardizzato, quindi ne avresti bisogno di diversi per ogni GPU / driver che prevedi di supportare. Ti consiglierei di distribuire gli shader in forma sorgente e quindi alla prima esecuzione salvarli nella cache in forma binaria e successivamente caricarli da lì. Poi di nuovo testerei prima se hai davvero un collo di bottiglia nelle prestazioni per giustificare l'uso dei binari.

Una cosa da considerare è anche un ottimizzatore di shader di testo offline che può avere un grande effetto con i compilatori shader mobili scadenti.


In realtà sarei sorpreso se potessi trovare qualsiasi dispositivo in cui la compilazione di shader è un collo di bottiglia. La quantità di codice, anche in grandi shader, è una quantità banale di codice in termini di compilazione.
edA-qa mort-ora-y

1
I grandi motori di solito compilano shader offline e / o li memorizzano nella cache al primo avvio, come suggerisce Tapio. Forse c'è una quantità banale di codice per shader, ma puoi averne molti .
Laurent Couvidou,

quindi devo comprare una videocard ATI casuale e un'altra casuale da Nvidia, compilare i miei shader e distribuire solo la versione compilata? Come posso verificare in fase di esecuzione qual è la marca della scheda video targetizzata? C'è qualcosa di affidabile per questo?
user827992,

1
@ user827992 Il formato binario potrebbe essere diverso per le diverse generazioni di GPU / driver anche se il fornitore è lo stesso. E non dimenticare che ci sono anche molte GPU Intel là fuori, figuriamoci tutte quelle mobili, come Qualcomm e PowerVR. Quindi di nuovo: ti suggerisco di non distribuire shader compilati, ma piuttosto di memorizzarli nella cache alla prima esecuzione sul dispositivo dell'utente. Per quanto riguarda il rilevamento della GPU, puoi provare ad analizzare le stringhe GL_VENDOR, GL_VERSION e GL_RENDERER da glGetString (), ma il loro formato varia da fornitore a fornitore.
Tapio,
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.