当前位置: 首页 > article >正文

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的硬件上。


http://www.kler.cn/a/311431.html

相关文章:

  • 【嵌入式开发】单片机CAN配置详解
  • WPF学习之路,控件的只读、是否可以、是否可见属性控制
  • 利用滑动窗口解题
  • 软件测试面试2024最新热点问题
  • 数据结构与算法-前缀和数组
  • wafw00f源码详细解析
  • iview Form Input组件按下回车键搜索和禁止触发表单默认事件
  • Rocky Linux 9 中添加或删除某个网卡的静态路由的方法
  • 【JSrpc破解前端加密问题】
  • 【Linux】对称加密和非对称加密的区别
  • (k8s)Kubernetes部署Promehteus
  • Tiny-universe-taks1-LLama3模型原理
  • 快速掌握Postman接口测试
  • 基于python+django+vue的在线学习资源推送系统
  • 一个手机号注册3个抖音号的绿色方法?
  • 如何查看电脑什么时候被人动过及看过的文件?
  • 【Java版】云HIS系统源码
  • node js版本低导致冲突WARN EBADENGINE package: required: { node: ‘>=18‘ }
  • 操作系统基础
  • 傅里叶变换的基本性质和有关定理
  • TCP交互通讯在Windows中的频率
  • 【leetcode】堆习题
  • codetop哈希表刷题!!!刷穿地心版)
  • 如何使用ssm实现基于web的物流配送管理系统的设计与实现+vue
  • 【TabBar嵌套Navigation案例-关于页面 Objective-C语言】
  • FlexNet Licensing: not running 问题