AGI Frame Profiler ช่วยให้คุณตรวจสอบการส่งผ่านการแสดงผลแต่ละรายการที่ใช้ในการคอมโพสเฟรมเดียวของแอปได้ โดยจะทำเช่นนี้ด้วยการสกัดกั้นและบันทึกสถานะทั้งหมดที่จำเป็นสำหรับการเรียกใช้ Graphics API แต่ละรายการ ใน Vulkan จะดำเนินการนี้โดยใช้ระบบเลเยอร์ของ Vulkan โดยตรง ใน OpenGL ระบบจะสกัดกั้นคำสั่งโดยใช้ ANGLE ซึ่งจะแปลงคำสั่ง OpenGL เป็นการเรียก Vulkan เพื่อให้ดำเนินการในฮาร์ดแวร์ได้
อุปกรณ์ Adreno
หากต้องการระบุการแสดงผลที่ใช้เวลานาน ให้ดูมุมมองไทม์ไลน์ของ AGI ที่ด้านบนของหน้าต่างก่อน ซึ่งจะแสดง Render Pass ทั้งหมดที่ประกอบกันเป็นคอมโพสิตของเฟรมที่กำหนดตามลำดับเวลา ซึ่งเป็นมุมมองเดียวกันกับที่คุณเห็นในโปรไฟล์ระบบหากมีข้อมูลคิว GPU นอกจากนี้ยังแสดงข้อมูลพื้นฐานเกี่ยวกับ Render Pass เช่น ความละเอียดของ Framebuffer ที่กำลังแสดงผล ซึ่งอาจให้ข้อมูลเชิงลึกเกี่ยวกับสิ่งที่เกิดขึ้นใน Render Pass เอง

เกณฑ์แรกที่คุณใช้ตรวจสอบ Render Pass ได้คือระยะเวลาที่ใช้ Render Pass ที่ใช้เวลานานที่สุดมักจะเป็น Render Pass ที่มีศักยภาพในการปรับปรุงมากที่สุด ดังนั้นให้เริ่มดูที่ Render Pass นั้น

Slice ของ GPU ที่เกี่ยวข้องกับ Render Pass ที่เกี่ยวข้องจะมีข้อมูลบางอย่างเกี่ยวกับสิ่งที่เกิดขึ้นภายใน Render Pass อยู่แล้ว
- การจัดกลุ่ม: การวางจุดยอดลงในกลุ่มตามตำแหน่งที่จุดยอดอยู่บนหน้าจอ
- การแสดงผล: ตำแหน่งที่พิกเซลหรือเศษส่วนได้รับการแรเงา
- การโหลด/จัดเก็บ GMEM: เมื่อมีการโหลดหรือจัดเก็บเนื้อหาของเฟรมบัฟเฟอร์จากหน่วยความจำ GPU ภายในไปยังหน่วยความจำหลัก
คุณสามารถดูคร่าวๆ ว่าอาจมีคอขวดตรงไหนได้โดยดูว่าแต่ละขั้นตอนใช้เวลานานเท่าใดภายใน Render Pass เช่น
- หากการจัดกลุ่มใช้เวลานานมาก แสดงว่ามีคอขวดใน ข้อมูลจุดยอด ซึ่งบ่งบอกว่ามีจุดยอดมากเกินไป จุดยอดขนาดใหญ่ หรือปัญหาอื่นๆ ที่เกี่ยวข้องกับจุดยอด
- หากการแสดงผลใช้เวลาส่วนใหญ่ แสดงว่าการแรเงาเป็นคอขวด สาเหตุที่เป็นไปได้อาจเป็นเชเดอร์ที่ซับซ้อน การดึงข้อมูลเท็กซ์เจอร์มากเกินไป การแสดงผลไปยังเฟรมบัฟเฟอร์ความละเอียดสูงเมื่อไม่จำเป็น หรือปัญหาอื่นๆ ที่เกี่ยวข้อง
นอกจากนี้ คุณควรคำนึงถึงการโหลดและการจัดเก็บ GMEM ด้วย การย้ายข้อมูลจากหน่วยความจำกราฟิกไปยังหน่วยความจำหลักมีค่าใช้จ่ายสูง ดังนั้นการลดจำนวนการดำเนินการโหลดหรือจัดเก็บจะช่วยเพิ่มประสิทธิภาพได้เช่นกัน ตัวอย่างที่พบบ่อยของกรณีนี้คือการมีที่เก็บข้อมูล GMEM depth/stencil ซึ่งจะเขียนบัฟเฟอร์ความลึก/สเตนซิลไปยังหน่วยความจำหลัก หาก คุณไม่ได้ใช้บัฟเฟอร์นั้นในพาสการเรนเดอร์ในอนาคต ระบบจะยกเลิกการดำเนินการที่เก็บข้อมูลนี้ได้ และคุณจะประหยัดเวลาเฟรมและแบนด์วิดท์ของหน่วยความจำ

การตรวจสอบการส่งผ่านการแสดงผลขนาดใหญ่
หากต้องการดูคำสั่งวาดแต่ละรายการทั้งหมดที่ออกระหว่างการส่งผ่านการแสดงผล ให้ทำดังนี้
คลิก Render Pass ในไทม์ไลน์ ซึ่งจะเปิดการแสดงผลในลำดับชั้นที่อยู่ในแผงคำสั่งของโปรไฟล์เฟรม
คลิกเมนูของ Render Pass ซึ่งจะแสดงคำสั่งวาดแต่ละรายการทั้งหมดที่ออกในระหว่าง Render Pass หากเป็นแอปพลิเคชัน OpenGL คุณสามารถเจาะลึกยิ่งขึ้นและดูคำสั่ง Vulkan ที่ ANGLE ออกได้

เลือก Draw Call รายการใดรายการหนึ่ง ซึ่งจะเปิดแผง Framebuffer ซึ่งแสดงการแนบ framebuffer ทั้งหมดที่ผูกไว้ระหว่างการวาดนี้ และผลลัพธ์สุดท้ายของการวาดใน framebuffer ที่แนบ นอกจากนี้ คุณยังใช้ AGI เพื่อเปิดทั้งการเรียกใช้การวาดก่อนหน้าและถัดไป รวมถึงเปรียบเทียบความแตกต่างระหว่าง 2 รายการนี้ได้ด้วย หากภาพเกือบจะเหมือนกันทุกประการ แสดงว่ามีโอกาสที่จะขจัดคำสั่งวาดที่ไม่ส่งผลต่อรูปภาพสุดท้าย

การเปิดแผงไปป์ไลน์สำหรับการวาดนี้จะแสดงสถานะที่ไปป์ไลน์กราฟิกใช้เพื่อเรียกใช้การเรียกวาดนี้

Input Assembler จะให้ข้อมูลเกี่ยวกับวิธีผูกข้อมูลจุดยอดกับการวาดนี้ ส่วนนี้เป็นส่วนที่ควรตรวจสอบหากคุณสังเกตเห็นว่าการจัดกลุ่มใช้เวลาในการส่งผ่านการแสดงผลเป็นส่วนใหญ่ คุณจะดูข้อมูลเกี่ยวกับรูปแบบจุดยอด จำนวนจุดยอดที่วาด และวิธีจัดวางจุดยอดในหน่วยความจำได้ที่นี่ ดูข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ที่วิเคราะห์รูปแบบจุดยอด

ส่วนVertex Shader จะให้ข้อมูลเกี่ยวกับ Vertex Shader ที่คุณใช้ในระหว่างการวาดนี้ และยังเป็นจุดที่เหมาะสำหรับการตรวจสอบหากพบว่าการจัดกลุ่มเป็นปัญหา คุณสามารถดู SPIR-V และ GLSL ที่คอมไพล์แล้วของ Shader ที่ใช้ และตรวจสอบ Uniform Buffer ที่เชื่อมโยงสำหรับการเรียกนี้ ดูรายละเอียดเพิ่มเติมได้ที่วิเคราะห์ประสิทธิภาพของ Shader

ส่วนRasterizer จะแสดงข้อมูลเกี่ยวกับการตั้งค่าไปป์ไลน์แบบฟังก์ชันคงที่ มากขึ้น และใช้เพื่อวัตถุประสงค์ในการแก้ไขข้อบกพร่องของ สถานะฟังก์ชันคงที่ เช่น Viewport, Scissor, สถานะความลึก และโหมดรูปหลายเหลี่ยม ได้มากขึ้น

ส่วนโปรแกรมเชดเดอร์เศษส่วนมีข้อมูลจำนวนมากที่เหมือนกับในส่วนโปรแกรมเชดเดอร์จุดยอด แต่จะเจาะจงสำหรับโปรแกรมเชดเดอร์เศษส่วน ในกรณีนี้ คุณจะเห็นว่ามีการเชื่อมโยงพื้นผิวใดอยู่ และ ตรวจสอบได้โดยคลิกที่แฮนเดิล

การตรวจสอบการส่งผ่านการแสดงผลขนาดเล็ก
อีกเกณฑ์หนึ่งที่คุณใช้เพื่อปรับปรุงประสิทธิภาพของ GPU ได้คือการดูกลุ่มการส่งผ่านการแสดงผลขนาดเล็ก โดยทั่วไปแล้ว คุณควรลดจำนวนการส่งผ่านการแสดงผลให้เหลือน้อยที่สุด เนื่องจาก GPU ต้องใช้เวลาในการอัปเดตสถานะจากการส่งผ่านการแสดงผลหนึ่งไปยังอีกการส่งผ่านหนึ่ง โดยปกติแล้ว Render Pass ขนาดเล็กเหล่านี้จะใช้เพื่อทำสิ่งต่างๆ เช่น สร้างแผนที่เงา ใช้ Gaussian Blur ประมาณค่าความสว่าง ใช้เอฟเฟกต์หลังการประมวลผล หรือแสดงผล UI โดยอาจรวมบางส่วนเหล่านี้ไว้ใน Render Pass เดียว หรืออาจนำออกทั้งหมดหากไม่ส่งผลต่อภาพรวมมากพอที่จะคุ้มค่า
