3. GPU核心架构与渲染管线

R-Car SoC中的GPU并非独立显卡,而是通过内部总线与显示控制器、视频编解码器、内存控制器紧耦合的IP模块。以R-Car H3/M3为例,其图形子系统通常集成Imagination PowerVR Series6XT/GE系列(如GX6650)或ARM Mali-T系列(如Mali-T624/T628),两者都采用Tile-Based Deferred Rendering(TBDR)或Tile-Based Rendering(TBR)架构。理解GPU如何把顶点数据变成屏幕像素、再通过显示控制器输出到多块屏幕,是后续多屏合成、带宽优化和延迟调优的基础。

一、GPU在R-Car中的集成位置

GPU位于SoC的图形子系统内,一侧通过AXI/ACE主端口连接系统总线与DDR控制器,另一侧通过显示子系统接口与DU(Display Unit)或VSP(Video Signal Processor)相连。典型数据通路是:应用层通过OpenGL ES/Vulkan驱动提交命令 → GPU前端取顶点 → 几何处理 → 分块光栅化 → 像素着色 → 写回帧缓冲(位于DDR) → 显示控制器读取帧缓冲 → 输出到LVDS/HDMI/DP。GPU与DU之间并不直接点对点传输像素,而是通过DDR中的帧缓冲间接交换,因此内存带宽和缓存一致性对多屏性能影响极大。

二、顶点处理与像素处理流程

GPU渲染管线可分为几何阶段和光栅阶段。几何阶段包括顶点着色器(Vertex Shader)、曲面细分(Tessellation,部分架构支持)、几何着色器(可选)和裁剪/透视除法/视口变换。顶点着色器对每个顶点执行MVP矩阵变换、法线变换、骨骼动画等;输出裁剪空间坐标和可变参数。随后进行图元装配、背面剔除、视锥裁剪,再进入屏幕映射。

光栅阶段以像素或片元为单位:三角形被离散为片元,片元着色器执行纹理采样、光照计算、阴影、后处理等;之后经过深度测试、模板测试、混合,最终写入颜色缓冲。PowerVR的TBDR会在片元着色前先做隐藏面消除(HSR),把被遮挡的片元提前丢弃,从而减少无效着色;Mali的TBR则先分块再做逐块着色,但HSR能力因型号而异。两者共同点是:把屏幕划分为小Tile(常见16×16或32×32像素),在片上高速缓存中完成一个Tile的着色后再写回DDR,从而大幅降低外部内存访问。

三、Tile-Based渲染原理

TBDR/TBR的核心是“分块—列表—逐块渲染”。几何阶段结束后,GPU把每个三角形按覆盖的Tile记录到图元列表(Primitive List / Parameter Buffer)中,每个Tile维护自己的三角形索引。随后逐Tile调度:从DDR读取该Tile的图元列表,在片上Tile Memory中完成光栅化、深度测试和着色,最后把颜色值一次性写回帧缓冲。这样,深度缓冲和颜色缓冲的中间读写都发生在片上,DDR只承担图元列表读取和最终颜色写回。

这种架构的代价是:几何阶段必须完整保存图元列表,若场景三角形过多,图元列表会占用大量DDR带宽;同时,若着色器需要读取相邻像素(如模糊、景深),Tile边界可能造成重复计算。因此实际工程中要控制每帧三角形数量、避免过大的后处理核、合理使用glDiscardFramebufferEXT或Vulkan的loadOp=DONT_CARE来跳过Tile Memory回写。

R-Car GPU 渲染管线与显示数据通路(Tile-Based) 应用 / 引擎 OpenGL ES / Vulkan GPU 驱动 命令缓冲 / 描述符 几何阶段 顶点着色器 → 裁剪 → 屏幕映射 → 图元列表 Tile 调度 16×16 / 32×32 分块 逐块读取图元列表 像素阶段 片元着色 / 纹理采样 深度测试 / 混合 HSR 隐藏面消除 片上 Tile Memory 颜色 / 深度 / 模板 中间结果不回写 DDR 仅最终颜色写回 DDR 帧缓冲 多图层 / 多屏缓冲 图元列表 + 颜色缓冲 显示控制器 DU/VSP 图层合成 / 色彩空间转换 时序生成 / 双缓冲切换 显示输出 LVDS / HDMI / DP 多屏独立时序 最终颜色写回 读取帧缓冲 关键工程要点: • 几何阶段图元列表占用 DDR 带宽,三角形数量需控制;Tile 越大片上缓存压力越大,越小则调度开销越高。 • 后处理若跨 Tile 边界会重复读取,建议限制核尺寸或使用 compute shader 分块处理;多屏时各 DU 独立读取帧缓冲,需预留带宽。 • 使用 loadOp=DONT_CARE / glDiscardFramebufferEXT 可跳过 Tile Memory 回写,降低 DDR 流量与功耗。

四、与显示控制器的数据通路

GPU完成渲染后,颜色缓冲位于DDR。显示控制器(R-Car中为DU或VSP)通过DMA读取帧缓冲,进行图层叠加、色彩空间转换(如YUV→RGB)、Gamma校正和时序生成,再输出到LVDS、HDMI或DP接口。多屏场景下,每个显示通道有独立的帧缓冲和时序参数,GPU需要为每块屏分别渲染或合成。若使用硬件合成器(如VSP),GPU只需渲染变化图层,由VSP完成叠加,可显著降低GPU负载和DDR带宽。

实际工程中要关注三个参数:帧缓冲格式(RGB888、RGBA8888、YUV420)、双缓冲/三缓冲策略(避免撕裂与卡顿)、显示时序与GPU提交的同步(通过DRM/KMS的page flip或fence机制)。例如,在R-Car H3上驱动两块1080p屏幕,若每屏使用RGBA8888双缓冲,单帧帧缓冲约8MB,两块屏共16MB;若GPU每帧写回一次,60fps下仅颜色写回就接近1GB/s,加上图元列表和纹理采样,DDR带宽压力不可忽视。因此,合理使用压缩纹理(ETC2/ASTC)、降低不必要的后处理、启用Tile Memory丢弃,是保证多屏流畅的关键手段。

调试建议:使用Renesas提供的GPU性能计数器或第三方工具(如PVRTune、Mali Graphics Debugger)观察顶点数、片元数、Tile数量、DDR读写带宽。若发现像素阶段耗时过高,优先检查是否因过度绘制(overdraw)或纹理采样过多导致;若几何阶段耗时高,则检查三角形数量和顶点着色器复杂度。

五、小结与工程判断