在上一篇文章《【技术解析】GPU如何实现三维渲染及非图形计算?》我们已经了解了GPU工作流程以及作用,但GPU绝无这么简单。目前市场上的 GPU 主要由三家公司主导,分别是ImgTec的PowerVR系列、Qualcomm(高通)的 Adreno以及 ARM(安谋)的 Mali,其中PowerVR被苹果采用,Adreno被高通整合到骁龙SoC当中,Mali应用最为广泛,有三星Exynos、MTK Helio、Mstar等等,按渲染模式可以划分为IMR与TBR/TBDR两大流派,下面我们先从PowerVR说起。
本文引用地址:http://www.eepw.com.cn/article/201606/292810.htmPowerVR —— 延后式分块渲染架构
ImgTec(或者说 Imagination Technologies)的前身是 1985 年在英国成立的VideoLogic公司,在上世纪90年风靡一时的世嘉DreamCast游戏机就是采用该公司技术授权生产的图形处理器。
ImgTec目前旗下有多个分部,PowerVR是其中专门从事GPU、视频处理单元、摄像机知识产权内核技术开发的分公司。
PowerVR虽然从事GPU开发,但是它并不直接售卖芯片实体,而是透过授权的方式,将芯片内核技术以收取权利金的方式让第三方芯片厂商生产、销售、使用,例如苹果公司、英特尔公司、联发科、索尼等,商业模式和同样是英国公司的ARM一样。
技术内核授权方式给了芯片厂商和系统集成厂商非常高的灵活性和快速切入市场的能力,他们可以在较短的时间里就实现各种配置的灵活组合。如果你看过我前面介绍的图形流水线就知道,要做好一枚具竞争力的GPU难度是相当大的,中间涉及大量的技术积累。
像NVIDIA、AMD这样的厂商都不是突然冒出来的,他们都经历过非常惨烈的市场竞争、有业界最强大的研发团队以及与周边软件开发商经年累月的开发合作关系,现在一个新丁公司仿效NVIDIA模式贸然闯进GPU开发领域的话,如果不是手握十亿美元级规模的资金来换取技术和各种市场资源的话,恐怕连响都听不到。
在上世纪90年代末和本世纪前两年,PowerVR也在桌面市场和NVIDIA、3dfx进行过捉对厮杀,不过由于商业模式并不十分适合桌面市场,所以在仅有母公司VideoLogic(1999年更名为Imagination Technologies)推出的Kyro II后就不再踏足桌面独立显卡市场,转而全力发展嵌入式领域,从此一发不可收拾。
PowerVR在桌面独立显卡市场的最后一款产品是PowerVR3系列,原定用于Kyro III/IV的后续产品PowerVR4由于退出桌面市场,对公众而言只停留在幻灯片(上图的STG5000就是原本计划用在Kyro III的PowerVR4)中。
当然,PowerVR并没有完全退出桌面市场,他们和Intel达成了技术授权协议,英特尔可以在其集成GPU中采PowerVR MBX架构,英特尔在很长的一段时期内的集成GPU都采用了这个微架构内核。
PowerVR MBX据闻是世嘉DreamCast那枚PowerVR PCX 2的升级版,从技术资料来看的话,其实PowerVR MBX有些类似于PowerVR4,官方的PowerVR MBX白皮书里也明确写着:
4th generation tile-based deferred rendering(第四代块元式延后渲染)
从规格表来看,PowerVR MBX支持OpenGL ES 1.1,相当于OpenGL版本1.5或者DirectX 8.x的变种版。
所以,PoweVR MBX应该是和PowerVR Series 4一脉相承的,PowerVR MBX属于后者的移动版本。
什么是TBDR呢?
在前面介绍的图形渲染流水线,GPU在渲染的时候,一般是逐个三角形渲染的,如果以深度顺序来划分,可以分为从远到近(画家画法)、从近往远,开发人员可以在编写代码的时候指定渲染顺序。
如果依照在图形流水线什么阶段进行三角形排序,又可以分为sort-first、sort-middle、sort-last,middle是中间的意思,指的是从模型空间到屏幕空间这部分工位,sort-middle就是指在这段进行三角形前后顺序排序。sort-last是指在这之后进行三角形排序,sort-first是指在这之前进行三角形排序。
Sort-First一般用于多GPU渲染方案,基于片元方式的Sort-Last在目前绝大多数的GPU微架构中使用,而Sort-Middle则是PowerVR的三角形排序方案,需要在几何变换和光栅化之间进行图元的排列/分仓处理,在解决了可视性问题后再进行贴图和着色处理。
这个步骤会造成一定的延迟,加上采用了块元式渲染,所以像PowerVR这种渲染架构被称作块元式延后渲染器(Tile Based Deferred Rendering,TBDR)。
而一般的GPU被认为是看到一个三角形就马上渲染,所以被称为立即渲染器(Immediate Mode Rendering),立即渲染器也可以分为块元式(例如ARM Mali)和非块元式(例如AMD、NVIDIA “目前”的GPU)。
(IMR)
什么是TBDR?
PowerVR 微架构诞生于上世纪90年代初期,针对的是初代的三维游戏机,当时的人们希望这枚芯片的效率要尽可能地高,由于受到半导体技术的限制,所以在这时期有各种现在看来稀奇古怪的偏重于某个技术指标的芯片。
要效率高,其中一个办法就是只渲染屏幕上能看到的三角形所覆盖的片元,人们引入了名为HSR(Hidden Surface Removal,隐面消除,这里的隐面是指被其他实体多边形遮盖的多边形)来消除无效片元来实现这个目标。
(TBDR)
在TBDR的渲染流水线里,几何阶段生成(已经经过裁剪)的多边形或者说三角形参数信息都存放在一个名为Scene Buffer(场景缓存)或者Parameter Buffer(参数缓存,这是相对新近的叫法)的内存里,理论上里面保存的应该是同一帧画面里的所有三角形信息,其位置在显存里(对于采用统一内存架构的手机而言,则是和系统内存一样位于同一块物理内存上)。
这一步是TBDR独有的,相较之下,传统的GPU在几何阶段扔出到三角形后纹理单元/着色单元就马上渲染,因此人们将传统的GPU渲染方式称作立即渲染器。
这里请不要把TBDR 和延后式渲染混淆,后者是指把多个片元渲染后在进行后期处理(例如打光、模糊等效果),同样是“延后”一词,但是对应的渲染节点完全不一样。
在生成Scene Buffer的同时,PowerVR GPU内部的块元加速器会对这些三角形进行分仓(Binning)或者说筛选(sorting)处理,这个动作会依照16像素*16像素(取决于具体的GPU实现,像PowerVR PCX2可以是32*32或者32*16,PowerVR SGX 5上是16*16,“新的”PowerVR Series 6/7是32*32,这样的分块被称作块元,即Tile)的大小,将Scene Buffer中位于块元内的所有三角形的指针存放到一个对应的块元缓存(Tile Buffer)中。
对于一个大小为1920x1080的全高清屏幕,用16*16的块元大小进行切分,可以切成大约8100个块元,每个块元在“显存”中都有一个对应的块元缓存,里面存放的就是上面所说的位于块元内的三角形数据指针(指向Scene Buffer对应的三角形数据)。
所谓指针,是编程语言中的一个对象或变量,用来存储某一个地址,这个地址的值直接指向(points to)存在电脑存储器中另一块存储器空间的值。
从编程的角度而言,在这些块元缓存存放的数据结构可以称作图元列表(primtive list)。
按照PowerVR或者说ImgTec的说法,他们在新的微架构中引入了几何体压缩技术,存放在Scene Buffer的几何体数据是压缩过的,在GPU顶点内存单元读取时候再解压,这样的好处是可以显著节省存放Scene Buffer的内存空间和带宽,而这通常意味着:省电。
暂无评论哦,快来评论一下吧!