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回写。
四、与显示控制器的数据通路
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丢弃,是保证多屏流畅的关键手段。