Traditional Approach
传统桌面GPU架构,通常叫做immediate mode architecture。
依次地,在每个draw call,每个primitive都执行fragment shaders。
每个primitive都完全render完后再做下一个,algorithm近似于:
foreach(primitive)
foreach(fragment)
render fragment
由于stream中的任何一个triangle可以覆盖屏幕的任何地方,所以renderer维护的data可能很大。通常至少也是有全屏大小的color buffer, depth buffer, 也许还有stencil buffer.
现在设备典型值是32 bits-per-pixel(bpp)color, 和32bpp packed depth/stencil。所以,1080p display的工作集就是16MB,4K2K TV就是64MB。这个大小决定他们必须存在DRAM以外。
每个blending,depth testing,和stencil testing操作都需要当前framgent的pixel coordinate与working set fetch。所有的fragments shaded通常会touch this working set,所以memory的bandwidth load 会很高,如果有multiple read-modify-write operations per fragment,仅能适当缓解。
Mali Approach
Mali GPU使用的方法叫做tile-based rendering,目的是,render期间最小化内存存取量。
前面说过Mali有两个rendering algorithm for each render target,
在geometry stage,Mali gpu将屏幕分为16x16 pixel tiles,然后为每个tile中present的rendering primitives都建立一个list。当进行GPU fragment shading step时,每个shader一次处理一个16x16 pixel tile,彻底render完再开始下一个,tile-based architectures the algorithm :
foreach(tile)
foreach(primitive in tile)
foreach(fragment in primitive in tile)
redner fragment
16x16 tile 知识整个屏幕的小部分small fraction,所以可以把整个tiel的working set(color, depth, stencil)保存在fast RAM中,这个RAM与GPU shader core 是tightly coupled的
未完