纹理缓存如何在基于图块的渲染GPU中工作


9

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

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


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

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

Answers:


19

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

结果,渲染接近等边三角形的三角形会更有效,因为GPU内存系统会获取纹理像素的缓存行。

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

可以说台式机GPU的行为与基于图块的GPU相同,例如以下实验所示:http : //www.g-truc.net/post-0597.html

磁贴的大小不同,但是两种架构实际上都将片段处理为不同大小的磁贴的层次结构。

在为基于图块的GPU进行编码时,我的建议始终牢记:

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

我更新了第二个项目,因为编辑不是我的意思。否则,看起来很棒!
Christophe

克里斯托弗,您好,您是说“等边”三角形而不是“等腰”吗?我会说“ Morton”顺序而不是“ Hilbert”,因为在硬件中寻址容易。
西蒙F

@Christophe谢谢!这真的很有帮助。因此,对于边界像素,纹理缓存不重要吗?这就是我所想的那种。因此,如果我有一个与图块(x,y)和(x + 1,y)相交的三角形,而GPU仅将图块(x,y)光栅化。假设下一个图块(x + 1,y)将是下一个,即使使用不同的执行单元进行处理,在为该三角形采样纹理像素时,我也不会受益于纹理缓存吗?
费利佩·里拉

另外,我对希尔伯特模式感到好奇。我一直认为这对于块压缩纹理是正确的。所有的纹理都是这样吗?PS:我也没有遵循最后一段。
Felipe Lira 2015年

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.