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

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

评论

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

#1 楼

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

对于PowerVR架构,中间数据结构-被称为原始列表或参数缓冲区(PB)-在所有顶点着色和平铺过程完成之后,存储平铺数据的实际上主要是由硬件而不是驱动程序生成和管理的。 br />
PB的内存结构在物理上分为两个。首先,转换的顶点数据块,包括顶点属性。块是压缩的,并且您可以想象它们在大多数情况下只是打包和压缩的浮点数据。内存中的第二个结构是切片数据,它实际上是列表的列表。

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

GPU用于的内存PB在所有现代PowerVR实现中都是动态分配的。驱动程序提供了指向该内存的指针,驱动程序将在GPU的帮助下根据需要调整大小。这种机制是必须频繁重新分配和最小化已分配的PB空间之间的折衷。在真正困难的情况下,别无选择。幸运的是,指针追逐封装了大块,这些大块可以很好地缓存并流式传输到内核。其他架构的工作方式与PowerVR并不完全相同,因为PB之所以成为我们架构中的方式,部分原因是为了帮助我们实现完全延迟的像素着色概念,但是一般概念适用于PB中的所有其他tileer我知道的移动空间。