Secara umum, bercabang di shader bukan ide yang baik. Tapi sekarang saya memiliki shader dengan kondisi yang konstan sehubungan dengan keseluruhan panggilan undian. Jadi cabang yang dieksekusi selalu sama untuk satu panggilan undian.
Apakah percabangan seperti itu masih lebih mahal daripada memiliki banyak shader tanpa cabang-cabang ini dan beralih di antara mereka?
performance
shader
nikitablack
sumber
sumber
Jawaban:
Pada perangkat keras modern jika semua doa dalam grup mengikuti jalur yang sama maka jalur yang tidak digunakan tidak dievaluasi.
dalam kode pseudo:
menjadi
Di mana
anyInvocationARB
akan benar jika setiap doa shader akan memiliki true ascond
(dari ekstensi terbuka ARB_shader_group_vote ).Jika kond berasal dari seragam saja maka pengemudi dapat mengoptimalkan dan mengevaluasi kondisi sebelum memulai render dan mengganti if dengan kebagian cabang yang benar. OpenGL memiliki fitur yang disebut subrutin seragam yang membuatnya eksplisit.
sumber