Utgard风格的平铺和Arm FrameBuffer Compression(AFBC)

Utgard风格的平铺和Arm FrameBuffer Compression(AFBC)是两种不同的纹理和帧缓冲区压缩技术,它们在性能上有显著差异。

Utgard风格的平铺

Utgard风格的平铺是一种软件编码和解码的纹理和帧缓冲区平铺格式,旨在提高2D空间局部性,从而在水平和垂直方向上改善缓存局部性。这种平铺格式在Midgard GPU上也被支持,可以用于纹理和帧缓冲区。然而,在实践中,它通常作为备用布局使用;Midgard引入了Arm FrameBuffer Compression,这是比Utgard风格的平铺显著更高效的布局,并且在可能的情况下,它被优先用于纹理和帧缓冲区。对于不支持的纹理类型,例如sRGB纹理和帧缓冲区,这种平铺方案以性能损失为代价使用,因为AFBC不兼容。

也叫做:"Utgard风格的平铺"、"(Mali) 交换纹理"和"U-交错"(前两个名称在Lima/Panfrost驱动程序社区中使用,后者在Arm内部使用)。

实现原理:

图像尺寸必须沿每个轴对齐到16像素。一旦对齐,图像被划分为16x16的块。

每个16x16块中的位根据以下模式重新排序:

| y3 | (x3 ^ y3) | y2 | (y2 ^ x2) | y1 | (y1 ^ x1) | y0 | (y0 ^ x0) |

这基本上是交错X和Y位,每对相邻位之间插入XOR。

用途:

这种平铺格式旨在提高2D空间局部性,从而在水平和垂直方向上改善缓存局部性。

注意事项:

  1. 这种格式在Midgard GPU上也被支持,可以用于纹理和帧缓冲区。然而,在实践中,它通常作为备用布局使用;Midgard引入了Arm FrameBuffer Compression,这是比Utgard风格的平铺显著更高效的布局,并且在可能的情况下,它被优先用于纹理和帧缓冲区。对于不支持的纹理类型,例如sRGB纹理和帧缓冲区,这种平铺方案以性能损失为代价使用,因为AFBC不兼容。

  2. 软件实现需要一些技巧,将模式划分为两行:

| y3 | y3 | y2 | y2 | y1 | y1 | y0 | y0 |

^ | 0 | x3 | 0 | x2 | 0 | x1 | 0 | x0 |

其中,Y位的位重复,X位的位被分散。顶行仅取决于Y,因此可以每行计算一次并存储在寄存器中。底行只是分散的X。分散X可以通过查找表或通过减去+AND掩码模式(利用进位位)来实现。

Arm FrameBuffer Compression (AFBC)

AFBC是一种硬件加速的帧缓冲区压缩技术,旨在提高帧缓冲区的存储效率和传输效率。它通过将帧缓冲区数据压缩为更小的块,从而减少内存占用和带宽需求。AFBC支持多种压缩模式,包括4:2:0、4:2:2和4:4:4,并且可以处理各种纹理格式,包括sRGB纹理和帧缓冲区。

实现原理

AFBC的实现原理基于以下步骤:

  • 图像分割:将图像分割为多个块,每个块的大小取决于压缩模式。例如,对于4:2:0压缩模式,每个块的大小为16x16像素。
  • 颜色空间转换:将图像从RGB颜色空间转换为YUV颜色空间,以便更好地压缩颜色信息。
  • 颜色量化:将颜色信息量化为较小的值,以便更好地压缩。
  • 熵编码:使用熵编码算法(如Huffman编码)对颜色信息进行编码,以进一步减少数据量。
  • 压缩块:将编码后的颜色信息压缩为更小的块,以便更好地存储和传输。

注意事项

软件实现AFBC通常需要大量的计算资源和内存资源,因此通常需要使用高性能的处理器和足够的内存。此外,软件实现AFBC的压缩效率和解码速度通常比硬件加速的AFBC差,因此通常不推荐在生产环境中使用。

性能比较

  • 压缩效率:AFBC通常提供更高的压缩效率,这意味着在相同的内存占用下,可以存储更多的图像数据。Utgard风格的平铺的压缩效率相对较低,因为它是一种软件编码和解码的方案。
  • 解码速度:AFBC的解码速度通常比Utgard风格的平铺快,因为AFBC是硬件加速的。Utgard风格的平铺需要软件解码,这通常比硬件解码慢。
  • 兼容性:AFBC支持更多的纹理格式和帧缓冲区格式,包括sRGB纹理和帧缓冲区。Utgard风格的平铺可能不兼容某些特定的纹理格式和帧缓冲区格式。
  • 内存占用:AFBC的内存占用通常比Utgard风格的平铺小,因为AFBC使用更高效的压缩算法。Utgard风格的平铺的内存占用较大,因为它需要存储额外的解码数据。

综上所述,AFBC通常比Utgard风格的平铺在性能上有优势,特别是在压缩效率、解码速度和内存占用方面。然而,Utgard风格的平铺在某些情况下仍然有用,特别是在不支持AFBC的硬件上。

相关推荐
鼠鼠龙年发大财2 小时前
【x**3专享】安装SSH、XFTP、XShell、ARM Linux
linux·arm开发·ssh
学习3人组4 小时前
结合板载驱动以及考虑全志 ARM 开发板有温度传感器和显示屏等硬件设备开发示例
arm开发
仙陨4 小时前
ARM相关概念
arm开发
流殇2585 小时前
ARM中要使用的汇编基础
汇编·arm开发
钡铼技术物联网关18 小时前
Codesys 与 ARMxy ARM 工业控制器:工业控制的黄金组合
linux·运维·服务器·arm开发·硬件工程
Liii40318 小时前
【ARM】Cache深度解读
java·arm开发·spring
Liii40318 小时前
【ARM】中断的处理
arm开发·arm
Archie_IT19 小时前
【STM32系统】基于STM32设计的SD卡数据读取与上位机显示系统(SDIO接口驱动、雷龙SD卡)——文末资料下载
arm开发·stm32·单片机·嵌入式硬件
闲仁人1 天前
ARM总复习
arm开发