Gölgelendiricileri derlenmiş bir biçimde veya düz metin olarak dağıtmalı mıyım?


13

GLSL'de yazılmış gölgelendiricileri kullanan bir uygulamaya sahip olmak, gerçek dünyada, masaüstü ve mobil cihazlarda dağıtım için en iyi strateji nedir?

Bunu ikili bir formda veya düz seri metin olarak dağıtmayı hedefliyorum, bu konuda iyi bir öneri istiyorum.

Yanıtlar:


15

İkili gölgelendiricilerin kullanımının temel mantığı, metin gölgelendiricilerinin derlenmesinin hedef aygıtınız için bir iş yükünden çok büyük olmasıdır. İkili GLSL gölgelendiricilerin standart bir biçimi yoktur, bu nedenle desteklemeyi planladığınız her GPU / sürücü için farklı biçimlere ihtiyacınız olacaktır. Gölgelendiricileri kaynak formda dağıtmanızı ve ardından ilk çalıştırmada bunları ikili forma önbelleğe almanızı ve daha sonra oradan yüklemenizi öneririm. Sonra tekrar ben gerçekten orada bir performans darboğazı varsa orada ikili kullanarak hiç haklı test ediyorum.

Dikkate alınması gereken bir şey de , crappy mobil gölgelendirici derleyicileri ile harika bir etkiye sahip olabilecek bir çevrimdışı metin gölgelendirici optimize edicisidir.


Gölgelendirici derlemesinin bir darboğaz olduğu herhangi bir cihaz bulabilirseniz gerçekten şaşırırdım. Büyük gölgelendiricilerde bile kod miktarı, derleme açısından önemsiz bir kod miktarıdır.
edA-qa mort-ora-y

1
Orada bulunan büyük motorlar genellikle gölgelendiricileri çevrimdışı derler ve / veya Tapio'nun önerdiği gibi ilk çalıştırmada önbelleğe alır. Belki orada shader için kod önemsiz bir miktar, ama bir olabilir çok onları.
Laurent Couvidou

Bu yüzden rastgele bir ATI ekran kartı ve Nvidia başka bir rastgele bir satın almak zorunda, gölgelendiricilerimi derlemek ve sadece derlenmiş sürümü dağıtmak? Çalışma zamanında hedeflenen ekran kartının markası nedir nasıl kontrol edebilirim? Bunun için güvenilir bir şey var mı?
user827992

1
@ user827992 İkili biçim, satıcı aynı olsa bile, farklı nesil GPU'lar / sürücüler için farklı olabilir. Unutmayın, Qualcomm ve PowerVR gibi tüm mobil olanlar da dahil olmak üzere birçok Intel GPU var. Tekrar söylüyorum: Derlenmiş gölgelendiricileri dağıtmamanızı, daha ziyade kullanıcının cihazında ilk çalıştırmada önbelleğe almanızı öneririm. GPU algılaması ile ilgili olarak glGetString () biçiminden GL_VENDOR, GL_VERSION ve GL_RENDERER dizelerini ayrıştırmayı deneyebilirsiniz, ancak biçimleri satıcıdan satıcıya değişir.
Tapio
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.