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 เดียว หรืออาจนำออกทั้งหมดหากไม่ส่งผลต่อภาพรวมมากพอที่จะคุ้มค่า