※ 引述《KotoriCute (Lovelive!)》之铭言:
: http://news.mydrivers.com/1/493/493738.htm
我去查了原文 , 他是说Maxwell采用的是Tile-Based Immediate Rendering
不过既然讲到Tile Based Rendering,
就可以顺便提一下历史上的PowerVR
PowerVR 1 = Matrox M3D
PowerVR 2 -> Sega Dreamcast,Naomi
PowerVR 3 = Kyro (PC独立显卡)
然后就从NEC手中被英国公司Imagination收购,
这家公司又刚好在ARM对面.最后PowerVR和ARM
也联手也分别打下Mobile市场
PowerVR虽然是最早以Tile Based Rendering命名技术的
不过他的做法因为后来又出现其他种Tile Based Rendering,
所以比较精确指称的话,他可以称为Tile Based Deffered Rendering
相对的后来其他家不太一样,也叫自己为Tile Based Rendering的做法就有差
所以本文后面除非回到历史名词,不然会以TBDR代称PowerVR的技术
TBIR代称其他家的TBR.
那TBDR最重要的是Deferred Rendering,意思是说,画面上通常会有很多个物件
没有画以前会有重叠的可能,传统做法是一个相关的物件一起画,但可能A画好,
B又把他盖掉,等于浪费掉了(overdraw)
所以能早点知道B在A前面,就直接先画B,再画A没被盖到的部分,
这样最节省频宽.PowerVR会切成小Tile再排序A和B谁在前面,
确保一定先画前面
http://img.tomshardware.com/us/2001/04/25/a_speedy_tiler/tbr_texturing.gif
NV30和Radeon 200以后的GPU,基本上也有作TBR的情况,只是不以
Deferred Rendering的方式,而是EarlyZ/HyperZ,提早在pipeline前端
切掉超过范围的东西.......算了 早点进入主题
现代GPU普遍的使用Tile Based Rendering,但他可能是基于其他理由.
根据实验,Intel 的Haswell GPU的绘图顺序如此图
http://i.imgur.com/y5gJL63.png
这个是把Pixel绘图的顺序,变成B+G+R的颜色.
也就是Pixel 1就是(0,0,1),Pixel 255就是(0,0,255),
Pixel 65535就是(0,255,255)
可以看出 他绘图的顺序是8x8个pixel为一个小单元,然后小单元之间
像是贪食蛇这样连接,而不是单纯以X,Y轴为顺序
这样是做什么?
我们把情况简化,假设萤幕总分辨率是4x4
如果最传统的图学,资料顺序是
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
当我们照这个顺序的时候,有很多机会 你要去查邻近的Pixel是什么颜色
7如果查旁边6/8两个 还算连续,3/11就跟你不连续了
如果你是1080P的画面 已经在几百kB外的资料了
但内存传递可以是连续的,一次很多,那如果能传进来的时候,
同时把你四周的点都准备好 那可能会比较省时间
从2x2来看
1 2
3 4 好像随便排都很近
把这想法先扩大一倍看看
1 2 5 6
3 4 7 8
9 10 13 14
11 12 15 16
至少我保证只要一次传4个pixel,有一半的机会你的邻居也好了
如果不这样做就是
1 2 3 4 当你要查6的时候,要等下次
5 6 7 8
9 10 11 12
13 14 15 16
类似的实行法不只上面那个,我举的这种叫做Z-ORDER CURVE
wiki上有图示会比较清楚
https://en.wikipedia.org/wiki/Z-order_curve
还有比较复杂的比如Hilbert Curve
https://en.wikipedia.org/wiki/Hilbert_curve
那么 综合而言,TBIR(如果不考虑舍弃overdraw的三角面)
是打算达成什么效果呢?
1.先将要画图的画面,切成N*N的pixel的方块 一次进入显示卡的
Pipeline或者同一单位的Shader群绘制
为什么?因为缩减了范围,Data Locality相对提高
针对贴图的Cache命中率就会高很多
2.不同Tile的顺序是以Z-order Curve或者Hilbert Curve等顺序完成
这可以得到两个效果
A.由内存连续送进来的东西比较有机会是你会用到的
反之也可以说是 你和你的邻居可以被打包成一次传送
B.你要重新查询隔壁的东西 他很有机会还在Cache中没被挤出去
不用再读取一次
3.(顺便的) 贴图的储存顺序也会照同一个方式储存
如果说要用这种方式储存
那内存位置跟X,Y轴的对应关系就变得很复杂了
所以所有相关的电路都会因此多花费电晶体但省掉内存频宽
事实上GPU的进步中这是很常见的事情 用更多的电晶体
换更少的内存频宽消耗量,内存频宽才是有限资源.
如果要说有无采用TBIR,我认为目前的AMD/nVidia/Intel/ARM GPU都是
并不是nVidia专属,当然这个东西也不影响画出来的效果,不属于任何
投机的范围
(ARM有一个专利 因为TBR有Tile,可以数出已经画了画面上的百分之多少,
如果已经超额完成任务 可以把GPU的内存存取暂停让给CPU使用.
另外Samsung和nVidia也有申请TBR的相关专利....)
==
补充:PowerVR败退自PC原因是因为自身的TBDR,虽然省了内存频宽
但需要较多的内存量 成本优势有限 加上TBDR会在透明色/多重贴图/
Vertex Shader的情况有较多劣势....
但成为Mobile GPU无可跨越的霸主也可算是在TBDR.
因为Mobile GPU实在是无法浪费多少电给你在内存频宽上