渲染索引基元时顶点缓冲数据的顺序重要吗?


14

我正在构建3d对象的三角形。如果我可以按照它们的计算顺序将它们写入缓冲区,它将简化CPU代码。三角形的顶点将不连续。

如果将它们写错了,是否会有性能损失?

Answers:


12

这里至少有两个因素在起作用。渲染索引基元时,GPU可以利用转换后的顶点缓存。该缓存的大小各不相同,并且在单个绘图调用中使用(据我所知,该调用不跨多个调用,因此在该上下文中更改缓冲区数据的频率无关紧要)。

如果您组织数据以利用此缓存(此处为示例算法),则可以看到性能的提高。但是,该组织与排序索引有更多关系,以便每个索引三倍地重用尽可能多的最近看到的顶点。除非您的三角形通过索引缓冲区也随机散布在缓冲区中,否则这可能与您的特定情况无关,在这种情况下,您可能经常刷新缓存。在您的问题中,我不清楚这是否是事实,因此我认为值得一提。

问题可能在于,GPU在绘制期间还会缓存对顶点数据的内存访问。的大小缓存也相当不可靠的尺寸,它是可以想象的,你可以得到在各个内核处理这些指标上高速缓存高小姐频率成非常本地化不佳的顶点数据。

至于是否不管,这将导致足够的性能问题成为应用程序中的一个危险信号,并且特别是(听起来像)重新设计算法以更好地组织数据,但以牺牲算法的可读性为代价...这不是我能回答的,您必须分析一些情况并查看。

但是,我个人会在可读性,可维护代码方面犯错误,因为我认为您将引起的任何高速缓存丢失都不会引起用户的注意。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.