缓存如何与基于图块的渲染一起工作?

有什么技巧可以提高缓存命中率吗? (例如,如果瓦片是水平处理的,并且我具有相同纹理的三角形的垂直部分,那么与缓存水平排列的三角形相比,它对缓存的工作效果是否更差?)

评论

三角形的垂直与水平布局是什么意思?

@Mokosha对不起,这在某种程度上引起了我的注意。我现在看到了。这是一个理论上而不是实用上的问题,我什至不知道现在是否有意义。无论如何,我的意思是说一个三角形与图块(x,y)和(x + 1,y)相交,并且这两个图块被一个接一个地处理。与如果我有一个三角形相交(x,y)和(x,y + 1)相比,纹理缓存会更好吗? (由于边界像素和三角形的布局与图块处理的方向不同)

#1 楼

无论它是不是基于图块的GPU都不会真正影响纹理缓存体系结构。纹理的内存布局在所有GPU中看起来都像是莫顿阶数或希尔伯特曲线。

因此,渲染接近等边三角形的三角形会更有效,因为GPU内存系统会获取缓存

因此很明显,在图块边框上,可能需要两次提取纹理素。由于贴图边框仅是“很少”的像素,因此成本较低。

可以说台式机GPU的性能与基于贴图的GPU相同,如以下实验所示: g-truc.net/post-0597.html

磁贴的大小不同,但是两种架构实际上都将片段处理成不同大小的磁贴的层次结构。对于基于图块的GPU,我的建议始终牢记:


除非确实需要,否则不要切换帧缓冲对象。
绑定新的帧缓冲对象时,如果不需要保存当前帧缓冲区的内容,将其丢弃。如果不想加载新的帧缓冲区的内容,则应清除帧缓冲区。


评论


$ \ begingroup $
我更新了第二项,因为编辑不是我的意思。否则,看起来很棒!
$ \ endgroup $
–克里斯托弗(Christophe)
2015年9月1日23:15在

$ \ begingroup $
Christophe,您是说“等边”三角形而不是“等腰”吗?我会说“ Morton”顺序而不是“ Hilbert”顺序,因为在硬件中寻址更容易。
$ \ endgroup $
–西蒙F
2015年9月2日,11:04



$ \ begingroup $
@克里斯托夫,谢谢!这真的很有帮助。因此,对于边界像素,纹理缓存不重要吗?这就是我所想的那种。因此,如果我有一个与图块(x,y)和(x + 1,y)相交的三角形,而GPU仅将图块(x,y)光栅化了。假设下一个图块(x + 1,y)将是下一个,即使使用不同的执行单元进行处理,在为该三角形采样纹理像素时,我也不会受益于纹理缓存吗?
$ \ endgroup $
–Felipe Lira
2015年9月2日于12:57

$ \ begingroup $
另外,我对希尔伯特模式感到好奇。我一直认为这对于块压缩纹理是正确的。所有纹理都适用吗? PS:我也没有遵循最后一段。
$ \ endgroup $
–Felipe Lira
2015年9月2日于13:00

$ \ begingroup $
PVRTC以莫顿顺序编码纹理块
$ \ endgroup $
–ashleysmithgpu
2015年9月7日在19:09