Mali GPU: 抽象机器(二) C 基于区块的渲染
压缩可以应用到离屏 FBO 渲染目标,后者可在随后的渲染步骤中由 GPU 作为纹理读回;也可以应用到主窗口表面,只要系统中存在兼容 AFBC 的显示控制器,如 Mali-DP500。
大多数内容拥有深度缓冲和模板缓冲,但帧渲染结束后就不必再保留其内容。如果开发人员告诉 Mali 驱动程序不需要保留深度缓冲和模板缓冲2— 理想方式是通过调用 glDiscardFramebufferEXT (OpenGL ES 2.0) 或 glInvalidateFramebuffer (OpenGLES 3.0),虽然在某些情形中可由驱动程序推断 — 那么区块的深度内容和模板内容也就彻底不用写回到主内存中。我们又大幅节省了带宽和功耗!
上表中可以清晰地看出,基于区块的渲染具有诸多优势,尤其是可以大幅降低与帧缓冲数据相关的带宽和功耗,而且还能够提供低成本的抗锯齿功能。那么,有些什么劣势呢?
任何基于区块的渲染方案的主要额外开销是从顶点着色器到片段着色器的交接点。几何处理阶段的输出、各顶点可变数和区块中间状态必须写出到主内存,再由片段处理阶段重新读取。因此,必须要在可变数据和区块状态消耗的额外带宽与帧缓冲数据节省的带宽之间取得平衡。
当今的现代消费类电子设备正大步向更高分辨率显示屏迈进;1080p 现在已是智能手机的常态,配备Mali-T604 的 Google Nexus 10 等平板电脑以 WQXGA (2560x1600) 分辨率运行,而 4k2k 正逐渐成为电视机市场上新的“不二之选”。屏幕分辨率以及帧缓冲带宽正快速发展。在这一方面,Mali 确实表现出众,而且以对应用程序开发人员基本透明的方式实现 - 无需任何代价,就能获得所有这些好处,而且还不用更改应用程序!
在几何处理方面,Mali 也能处理好复杂度。许多高端基准测试正在接近每帧百万个三角形,其复杂度比 Android 应用商店中的热门游戏应用程序高出一个(或两个)数量级。然而,由于中间几何数据的确到达主内存,所以可以应用一些有用的技巧和诀窍,来优化 GPU 性能并充分发挥系统能力。这些技巧值得通过一篇博文来细谈,所以我们会在这一系列的后续博文中再予以介绍。
小结
在这篇博文中,我比较了桌面型直接模式渲染器与 Mali 所用的基于区块方式的异同,尤其探讨了两种方式对内存带宽的影响。
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)