ฉันจะกำหนดความเร็วของจุดสุดยอดและชิ้นส่วนแยกของฉันได้อย่างไร


11

ฉันต้องการทราบว่าฉันสามารถตรวจสอบเพื่อดูว่าจุดสุดยอดของฉันหรือชิ้นส่วน Shader ของฉันเป็นคอขวดในท่อแสดงผลของฉัน

ฉันได้อ่านเกี่ยวกับการใช้glQueryCounterกับGL_TIMESTAMPเป้าหมายเพื่อรับจุดตรวจสอบสัญญาณนาฬิการะหว่างคำสั่ง OpenGL แต่สิ่งเหล่านี้ไม่ได้แยกความแตกต่างระหว่างประเภทของเฉดสี

ตัวอย่างเช่นหากหนึ่งเฟรมบน GPU ใช้เวลาในการเรนเดอร์ 8 มิลลิวินาทีฉันสามารถบอกได้หรือไม่ว่าตัวแบ่งยอดใช้เวลา 7 มิลลิวินาทีและแฟรกเมนต์ตัวแบ่งใช้ 1 มิลลิวินาที

คำตอบ:


12

Vertex และ Fragment Shader ทำงานพร้อมกันไม่ใช่ตามลำดับและ GPU จะทำการโหลดบาลานซ์โดยอัตโนมัติระหว่างกันดังนั้นจึงไม่สามารถกำหนดเวลาเฉพาะเช่น 7 ms สำหรับหนึ่งและ 1 ms สำหรับอีกอันหนึ่งได้

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

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.