我优化了我们的立体声应用程序,通过将几乎所有几何体(大约1600个绘制调用)批处理到一个绘制调用(每只眼睛)来成为GPU绑定。现在我们已经受GPU限制,我想弄清楚如何提高这个单一渲染调用的GPU性能,但是,很难找出瓶颈。
在所有屏幕截图中,有问题的渲染调用是ID为91和154的渲染!
按原样渲染场景并使用Nvidia的NSIGHT(我在NVidia Geforce GTX 980上渲染)分析帧,我得到以下帧时间(注意:1& 3是感兴趣的) : 这些渲染调用每个大约需要5毫秒。
这似乎提示片段着色器是渲染调用的瓶颈。虽然我们使用的片段着色器相当复杂,但我希望它几何受限(绘制调用渲染一个带有~600和#39000三角形的索引三角形列表)。
看到这些结果,我将像素着色器替换为仅输出插值顶点法线的像素着色器。使用简单的片段着色器,帧分析器不会报告渲染调用的显着瓶颈,但是,它仍然需要相同的时间。 (以下屏幕截图使用用于渲染的简化片段着色器进行分析):
因此,在片段着色器被更简单的版本替换后,着色器阶段不再显示为瓶颈,但渲染调用仍然需要在GPU上花费相同的时间。 渲染通话的瓶颈还有什么?
为了进一步了解,这里是配置框架的硬件计数器 使用复杂片段着色器: 并使用简单的片段着色器:
我还尝试降低屏幕分辨率(任意尺寸的一半尺寸),这两者都没有导致更快的渲染调用。
任何想法如何进一步明确为什么这些渲染调用不会消耗更少的GPU时间?