这个演化过程其实没有一个“某年突然切换”的明确节点,因为移动 GPU 的 Tile 架构一直是在逐渐混合、逐渐现代化的。 但如果从主流移动 GPU 的发展来看,大概可以分成三个阶段:
1. 早期:纯 TBR(Tile-Based Rendering)
大约:
- 1990s 后期 ~ 2008 左右
代表:
- 早期 PowerVR
- MBX
- SGX 初期
- 一些早期 Mali
核心思想:
“先把场景分 Tile,再在 Tile 内渲染”
但:
- 仍然会频繁访问外部显存
- 没有完整的 Hidden Surface Removal
- 也没有真正意义上的 Tile 内 deferred shading
因此它更像:
Tile Binning + Immediate Rendering而不是现代意义的 TBDR。
当时为什么做 TBR
因为移动设备带宽极低。
那个时代:
- LPDDR 带宽很差
- 功耗极其敏感
- 外部显存访问非常贵
所以 GPU 厂商开始:
把屏幕切成小块(Tile)这样:
- Cache 命中率高
- Rasterizer 更小
- 带宽需求下降
但:
颜色/深度仍然大量写回显存。
2. TBDR 兴起(真正的 Tile Deferred)
大约:
- 2008 ~ 2016
这是移动 GPU 架构革命期。
代表:
- PowerVR SGX/Series6
- Mali Midgard
- Adreno 3xx/4xx(部分)
- Apple A7~A10 GPU
这时真正出现了:
Tile Memory(On-chip SRAM)和:
Hidden Surface Removal核心变化:
GPU 不再:
画一个像素 -> 立刻写显存而是:
整个 Tile 在片上完成:
深度测试
blending
MSAA
color
最后一次性写回显存这才是真正的:
Tile-Based Deferred Rendering
为什么叫 Deferred
这里的 Deferred 不是:
“Deferred Shading”
而是:
“延迟写回外部显存”
真正被延迟的是:
Color Buffer Store
Depth Store
MSAA Resolve不是 shader 执行本身。
这个阶段的关键技术
1. Tile Memory
GPU 内部 SRAM:
32KB
64KB
128KB保存:
- color
- depth
- stencil
- MSAA samples
2. HSR(Hidden Surface Removal)
在 Tile 内:
先知道谁最终可见
再执行 fragment大量减少 overdraw。
这是 PowerVR 当年最强的地方。
3. Transaction Elimination
如果 Tile 内容没变:
甚至不写回显存进一步省电。
3. 现代阶段:可变 TBDR / Hybrid Tile GPU
大约:
- 2017 ~ 至今
代表:
- Adreno 6xx/7xx
- Apple A11~M 系列
- Mali Valhall
- Immortalis
- Samsung Xclipse(RDNA 派生)
现在已经很难说:
“它是纯 TBDR”因为现代图形 API:
- Vulkan
- DX12
- Metal
要求 GPU 更灵活。
而传统严格 TBDR 有很多限制。
为什么纯 TBDR 不适合现代 API
因为现代 API 允许:
1. 任意 RenderPass 切换
例如:
GBuffer
-> Lighting
-> PostProcess
-> UI
-> Compute
-> CopyTexture严格 TBDR 希望:
整个 Tile 一次做完但现代 API:
经常中途打断2. Compute Shader
Compute:
- 不遵守 raster order
- 不遵守 tile 生命周期
- 任意读写 UAV
这对严格 TBDR 非常困难。
3. Framebuffer Fetch / Readback
例如:
读取之前的颜色可能迫使:
Tile Flush4. 多 Render Target
现代 deferred rendering:
4~8 MRTTile SRAM 压力暴增。
所以现代 GPU 变成了:
“Conditional TBDR”
或者:
“Hybrid Tile Renderer”
意思是:
如果你的渲染:
- RenderPass 连续
- 不中途切换 RT
- 不读 framebuffer
- MRT 不多
- 不乱用 compute
GPU:
就会表现得像经典 TBDR几乎不写显存。
但如果:
你:
- GrabPass
- Camera Stack
- Blit
- 多次 RT 切换
- Compute/UAV
- Deferred GBuffer
GPU:
就会频繁 Tile Resolve退化成:
部分 Immediate RendererAdreno 是最典型的例子
现代 Adreno:
不是纯 TBDR。
它:
“能 TBDR 时尽量 TBDR”
否则:
自动退化。
因此 Qualcomm 官方现在甚至很少直接宣传:
TBDR而更多说:
Tile-based GPU
Bandwidth optimized architectureQuest 3(Adreno 740)属于什么
Quest 3:
Meta Quest 3
其 GPU:
- Adreno 740(XR2 Gen2 变种)
属于:
Hybrid TBDR / Variable TBDR
特点:
能保 Tile 的情况
- Forward Rendering
- 单 RT
- MSAA
- Vulkan RenderPass
- URP Forward
性能极高。
会破坏 Tile 的情况
- GrabPass
- Camera Stack
- 多次 Blit
- Deferred
- SSAO
- 大量 PostFX
- UAV 写入
会导致:
Store/Reload带宽和功耗暴涨。
一个更准确的历史总结
| 时代 | 架构 | 特征 |
|---|---|---|
| 1995~2008 | TBR | Tile 分块,但仍大量写显存 |
| 2008~2016 | 经典 TBDR | Tile 内完整 deferred store |
| 2017~现在 | Hybrid/Variable TBDR | 尽量 TBDR,但动态退化 |
一个重要认知
现代移动 GPU:
已经不是:
“固定架构”而是:
“根据你的 FrameGraph 动态改变行为”
因此:
同一个 Adreno 740:
你可以:
- 写出接近纯 TBDR 的 renderer
也可以:
- 写出像 PC Immediate Renderer 一样高带宽的 renderer
区别完全在: