GPU PRO 5 - 4.3 Bandwidth Efficient Graphics with ARM Mali GPUs 笔记

本笔记仅为个人的理解,如果有误欢迎指出。

Bandwidth Efficient Graphics with ARM Mali GPUs

基于 ARM Mali GPU 的带宽高效图形技术

这是一篇介绍ARM为OpenGL ES 2.0OpenGL ES 3.0 提供的一系列拓展技术,感觉像是API介绍说明,这篇文章不像是面向普通的游戏开发人员看的,像是给游戏引擎开发看的。

文章主要介绍两个方面的技术:

Shader Framebuffer Fetch Extensions 和 Shader Pixel Local Storage

Shader Framebuffer Fetch Extensions :

ARM在片段着色器拓展,允许在处理当前像素的时候可以读取现有的framebuffer颜色、深度和模板。

这里涉及到两个扩展:

GL_ARM_shader_framebuffer_fetch

GL_ARM_shader_framebuffer_fetch_depth_stencil

1,GL ARM shader framebuffer fetch

这个拓展允许片段着色器直接读取当前像素已经写入 Framebuffer 的颜色。这个实现原理是因为在移动端设备中,片段着色器写入的不是framebuffer,写入的是Tile Buffer,而Tile Buffer不是在显存中所以几乎没有额外的带宽消耗

2,GL_ARM_shader_framebuffer_fetch_depth_stencil

这个拓展允许片段着色器读取现有的framebuffer 深度和模板值,这使得许多依赖场景深度的屏幕空间技术可以实现,比如软粒子、可编程深度\模板测试、三维位置重建以及方差阴影贴图。

简单的软粒子实现:

简单的方差阴影实现:

Shader Pixel Local Storage :

Shader像素本地存储,OpenGL ES 3.0中提供了一种机制,使的同一个像素点的不同Fragment Shader之间能够传递信息。实现原理在于每个像素都有一个128 bit的 Shader Pixel Local Storage ,程序可以自己划分这空间的用途。可以看到 PLS 保存在 Tile - buffer 上

正常渲染流程:

使用了PLS的流程:

参考资料:

Bandwidth Efficient Graphics with ARM Mali GPUs