RGA(二)——RK3588 的核拓扑与能力差异

一、RK3588 上到底有几颗 RGA 核?

直接给结论:一颗 RGA2-Enhance + 两颗独立的 RGA3。 这一点可以通过板子上的调试节点直接确认。在 RK3588 上执行:

bash 复制代码
sudo cat /sys/kernel/debug/rkrga/hardware

输出如下:

yaml 复制代码
===================================
rga3, core 1: version: 3.0.76831
input range: 68x2 ~ 8176x8176
output range: 68x2 ~ 8128x8128
scale limit: 1/8 ~ 8
byte_stride_align: 16
max_byte_stride: 32768
csc: RGB2YUV 0xf YUV2RGB 0xf
feature: 0x4
mmu: RK_IOMMU
-----------------------------------
rga3, core 2: version: 3.0.76831
input range: 68x2 ~ 8176x8176
output range: 68x2 ~ 8128x8128
scale limit: 1/8 ~ 8
byte_stride_align: 16
max_byte_stride: 32768
csc: RGB2YUV 0xf YUV2RGB 0xf
feature: 0x4
mmu: RK_IOMMU
-----------------------------------
rga2, core 4: version: 3.2.63318
input range: 2x2 ~ 8192x8192
output range: 2x2 ~ 4096x4096
scale limit: 1/16 ~ 16
byte_stride_align: 4
max_byte_stride: 32768
csc: RGB2YUV 0x3 YUV2RGB 0x7
feature: 0x205f
mmu: RGA_MMU
-----------------------------------

三颗核各自独立,理论上最多可以并行执行 3 个 RGA 任务。如果并行数量超过 3 个,多余的任务会进入等待队列,直到有核心空闲。


二、两颗核的能力差异(核心表格)

对比项 RGA2-Enhance RGA3
输入范围 2×2 ~ 8192×8192 68×2 ~ 8176×8176
输出范围 2×2 ~ 4096×4096 68×2 ~ 8128×8128
缩放倍率 1/16 ~ 16 1/8 ~ 8
Pixels/Cycle 2 3(bypass)/ 2(scale)
IOMMU 位数 32bit 40bit
寻址能力 仅 0~4G 内存 可访问 32G DDR
10bit YUV 输出 不支持 支持
8×8 tile / FBCD 不支持 支持
BT.2020 色域 不支持 支持
完全 planar 格式(三平面) 支持 不支持
Color Fill 支持 不支持
ROP 光栅运算 支持 不支持

数据来源:RGA3 的能力描述来自内核补丁;RGA2 与 RGA3 的规格参数来自 librga 官方文档中的设计指标表。


三、这张表怎么读?三个最关键的差异

3.1 输出分辨率:RGA2 到 4K,RGA3 到 8K

RGA2 的输出上限是 4096×4096,也就是标准的 4K 级别。RGA3 的输出上限是 8128×8128(官方有时写作 (8192-64)×(8192-64)),接近 8K。

实践推论 :如果你的场景需要输出超过 4096 宽或高的图像------比如 8K 片源解码后缩放到 5K 或 6K 上屏,或者大屏拼接------只有 RGA3 能做,RGA2 做不了。

3.2 缩放倍率:RGA2 反而更强

这是最反直觉的一点。RGA3 虽然"更新",但它的缩放倍率范围反而是 1/8 ~ 8 ,而 RGA2 是 1/16 ~ 16。

内核补丁的讨论中明确指出了这一点,有开发者还特意注释说"对于缩放,RGA3 在这方面更弱"。

实践推论 :如果你的场景需要超过 8 倍的缩放(比如 16 倍缩小,或者 10 倍放大),只有 RGA2 能做。

3.3 内存寻址:4G 限制的根源

RGA2 的 IOMMU 是 32bit ,意味着它只能访问 0~4G 物理内存空间 。RGA3 的 IOMMU 是 40bit,可以访问高达 32G 的 DDR。

官方文档里有一条明确的注记:RGA 的寻址能力和 IOMMU 的 bit 位数是相关联的,搭载 32bit IOMMU 的 RGA 实际物理地址寻址能力仅支持 0~4G 的内存空间。

实践推论:这是 RK3588 上最隐蔽的坑。如果你的板子有 8G 内存,而某个任务被分配到了 RGA2 核,但 buffer 的物理地址在 4G 以上,任务就会失败。具体行为和解决方案,会在后面的性能章节展开,现在先记住这个点。


四、功能矩阵:哪些能做,哪些不能

RGA3 独有的能力

  • 10bit YUV 输出格式:HDR、10bit HEVC 源的处理需要
  • 8×8 tile 和 FBCD 输入输出:压缩格式直通
  • BT.2020 色域转换:RGA2 只支持 BT.601 和 BT.709

RGA2 独有的能力

  • 完全 planar 格式(三平面):RGA3 明确不支持三平面格式
  • Color Fill:颜色填充功能是 RGA2 特有的
  • ROP 光栅运算:AND/OR/XOR 等光栅操作只有 RGA2 支持

两者都支持的基础能力

  • 旋转 90/180/270 度
  • X/Y 镜像翻转
  • 裁剪 Crop
  • Alpha blend
  • Color Key

五、官方的对齐约束:取最严标准

因为 RK3588 上同时搭载 RGA2 和 RGA3,而两者的对齐要求不同,librga 做了一个设计决策:按最严格的对齐要求进行约束。

官方文档原文:

当芯片平台搭载多版本硬件时,为了保证硬件利用率,librga 会按最严格的对齐要求进行约束。

具体来说,RGA2 的 byte_stride_align 是 4,RGA3 的 byte_stride_align 是 16。librga 在 RK3588 上会统一按 16 对齐校验。

5.1 RGA2 的对齐要求

格式 对齐要求
RGBA/BGRA/ARGB/ABGR/RGBX/BGRX/XRGB/XBGR 8888 width stride 无对齐要求
RGBA_4444 / BGRA_4444 / ARGB_4444 / ABGR_4444 / RGBA_5551 / BGRA_5551 / ARGB_5551 / ABGR_5551 / RGB_565 / BGR_565 width stride 须 2 对齐
YUYV_422 / VYUY_422 / UYVY_422 / VYUY_422 / YUVY_420 / VYUY_420 / UYVY_420 / VYUY_420 width stride 须 2 对齐,x_offset、y_offset、width、height、height stride 均须 2 对齐
RGB_888 / BGR_888 / A8 width stride 须 4 对齐
YCbCr/YCrCb 420 SP / 422 SP / 444 SP / 420 P / 422 P / 400 / Y4 / Y8 width stride 须 4 对齐,x_offset、y_offset、width、height、height stride 均须 2 对齐
YCbCr/YCrCb 420 SP 10B / 422 SP 10B width stride 须 16 对齐,x_offset、y_offset、width、height、height stride 均须 2 对齐

5.2 RGA3 的对齐要求

格式 对齐要求
RGBA/BGRA/ARGB/ABGR/RGBX/BGRX/XRGB/XBGR 8888 width stride 须 4 对齐
RGB_565 / BGR_565 width stride 须 8 对齐
YUYV_422 / YVYU_422 / UYVY_422 / VYUY_422 width stride 须 8 对齐,x_offset、y_offset、width、height、height stride 均须 2 对齐
RGB_888 / BGR_888 width stride 须 16 对齐
YCbCr/YCrCb 420 SP / 422 SP width stride 须 16 对齐,x_offset、y_offset、width、height、height stride 均须 2 对齐
YCbCr/YCrCb 420 SP 10B / 422 SP 10B width stride 须 64 对齐,x_offset、y_offset、width、height、height stride 均须 2 对齐
FBC mode 除上述格式对齐要求外,width stride、height stride 须 16 对齐
TILE 8×8 mode 除上述格式对齐要求外,width、height 须 8 对齐,输入通道 width stride、height stride 须 16 对齐

这个对齐约束是后面 80% 的"花屏/失败"问题的根源,第三篇会专门展开。


六、本篇小结

第一,RK3588 上有三颗 RGA 核:1 颗 RGA2-Enhance + 2 颗独立的 RGA3。 理论上最多并行 3 个任务。

第二,三颗核能力不同。 RGA3 支持 8K 输出、40bit 寻址、10bit YUV、BT.2020;RGA2 支持更大的缩放倍率(1/16~16)、planar 格式、Color Fill、ROP。

第三,最关键的两个差异:输出超过 4096 只有 RGA3 能做;缩放超过 8 倍只有 RGA2 能做。

第四,4G 内存限制的根源在 RGA2 的 32bit IOMMU。 8G 内存的板子上,如果 buffer 落在 4G 以上,RGA2 会失败。

第五,librga 在 RK3588 上按最严的对齐要求(RGA3 的 16 对齐)校验。 具体到各格式,RGA2 和 RGA3 的要求不一样,写代码时要注意区分:比如 NV12,RGA2 的 width stride 只要求 4 对齐,但 RGA3 要求 16 对齐;10bit NV12,RGA2 要求 16 对齐,RGA3 要求 64 对齐。同时 YUV 族的 x_offset、y_offset、width、height、height stride 均须 2 对齐。

相关推荐
用户0510122572961 小时前
RGA(一)——基础知识
linux·嵌入式
qetfw1 小时前
Debian 综合服务实训:Apache2、Samba、LDAP、vsftpd 与 OpenVPN
linux·服务器·debian
用户0510122572961 小时前
RGA(三)——实宽高、虚宽高与对齐约束
linux·嵌入式
fastjson_1 小时前
帆软看板 - 问题收集
linux·前端·javascript
jianpeng的工程笔记1 小时前
EL8 / EL9 安装 Slurm 26.05.4:主备控制器、MariaDB 记账与作业验收
linux·数据库·mariadb·高性能计算·slurm
程序员-Benothing1 小时前
Linux系统时间管理:date、timedatectl、NTP、Chrony配置
linux·运维·服务器
燕卫博1 小时前
SSD201 BSP 开发教程
嵌入式·bsp·ssd201
the3clipse2 小时前
MacOS、Linux 与 Windows 视频编解码对比:AV1、HEVC、ProRes 与硬件加速优劣势
linux·windows·macos·hevc·av1·视频解码·硬件解码
s6516654962 小时前
bootsect.s,setup.s,head.s的主要功能和对系统状态的影响、作用
linux