Apakah urutan data buffer verteks ketika rendering diindeks penting?


14

Saya sedang membangun segitiga objek 3d. Jika saya dapat menuliskannya di buffer sesuai urutan, itu akan menyederhanakan kode CPU. Verteks untuk segitiga tidak akan bersebelahan.

Apakah ada penalti kinerja untuk menulisnya yang tidak sesuai?

Jawaban:


12

Ada (setidaknya) dua faktor yang berperan di sini. GPU dapat menggunakan cache vertex post-transform ketika primitif terindeks di-render. Ukuran cache ini bervariasi, dan digunakan selama panggilan undian individual (tidak lintas beberapa panggilan, sejauh yang saya ketahui, jadi tidak masalah seberapa sering Anda mengubah data buffer dalam konteks itu).

Jika Anda mengatur data Anda untuk memanfaatkan cache ini (contoh algoritma ada di sini ), Anda dapat melihat peningkatan kinerja. Namun, organisasi ini lebih berkaitan dengan memesan indeks Anda sehingga setiap indeks triple menggunakan kembali sebanyak mungkin simpul yang baru dilihat. Ini mungkin memiliki sedikit pengaruh pada skenario spesifik Anda, kecuali jika segitiga Anda, melalui buffer indeks Anda, juga tersebar secara acak di buffer ... dalam hal ini Anda mungkin sering meniup cache. Tidak jelas bagi saya dalam pertanyaan Anda apakah ini masalahnya, jadi saya pikir itu layak untuk disebutkan.

Apa yang lebih mungkin menjadi masalah adalah bahwa GPU juga menyimpan memori cache akses ke data titik selama undian. Ukuran yang cache juga cukup unreliably berukuran dan itu dibayangkan bahwa Anda bisa mendapatkan frekuensi rindu tinggi dalam cache pada inti individu memproses indeks tersebut menjadi data vertex sangat buruk lokal.

Seperti apakah atau tidak itu akan menyebabkan cukup masalah kinerja menjadi bendera merah dalam aplikasi Anda, dan khususnya (sepertinya) merekayasa ulang algoritma Anda untuk mengatur data dengan lebih baik dengan mengorbankan keterbacaan algoritma. ... itu bukan sesuatu yang bisa saya jawab, Anda harus membuat profil beberapa skenario dan melihat.

Saya pribadi akan melakukan kesalahan di sisi kode yang dapat dibaca dan dikelola, karena saya pikir setiap cache yang hilang akan menyebabkan tidak akan cukup signifikan bagi pengguna untuk memperhatikan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.