TBR架构下的Resolve:一场全屏的数据搬运每一次切换,都是两千个Tile的集体搬家

TBR架构下的Resolve:一场全屏的数据搬运每一次切换,都是两千个Tile的集体搬家 从一个问题开始有人跟你说:“TBR架构下,每次RenderPass切换,就是一次全屏的Resolve。整个帧缓冲从片上内存写到主内存,然后又从主内存读回片上内存。”你点点头,觉得自己听懂了。但你真的懂了吗?片上内存里装的是什么?一次装多少?什么时候写出去?写出去多少?下一个Pass又读回来多少?Resolve这个词到底是什么意思?让我把这个过程拆解到每一个字节。一、先搞清楚片上内存里有什么GPU正在执行一个RenderPass。渲染目标是一张1920×1080的帧缓冲。屏幕被切成了Tile。假设每个Tile是32×32像素。水平方向:1920 ÷ 32 = 60个Tile 垂直方向:1080 ÷ 32 = 33.75 → 34个Tile(最后一行不满,补齐) 总共:60 × 34 = 2040个TileGPU一次处理一个Tile。当前正在处理第42号Tile。片上内存里存着第42号Tile的全部渲染数据:颜色缓冲:32 × 32 像素 × 4字节(RGBA8) = 4,096字节 = 4KB 深度缓冲:32 × 32 像素 × 4字节(D32F) = 4,096字节 = 4KB 模板缓冲:32 × 32 像素 × 1字节(S8) = 1,024字节 = 1KB ─────────────────────────────────────────