基于图块(延迟)渲染的数据结构


18

平铺渲染用于现代移动GPU架构中,通过将图像空间细分为规则的小(例如32x32像素)图块网格来增加内存访问的一致性。考虑到任意多个原始图元可能与任何给定的图块重叠,用于跟踪与每个图块关联的图元的数据结构类型的信息很少。

从驱动程序开发人员的角度来看,通常使用哪种数据结构来表示属于图块的原始集,并且这些结构是否根据与特定图块重叠的几何形状进行动态分配/调整大小?


3
这是一个非常有趣的问题,尽管我怀疑大多数细节都是秘密调味品,但对于任何想要进行研究并撰写摘要的人来说,这可能是一个很好的起点:blog.imgtec.com/powervr / ...
John Calsbeek

Answers:


11

John提到的那篇博客文章是一个不错的开始(如果我自己这么说的话!),但是还有一些额外的细节可能会有所帮助。

对于PowerVR架构,中间数据结构(也称为原始列表或参数缓冲区(PB))在所有顶点着色和切片过程完成之后,用于存储平铺数据的实际上是由硬件,而不是驱动程序。

PB的内存结构在物理上分为两个。首先,转换的顶点数据块,包括顶点属性。块是压缩的,正如您可以想象的那样,大多数情况下它们只是打包和压缩的浮点数据。内存中的第二个结构是切片数据,它实际上是列表的列表。

该数据结构中的顶层列表称为区域,对于给定的基本块,它可以一次编码一组图块而不是单个图块。因此,区域是屏幕图块,图块状态的一组位置,然后是在该区域中保存几何图形的压缩块的列表。区域是栅格化器工作的对象,您可以想象只是自动跳过了空白图块,尽管在某些情况下,栅格化器访问空白区域是有充分理由的。

在所有现代PowerVR实现中,GPU用于PB的内存都是动态分配的。驱动程序提供了指向该内存的指针,驱动程序将在GPU的帮助下根据需要调整大小。该机制是必须频繁重新分配和最小化分配的PB空间之间的权衡。

现代GPU确实尽力减少内存间接访问,但是在PB很难达到光栅化阶段的情况下,这种情况确实很困难,并且别无选择。值得庆幸的是,指针追逐封装了大块,这些大块可以很好地缓存并流式传输到内核。

其他架构与PowerVR的工作方式并不完全相同,因为PB之所以成为我们架构中的方式,部分原因是为了帮助我们实现完全延迟的像素着色概念,但是一般概念适用于PB中的所有其他tileer。我知道的移动空间。

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.