Struktur data untuk rendering berbasis ubin (ditangguhkan)

18

Render ubin digunakan dalam arsitektur GPU seluler modern untuk meningkatkan koherensi akses memori dengan membagi ruang gambar ke dalam kisi biasa ubin kecil (misalnya, 32x32 piksel). Informasi langka mengenai jenis struktur data yang digunakan untuk melacak primitif yang terkait dengan setiap ubin, mengingat bahwa sewenang-wenang banyak primitif mungkin tumpang tindih dengan ubin yang diberikan.

Dari perspektif pengembang driver, struktur data apa yang biasanya digunakan untuk mewakili set primitif yang dimiliki ubin, dan apakah struktur tersebut dialokasikan / diubah ukurannya secara dinamis sesuai dengan geometri yang tumpang tindih dengan ubin tertentu?

warrenm
sumber
3
Pertanyaan yang sangat menarik, dan meskipun saya menduga sebagian besar detail seluk beluk adalah saus rahasia, ini mungkin titik awal yang baik bagi siapa saja yang ingin melakukan penelitian dan menulis ringkasan: blog.imgtec.com/powervr/…
John Calsbeek

Jawaban:

11

Posting blog yang John sebutkan itu adalah awal yang bagus (jika saya mengatakannya sendiri!), Tetapi ada sedikit detail tambahan yang mungkin bisa membantu.

Untuk arsitektur PowerVR, struktur data menengah - beragam disebut primitive list atau parameter buffer (PB) - yang menyimpan data per-ubin, setelah semua naungan vertex dan proses pemasangan selesai, sebenarnya sebagian besar dihasilkan dan dikelola oleh perangkat keras, bukan driver.

Struktur memori PB secara fisik dibagi menjadi dua. Pertama, blok data vertex yang ditransformasikan, termasuk atribut vertex. Blok dikompresi, dan seperti yang Anda bayangkan mereka hanya mengemas dan mengompresi data floating point untuk sebagian besar. Struktur memori kedua adalah data ubin, yang secara efektif adalah daftar daftar.

Daftar tingkat atas dalam struktur data itu disebut wilayah, dan dapat mengkodekan set ubin daripada ubin tunggal pada suatu waktu, untuk blok primitif yang diberikan. Karena itu suatu wilayah adalah sekumpulan lokasi ubin layar, status ubin, dan kemudian daftar blok terkompresi yang menyimpan geometri di wilayah itu. Wilayah adalah tempat kerja rasteriser, dan Anda dapat membayangkan bahwa ubin kosong hanya dilompati secara otomatis, meskipun dalam beberapa kasus ada alasan bagi rasteriser untuk mengunjungi daerah kosong.

Memori yang digunakan GPU untuk PB dialokasikan secara dinamis di semua implementasi PowerVR modern. Penunjuk ke memori tersebut disediakan oleh driver, dan driver, dengan bantuan GPU, akan mengukurnya sesuai kebutuhan. Mekanisme itu merupakan kompromi antara harus sering merelokasi dan meminimalkan jumlah ruang PB yang dialokasikan.

GPU modern berusaha sangat keras untuk meminimalkan tipuan memori, tetapi menjalankan PB untuk memberi makan tahap rasterisasi adalah salah satu kasus di mana itu benar-benar sulit dan tidak ada pilihan lain. Untungnya pointer mengejar membungkus blok besar yang cache dengan baik dan dialirkan ke inti.

Arsitektur lain tidak bekerja persis sama dengan PowerVR, karena bagian dari alasan PB adalah seperti itu dalam arsitektur kami adalah untuk membantu konsep peneduhan piksel yang ditangguhkan sepenuhnya yang kami terapkan, tetapi konsep umum berlaku untuk semua jenis ubin lainnya di ruang seluler yang saya tahu.

rys
sumber