Sine.

移动端GPU的演变

梳理移动 GPU 从 TBR、经典 TBDR 到现代 Hybrid Tile Renderer 的演变,并说明 RenderPass 组织对带宽的影响。

这个演化过程其实没有一个“某年突然切换”的明确节点,因为移动 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 Flush

4. 多 Render Target

现代 deferred rendering:

4~8 MRT

Tile 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 Renderer

Adreno 是最典型的例子

现代 Adreno:

不是纯 TBDR。

它:

“能 TBDR 时尽量 TBDR”

否则:

自动退化。

因此 Qualcomm 官方现在甚至很少直接宣传:

TBDR

而更多说:

Tile-based GPU
Bandwidth optimized architecture

Quest 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~2008TBRTile 分块,但仍大量写显存
2008~2016经典 TBDRTile 内完整 deferred store
2017~现在Hybrid/Variable TBDR尽量 TBDR,但动态退化

一个重要认知

现代移动 GPU:

已经不是:

“固定架构”

而是:

“根据你的 FrameGraph 动态改变行为”

因此:

同一个 Adreno 740:

你可以:

  • 写出接近纯 TBDR 的 renderer

也可以:

  • 写出像 PC Immediate Renderer 一样高带宽的 renderer

区别完全在:

RenderPass 组织方式。