linear,swizzle,tile是有些类似的三个属性,其中linear和swizzle是关于贴图的,tile是关于内存的。
linear一般是默认的,也就是贴图的texel从左上到右下一行行的存储。
swizzle是指贴图的一种属性,一般采用2x2的小quad 按照Z字型顺序来存储4个象素,类似:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
这样,这样的优势就是相邻的几个texel在内存中也是比较相邻的,当然是很有局限性的,但是相比linear已经有很大提高。
tile: 最常用于对于render target的内存设置,宗旨是让相邻的象素在内存中也是相邻的,以便提高读写效率。
它的做法有:
在一个规定大小的block中linear存放,可以看作是一种“超级”swizzle。
在有硬件支持的情况下,把block可以分成多个bank,相邻的bank放到不同的memory partition中,这样就可以让内存访问并行化。
另外就是可以进行错位设置,让depth和color不在相同bank中,也可以提高memory access 并行化。
必要情况下还需要地址转换。
速度上,tile比非tile快很多,swizzle的sample texture比linear快。