GLSL'yi modern (GL3.3 +) GPU'larda kullanırken, tekdüze dallanma olasılığı nedir?Modern GPU'larda üniformalarda dallanma maliyeti
Motorumda çok fazla gölgelendiriciye sahip olduğum noktaya ulaşıyorum. Ve bunların çoğu için birkaç farklı kalite ön ayarım var. Şu anda, farklı kalite ön ayarlarını seçmek için gölgelendiricilerde if() ile üniforma kullanıyorum. Ancak, gölgelendiricileri yeniden derleyerek ve #ifdef kullanarak daha iyi bir performans elde edebileceğime dair endişelerim var. Sorun şu ki, bir gölgelendiriciyi yeniden derlerken diğer üniformaların izlenmesi ve sıfırlanması konusunda endişelenme ihtiyacı.
Temelde bilmem gereken şey, korkularım temelsiz ise. Modern GPU'larda üniform bir ucuzluk var mı? Kendimi birkaç test yaptım ve her iki yolda da çok az fark var, ama sadece nVidia 680 üzerinde test ettim.
Sürücü, aksi takdirde dallanma maliyetinin çok büyük olacağına karar verirse, gölgelendiriciyi düzlemsel üniformalarla yeniden derlemekte serbesttir. –
Gölgelendiricinin paralel girişimleri farklı kontrol yolları aldığında, ipucu farklılığı modern GPU'larda önemli bir konudur. Üniformalar bir programdaki tüm davetlere uygulanır, ancak bu bir sorun değildir. Köşe özniteliklerinde veya başka bir şekilde dinamik verilerde dallanmadan kaçınmak, zamanınızın daha iyi bir kullanımıdır. –
Tamam, pratikte, modern bir GPU'da sabitler ile yeniden derlenmekten daha yavaş olma olasılığı yoktur, çünkü ya şubeler CPU'lardan biraz farklıdır, ya da derleyici, gölgelendiriciyi otomatik olarak yeniden derleyecektir. Doğru anlıyor muyum? – Jagoly