Köşe ve parça gölgelendiricilerimin hızını nasıl ayrı ayrı profillendirebilirim?


11

Köşemin veya parça gölgelendiricimin işleme hattımda bir darboğaz olup olmadığını nasıl kontrol edebileceğimi bilmek istiyorum.

OpenGL komutları arasında saat kontrol noktaları elde glQueryCounteretmek için GL_TIMESTAMPhedefle kullanmayı okudum , ancak bunlar farklı gölgelendiriciler arasında ayrım yapmıyor.

Örneğin, GPU'daki bir karenin oluşturulması 8 ms sürdüyse, tepe gölgelendiricinin 7 ms sürdüğünü ve parça gölgelendiricinin 1 ms sürdüğünü söyleyebilir miyim?

Yanıtlar:


12

Köşe ve parça gölgelendiricileri sıralı olarak değil, eşzamanlı olarak çalışır ve GPU aralarında otomatik olarak dengeler yükler, bu nedenle biri için 7 ms ve diğeri için 1 ms gibi belirli zamanlamaları anlamlı olarak atamak mümkün değildir.

Bununla birlikte, darboğazın nerede olduğunu ölçmek için basit bir deney yapabilirsiniz: tüm çizim çağrılarınız için görünüm projeksiyon matrisini tüm sıfırlara ayarlayın. Bu, tüm köşe noktalarını konumları için sıfır yapar ve tüm üçgenleri dejenere eder; bu nedenle tüm köşe gölgelendiricisinin çalışmasını korurken tüm rasterleştirme ve parça gölgelemeyi kısa devre yapar (gölgelendirici derleyicisi hiçbir şeyi optimize edemez, çünkü matrisin çalışma zamanında sıfıra ayarlanacağını bilmez).

Matrisler sıfırlanmış olarak performansı ölçtüğünüzde, GPU'da eşzamanlı rasterleştirme veya parça gölgeleme çalışması olmadan yalnızca köşe gölgelendiricileri çalıştırmak için gereken süreyi göreceksiniz. Daha sonra bunu, her geçiş için normal oluşturma için gereken süre ile karşılaştırabilirsiniz. İki kez benzerse, geçiş muhtemelen yüksek oranda tepe-bağlıdır; sıfırlanmış matris oluşturma işlemi önemli ölçüde daha hızlıysa, muhtemelen piksele bağlanır. Çalışmanın ikisi arasında eşit olarak bölündüğünü gösteren bir ara sonuç elde etmek de mümkündür.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.