Dengan AGI Frame Profiler, Anda dapat memeriksa setiap penerusan render yang digunakan untuk membuat satu frame aplikasi. Hal ini dilakukan dengan mencegat dan merekam semua status yang diperlukan untuk menjalankan setiap panggilan API grafis. Di Vulkan, hal ini dilakukan secara native menggunakan sistem pelapisan Vulkan. Di OpenGL, perintah dicegat menggunakan ANGLE, yang mengonversi perintah OpenGL ke panggilan Vulkan sehingga dapat dieksekusi di hardware.
Perangkat Adreno
Untuk mengidentifikasi render yang mahal, pertama-tama lihat tampilan linimasa AGI di bagian atas jendela. Ini menunjukkan semua render pass yang menyusun komposisi frame tertentu secara kronologis. Ini adalah tampilan yang sama yang akan Anda lihat di System Profiler jika Anda memiliki informasi Antrean GPU. Bagian ini juga menyajikan informasi dasar tentang render pass, seperti resolusi framebuffer yang dirender, yang dapat memberikan beberapa insight tentang apa yang terjadi dalam render pass itu sendiri.
Kriteria pertama yang dapat Anda gunakan untuk menyelidiki render pass adalah berapa lama waktu yang dibutuhkan. Render pass terpanjang kemungkinan besar akan menjadi render pass dengan potensi peningkatan terbesar, jadi mulailah dengan memperhatikan render tersebut.
Slice GPU yang terkait dengan render pass yang relevan sudah akan menyajikan beberapa informasi tentang apa yang terjadi dalam render pass:
- Pengelompokan: Tempat verteks ditempatkan ke dalam bin berdasarkan tempat verteks berada di layar
- Rendering: Tempat piksel atau fragmen diarsir
- Pemuatan/penyimpanan GMEM: Saat konten framebuffer dimuat atau disimpan dari memori GPU internal ke memori utama
Anda dapat mengetahui letak potensi bottleneck dengan melihat berapa banyak waktu yang diperlukan setiap proses ini dalam render pass. Contoh:
- Jika binning menghabiskan banyak waktu, hal ini menunjukkan bottleneck dengan data verteks yang menunjukkan terlalu banyak verteks, verteks besar, atau masalah lain yang terkait dengan verteks.
- Jika Rendering memakan sebagian besar waktu, hal ini menunjukkan bahwa bayangan merupakan bottleneck. Kemungkinan penyebab adalah shader yang kompleks, terlalu banyak pengambilan tekstur, merender ke framebuffer resolusi tinggi jika tidak diperlukan, atau masalah terkait lainnya.
Beban dan penyimpanan GMEM juga merupakan hal yang perlu diingat. Tidak mudah untuk memindahkan berbagai hal dari memori grafis ke memori utama, sehingga meminimalkan jumlah beban atau operasi penyimpanan juga akan membantu meningkatkan performa. Contoh umumnya adalah memiliki kedalaman/stensil penyimpanan GMEM, yang menuliskan buffer kedalaman/stensil ke memori utama; jika Anda tidak menggunakan buffer tersebut dalam render mendatang, operasi penyimpanan ini dapat dihapus dan Anda akan menghemat waktu render frame dan bandwidth memori.
Investigasi pass render besar
Untuk melihat semua perintah gambar individual yang dikeluarkan selama render pass:
Klik render pass di linimasa. Tindakan ini akan membuka penerusan render dalam hierarki yang ditemukan di panel Commands di Frame Profiler.
Klik menu render pass, yang menampilkan semua perintah gambar satu per satu yang dikeluarkan selama render pass. Jika ini adalah aplikasi OpenGL, Anda dapat menggali lebih lanjut dan melihat perintah Vulkan yang dikeluarkan oleh ANGLE.
Pilih salah satu panggilan gambar. Tindakan ini akan membuka panel Framebuffer, yang menampilkan semua lampiran framebuffer yang terikat selama gambar ini, dan hasil akhir gambar pada framebuffer yang terpasang. Di sini Anda juga dapat menggunakan AGI untuk membuka panggilan gambar sebelumnya dan berikutnya, serta membandingkan perbedaan di antara keduanya. Jika terlihat hampir identik, hal ini mengisyaratkan peluang untuk menghilangkan panggilan gambar yang tidak berkontribusi pada gambar akhir.
Membuka panel Pipeline untuk gambar ini akan menampilkan status yang digunakan oleh pipeline grafis untuk menjalankan panggilan gambar ini.
Input Assembler memberikan informasi tentang cara data verteks terikat ke gambar ini. Ini adalah area yang baik untuk diselidiki jika Anda melihat bahwa Binning menghabiskan sebagian besar waktu render pass Anda; di sini Anda bisa mendapatkan informasi tentang format verteks, jumlah verteks yang digambar, dan bagaimana verteks disusun di memori. Untuk informasi selengkapnya tentang hal ini, lihat Menganalisis format verteks.
Bagian Vertex Shader memberikan informasi tentang shader vertex yang Anda gunakan selama menggambar ini, dan juga dapat menjadi tempat yang baik untuk menyelidiki apakah pengelompokan diidentifikasi sebagai masalah. Anda dapat melihat SPIR-V dan GLSL yang didekompilasi dari shader yang digunakan, dan menyelidiki Uniform Buffers terikat untuk panggilan ini. Lihat Menganalisis performa shader untuk detail selengkapnya.
Bagian Rasterizer menampilkan informasi tentang penyiapan pipeline fungsi tetap yang lebih bersifat tetap, dan dapat digunakan lebih banyak untuk tujuan proses debug status fungsi tetap seperti area pandang, gunting, status kedalaman, dan mode poligon.
Bagian Fragment Shader menyediakan banyak informasi yang sama yang ditemukan di bagian Vertex Shader, tetapi khusus untuk Fragment Shader. Dalam hal ini, Anda dapat melihat tekstur mana yang terikat dan menyelidikinya dengan mengklik tuas.
Investigasi pass render yang lebih kecil
Kriteria lain yang dapat Anda gunakan untuk meningkatkan performa GPU adalah melihat grup render yang lebih kecil. Secara umum, Anda ingin meminimalkan jumlah render pass sebanyak mungkin, karena GPU memerlukan waktu untuk memperbarui status dari satu penerusan render ke render yang lain. Penerusan render yang lebih kecil ini biasanya digunakan untuk melakukan hal-hal seperti membuat peta bayangan, menerapkan blur gaussian, memperkirakan luminans, melakukan efek pascapemrosesan, atau merender UI. Beberapa di antaranya berpotensi digabungkan menjadi satu render pass, atau bahkan dihilangkan sepenuhnya jika tidak memengaruhi keseluruhan image cukup untuk menjustifikasi biaya.