Bagaimana cara kerja Texture Cache dalam GPU Rendering Berbasis Tile

9

Bagaimana cara kerja cache dengan rendering berbasis ubin?

Apakah ada tips tentang cara meningkatkan rasio hit cache untuk itu? (misalnya, jika ubin diproses secara horizontal dan saya memiliki segmen vertikal segitiga dengan tekstur yang sama, apakah itu berfungsi lebih buruk untuk cache daripada jika saya memiliki tata letak segitiga keluar secara horizontal?)

Felipe Lira
sumber
1
Apa yang Anda maksud dengan tata letak segitiga vertikal dan horizontal?
Mokosha
@Mosha maaf, entah bagaimana ini tanpa saya sadari. Saya baru saja melihatnya sekarang. Ini lebih merupakan pertanyaan teoretis daripada praktis dan saya bahkan tidak tahu apakah ini masuk akal sekarang. Bagaimanapun, yang saya maksudkan adalah, katakanlah ubin berpotongan segitiga (x, y) dan (x +1, y) dan bahwa kedua ubin ini diproses satu demi satu. Apakah itu lebih baik untuk cache tekstur daripada Jika saya memiliki segitiga berpotongan (x, y) dan (x, y + 1)? (Karena piksel batas dan tata letak segitiga tidak berada pada arah yang sama dengan pemrosesan ubin)
Felipe Lira

Jawaban:

19

Apakah itu GPU berbasis ubin atau tidak, tidak terlalu memengaruhi arsitektur cache tekstur. Tata letak memori tekstur akan terlihat seperti beberapa rasa orde Morton atau kurva Hilbert di semua GPU.

Akibatnya, lebih efisien untuk membuat segitiga yang dekat dengan segitiga sama sisi karena sistem memori GPU mengambil garis cache dari texels.

Jadi jelas pada batas ubin, mungkin Anda harus mengambil texels dua kali. Ini memiliki biaya kecil karena batas ubin hanya "beberapa" piksel.

GPU desktop yang dapat diperdebatkan berperilaku identik dengan GPU berbasis ubin sebagai percobaan seperti yang ditunjukkan berikut ini: http://www.g-truc.net/post-0597.html

Ukuran ubin berbeda tetapi kedua arsitektur sebenarnya memproses fragmen menjadi hierarki ubin dengan ukuran berbeda.

Saat mengkodekan GPU berbasis ubin, rekomendasi saya adalah selalu mengingat:

  1. Jangan beralih objek framebuffer kecuali Anda benar - benar perlu.
  2. Saat mengikat objek framebuffer baru, jika Anda tidak perlu menyimpan konten framebuffer saat ini, buanglah. Jika tidak ingin memuat konten framebuffer baru, maka Anda harus menghapus framebuffer.
Christophe
sumber
Saya memperbarui item kedua karena hasil edit bukan yang saya maksud. Kalau tidak, itu terlihat hebat!
Christophe
Hai Christophe, maksud Anda segitiga "sama sisi" dan bukannya "sama kaki"? Daripada "Hilbert" saya akan mengatakan perintah "Morton" karena pengalamatan jauh lebih mudah dalam perangkat keras.
Simon F
@ Christophe terima kasih! Ini sangat membantu. Jadi, untuk piksel batas, apakah tekstur cache tidak penting? Itu semacam apa yang saya pikirkan. Jadi, jika saya memiliki segitiga yang memotong ubin (x, y) dan (x +1, y) dan GPU hanya ubin raster (x, y). Dengan asumsi ubin (x + 1, y) akan menjadi berikutnya, bahkan jika Unit Eksekusi yang berbeda memprosesnya, tidakkah saya akan mendapat manfaat dari cache tekstur saat mengambil sampel texels untuk segitiga ini?
Felipe Lira
Saya juga ingin tahu tentang pola Hilbert. Saya selalu berasumsi ini benar untuk blok tekstur terkompresi. Apakah ini berlaku untuk semua tekstur? PS: Saya juga tidak mengikuti paragraf terakhir.
Felipe Lira
PVRTC mengkodekan blok tekstur dalam urutan morton
ashleysmithgpu