GPU 架构类型详解:即时模式渲染 vs 基于图块的渲染

GPU architecture types explained – RasterGrid | Software Consultancy

一、两种主要 GPU 架构概述

GPU 厂商在实现标准图形管线时采用了不同的加速策略,形成了两大主要架构类型:

  • 即时模式渲染(Immediate-Mode Rendering, IMR) :传统的 GPU 架构
  • 基于图块的渲染(Tile-Based Rendering, TBR) :将帧缓冲空间分割成小图块进行处理

两者在 前端阶段与后端阶段之间传递图元数据的方式 以及 访问帧缓冲数据的方式 上存在根本性差异。


二、即时模式渲染(IMR)

2.1 管线流程

IMR GPU 几乎 逐字实现 图形 API 所描述的逻辑管线:

  1. 绘制命令触发几何工作负载 :生成待处理的顶点(附带图元连接信息)
  2. 几何处理阶段 :顶点着色、曲面细分、几何着色(或 Mesh Shading)
  3. 图元裁剪与变换 :剔除/裁剪后变换到帧缓冲空间,送入 光栅化器
  4. 片段处理 :光栅化产生的片段经过逐片段操作和片段着色器处理
  5. 颜色写入 :最终片段的颜色值写入对应的 颜色附件(Color Attachments)

2.2 核心特征

  • 单遍处理 :整个绘制命令在 GPU 上一次性处理完成
  • 所有资源通过传统的 缓存辅助内存事务 访问
  • 前端(图元组装)和后端(光栅化)之间需要某种 片上缓冲区 ,以处理几何与片段工作量之间的非均匀比率(一个图元可能覆盖帧缓冲中任意大的区域)
  • 现代 GPU 使用 统一着色器核心(Unified Shader Cores) ,可灵活分配几何与片段处理工作

三、基于图块的渲染(TBR)

3.1 管线流程(两阶段)

TBR GPU 将帧缓冲空间分割为 等大的矩形区域(Tiles) ,后端阶段在每个图块上 独立执行

第一阶段(几何处理 + 图元分箱):

  1. 传统的图元组装被替换为 图元分箱阶段(Primitive Binning)
  2. 经过剔除的图元被累积到一个或多个 箱(Bins) 中,取决于它们与渲染区域内哪些图块重叠

第二阶段(逐图块处理):

  1. Tile Load :将对应图块的帧缓冲附件数据加载到 专用片上存储(On-Chip Tile Memory)
  2. 光栅化 + 片段处理 :对箱中的图元进行光栅化和片段处理,读写帧缓冲数据时 访问片上存储 而非外部内存
  3. Tile Store :将修改过的帧缓冲数据从片上存储 写回内存

3.2 图块大小

  • 典型的图块大小非常小,如 16×1632×32 像素
  • 实现可能 动态选择图块大小 ,取决于子通道使用的帧缓冲附件的像素大小
  • 图块大小 × 所有帧缓冲附件的每像素总大小 = 所需的片上图块内存总量

四、算法对比(伪代码)

IMR 算法(单阶段)

for framebuffer/subpass in pass:
  for draw in subpass:
    for primitive in draw:
      process(primitive/vertices)
      rasterize(primitive)
      for fragment in primitive:
        process(fragment)

TBR 算法(两阶段)

# 第一阶段:几何处理 + 分箱
for framebuffer/subpass in pass:
  for draw in subpass:
    for primitive in draw:
      process(primitive/vertices)
      bin(primitive)

# 第二阶段:逐图块处理
for tile in renderarea:
  for framebuffer/subpass in pass:
    load(framebuffer tile)
    for primitive in bin:
      rasterize(primitive)
      for fragment in primitive:
        process(fragment)
    store(framebuffer tile)

Compute Shader 类比

可以将 TBR 算法的两阶段想象为两次 Compute Shader Dispatch:

  • 第一次 Dispatch :在整个渲染通道的图元域上运行,每个调用处理一个图元及其顶点,并将其追加到图元重叠的每个图块缓冲区
  • 第二次 Dispatch :在渲染区域的像素域上运行,每个工作组覆盖一个图块,使用 Shared Memory 作为片上图块内存,加载帧缓冲数据、处理图元、存储结果

TBR GPU 的 片上图块内存 很可能与 Compute Shader 的 Shared Memory 使用相同的物理片上存储。


五、数据路径与带宽分析

5.1 IMR 的数据路径

  • 所有应用数据通过 不同类型的缓存 访问
  • 帧缓冲附件通过 RB 缓存(Render Backend Cache) 访问,包含每个 ROP 单元私有的颜色和深度/模板缓存
  • 整个管线在单阶段运行,通过 片上图元缓冲区 将图元数据从固定功能的图元组装推送到光栅化器

5.2 TBR 的数据路径

  • 图元数据在第一阶段被写入 片外(Off-Chip)的逐图块图元箱
  • 后端阶段以图块为单位运作,所有帧缓冲数据(颜色、深度、模板)加载后 驻留在片上图块内存
  • 片段处理的所有读写操作 不需要访问片外内存
  • Shader 的其他读写(纹理等)仍通过标准 GPU 着色器数据缓存层级访问

5.3 带宽权衡的量化分析

关键问题 :TBR 写入图元数据到片外箱的额外带宽 vs. IMR 对帧缓冲附件的反复读写带宽

简单估算

  • 每顶点约 10 字节 (16-bit X/Y/Z + 2×16-bit 纹理坐标)
  • 每三角形最优约 10 字节 (所有顶点与相邻三角形共享时)
  • 每像素约 6 字节 (32-bit LDR 或 10-bit HDR 颜色 + 16-bit 深度)
  • 需结合 图元与像素的比率 来评估哪种架构更高效

但实际情况更复杂

  • TBR 通常每个被触及的图块需要一次加载/存储,需要 一定程度的过度绘制(Overdraw) 才能摊销 Tile Load/Store 的成本
  • IMR 的 RB 缓存效率 同样可以摊销帧缓冲读写成本——GPU 越大、ROP 单元越多,缓存命中率越高
  • 两种架构都使用 无损压缩(Lossless Compression) 来减少带宽消耗

六、延迟属性着色(Deferred Attribute Shading / Vertex Shader Splitting)

这是 TBR GPU 用于减少逐图块图元箱带宽的重要技术:

6.1 核心思想

  • 分箱阶段 仅依赖顶点位置 来决定图元属于哪个图块
  • 第一阶段 只执行几何处理中确定帧缓冲空间位置的部分(以及可能的裁剪距离等)
  • 只有 索引数据(可能加上位置数据) 写入逐图块图元箱
  • 其余的逐顶点/逐图元输出计算 延迟到第二阶段执行

6.2 权衡

  • 优势 :大幅减少片外带宽(尤其是使用大量插值器的着色器)
  • 劣势 :导致同一顶点在不同图块间 冗余处理 ,且顶点缓冲访问模式可能 缓存不友好

6.3 实践建议

将影响位置的顶点属性放在与其他属性不同的缓冲区中 ,即使其余属性使用交错布局。这不仅有利于延迟属性着色的硬件,也有利于 深度预通道(Depth Pre-Pass)阴影贴图生成 等几何专用通道。

6.4 IMR 同样可受益

延迟属性着色 并非 TBR 独有 ——减少前端到后端传输的逐图元数据量、在剔除后延迟几何处理,在任何架构上都可能是性能提升。


七、几何复杂度的影响

经验法则

几何复杂度越高,IMR GPU 越可能优于 TBR GPU。

这解释了:

  • 移动设备虽然能驱动高分辨率渲染和精美像素效果,但 几何细节通常显著低于桌面平台
  • 曲面细分(Tessellation) 等大幅增加图元数量的特性在实践中 主要适用于桌面系统

片段着色器的内存访问主导 外部内存流量时(如复杂材质需要大量高分辨率纹理),两种架构的差异 缩小 ,不过 TBR 由于图块化光栅化固有的严格处理顺序,可能在空间局部性方面仍有优势。


八、关键用例分析

8.1 隐藏面消除(Hidden Surface Removal)

IMR 方式

  • 依赖 深度测试 尽早拒绝被遮挡像素
  • 早期深度测试(Early Depth Test) :大多数情况下深度测试可在片段着色前执行
    • 例外 :片段着色器修改深度值或使用 discard,会将深度写入推迟到 Late Per-Fragment Operations
    • 使用 保守深度(Conservative Depth) 声明可让修改深度值的着色器仍受益于早期测试
  • Hi-Z(层次深度缓冲) :允许在细粒度光栅化之前拒绝大组片段(整个"图块")
  • 最佳效果 :几何体按 从前到后(Front-to-Back) 顺序提交

TBR 方式

  • 帧缓冲读写不是问题(数据在快速片上内存中),但避免不必要的 片段着色器调用 同样重要
  • 分箱阶段优化 :可使用类似 Hi-Z 的技术,避免将被已有图元遮挡的图元写入箱中,节省箱读写带宽
  • 图元排序 :可在分箱或光栅化期间部分或完全地 前后排序图元
  • 像素完美的隐藏面消除(Pixel-Perfect HSR) :某些 TBR GPU 可保证每个像素在整个子通道中 只被着色一次 ,甚至 无需深度缓冲

8.2 2D 合成(2D Compositing)

IMR 方式

  • 没有太多针对 2D 合成的专门优化
  • 通常使用 从后到前(Back-to-Front) 渲染 + 混合
  • 可结合裁剪、丢弃矩形、模板缓冲等辅助手段

TBR 方式

  • 2D 合成是 TBR 的 强项 :低几何-像素比 + 保证片上混合
  • 部分解释了 为何低功耗和能量受限环境偏好 TBR 架构

关于混合(Blending)的差异

  • IMR :使用专用固定功能硬件,需确保散布在不同着色器核心上的重叠图元片段按正确顺序混合,实现上 不平凡
  • TBR :所有覆盖特定图块的图元在"同一位置"按顺序处理,天然支持 可编程混合(Programmable Blending) ——片段着色器可直接读写对应帧缓冲像素。标准 API 混合甚至可能通过驱动 向片段着色器注入混合代码 来实现

8.3 多重采样(Multisampling)

IMR 方式

  • 当所有样本颜色相同时(常见情况),只存储一次颜色值 + 元数据 标记哪些样本使用该值
  • 通过 压缩 大幅减少内存带宽消耗

TBR 方式——更进一步

  • 尝试 完全避免在内存中存储多重采样图像
  • 多重采样数据 仅存在于片上图块内存
  • 使用 瞬态附件(Transient Attachments) :多重采样帧缓冲附件永远不从内存加载或存储到内存,甚至 不消耗外部内存
  • Tile Store 时直接在片上将多重采样数据解析(Resolve)为单采样图像 写入内存
  • 前提:多重采样数据 不需要跨渲染通道/帧保留

8.4 延迟渲染(Deferred Rendering)

长期误解 :延迟渲染不适合 TBR GPU——实际上 恰恰相反

  • 如果几何通道和延迟通道在 同一个渲染通道 中:
    • G-Buffer 数据写入片上图块内存
    • 延迟通道直接消费片上的 G-Buffer 数据
    • G-Buffer 数据可能永远不需要离开 GPU 芯片
    • 省去了通常作为性能瓶颈的 G-Buffer 写入和多次读取的外部内存带宽

8.5 阴影贴图与反射贴图(Shadow/Reflection Maps)

这是 TBR 的弱点

  • IMR :虽不特别"喜欢"渲染结果立即在下一子通道使用的场景(可能导致 管线气泡 ),但处理方式与其他工作负载无异。深度专用渲染可被 ROP 单元极快完成。
  • TBR
    • 即使是深度专用渲染也需将几何数据写入内存并由光栅化器消费
    • 产生的帧缓冲数据需从片上图块内存 刷新到内存 ,然后下一个需要将该图像映射到几何体的渲染通道才能开始
    • 几乎消除了 TBR 的大部分优势
    • 每生成一个阴影/反射贴图还需再次将场景几何推送到管线,加重 TBR 的主要瓶颈

这就是为什么主要面向 TBR GPU 的应用通常 较少使用依赖渲染到纹理的效果


九、TBR 的其他限制与注意事项

9.1 图元箱存储(Primitive Bin Storage)问题

  • 驱动需要确定整个渲染通道所需的 几何存储量
  • 简单情况(最终图元数可预测)下只需记录绘制调用的图元/顶点计数
  • 复杂情况 :管线内几何放大(曲面细分、几何着色)或间接绘制可能导致 无法预测输出图元数
  • 若图元箱存储超出实际限制或无法估算,驱动被迫 将渲染拆分为多个渲染通道 ,可能 消除 TBR 的所有优势
  • 即使在 Vulkan(有显式 Render Pass 构造)中,驱动也可能在内部将单个 Render Pass 对象拆分为多个

9.2 其他导致渲染通道拆分的情况

  • 帧缓冲附件过多或过大 (每像素字节数高)
  • 需要在子通道间 保留 的附件过多
  • 即使不做完整拆分,也可能导致 渲染通道内部分图块存储和重新加载

9.3 反馈环路(Feedback Loops)

  • Transform Feedback、Occlusion Queries、间接绘制、渲染到纹理 等包含后端到前端依赖的反馈环路
  • IMR 上也有开销,但 在 TBR 上影响远更严重

9.4 总结

TBR 架构提供许多潜在优势,但 对内容更加敏感 ,需要开发者仔细关注以命中其最佳工作点。IMR 架构通常 "直接就能工作得不错" (虽然高效的 API 使用在两种架构上都至关重要)。


十、混合架构(Hybrid Architectures)

10.1 双模式 GPU

  • 最简单的混合架构:GPU 能同时 以 IMR 和 TBR 模式运行 ,驱动可为特定工作负载选择最佳模式

10.2 基于图块的即时模式渲染(Tile-Based Immediate-Mode Rendering)

代表 :NVIDIA 自 Maxwell 架构起采用的方式

工作原理

  • 并非传统 TBR——当图元数量增加时,并非所有图元都在一个图块内光栅化完毕后再切换到下一个图块
  • IMR GPU 实际上也以"类图块"方式工作:基于帧缓冲空间位置将工作发送到特定 ROP 单元以最大化 RB 缓存命中率
  • 该混合架构本质上是:片上缓冲传入的图元,智能调度它们到各 ROP 单元 ,在切换到另一个图块之前先耗尽特定图块对应的所有缓冲图元

能力边界

  • ✅ 在低图元数用例(2D 合成、后处理、贴花、粒子效果)中可实现类似 TBR 的优势
  • ✅ 总体上提供性能提升
  • 不提供 整个渲染通道级别的 TBR 优势(像素完美隐藏面消除、片上多重采样、片上延迟渲染),因为图块化光栅化只在小窗口的图元上发生(取决于片上图元缓冲区大小),而真正的 TBR 使用大型片外缓冲区

十一、总结与展望

维度IMRTBR
帧缓冲访问通过 RB 缓存(受缓存效率限制)片上图块内存(带宽几乎免费)
几何数据传递片上缓冲区(无额外带宽)片外图元箱(有额外带宽成本)
高几何复杂度✅ 优势❌ 瓶颈
2D 合成/混合一般✅ 优势
多重采样压缩优化✅ 片上仅存在,带宽极低
延迟渲染G-Buffer 带宽大✅ G-Buffer 可留片上
阴影/反射贴图正常处理❌ 丧失 TBR 大部分优势
内容敏感度较低较高

核心认知

GPU 架构 没有免费午餐 。两种架构都在管线的一个部分牺牲性能以换取另一部分的性能提升。未来不太可能所有 GPU 收敛到某一种架构,而是各在最受益于其特定权衡的系统中继续使用。

趋势

  • 可能看到更多 混合架构 出现在附加硬件成本合理的系统上
  • 图形 API 将继续引入 显式机制 (如 Vulkan 的 Render Pass API)以更直接、有效地利用特定 GPU 特性,减少对驱动猜测的依赖,从而实现更可预测的渲染性能