Adreno GPU的部分功能简介

一、Adreno GPU简介
Adreno GPU是Qualcomm®SnapdragonTM处理器一体化设计的一部分。 加速复杂几何形状的渲染使处理器能够满足当今移动设备的游戏、用户界面、Web技术所要求的性能水平。Adreno GPU专为移动API和移动设备限制而设计,重点在于性能和高效的电源使用。最初的Adreno 130变体仅支持OpenGL ES 1.1,Adreno 2xx系列及其后续版本支持OpenGL ES 2.0。 Adreno 3xx系列增加了对OpenGL ES 3.0和OpenCL的支持。 Adreno 4xx增加了对OpenGL ES 3.1和Android Extension Pack的支持。 

二、纹理功能

1、多纹理

多个纹理或多纹理是在多边形上一次使用多个纹理。Adreno 3xx在单个渲染过程中最多支持32个纹理,这意味着片段着色器中最多16个纹理,顶点着色器一次最多16个纹理。 有效使用多个纹理可以显着减少过度绘制,节省片段着色器的算法逻辑单元(ALU)成本,并避免不必要的顶点变换。要在应用程序中使用多个纹理,请参阅Adreno SDK OpenGL ES教程中的多纹理示例。

2、视频纹理

如今更多的游戏和图形应用程序需要视频纹理,其中包括从视频文件实时流式传输的运动图像。 Adreno GPU支持视频纹理。
视频纹理是当今Android(Honeycomb或更高版本)中的标准API功能。 有关表面纹理的更多详细信息,请参阅Android文档:

http://developer.android.com/reference/android/graphics/SurfaceTexture.html

除了按照建议使用标准Android API,如果应用程序需要视频纹理,也可以使用标准的OpenGL ES扩展,详见:

http://www.khronos.org/registry/gles/ extensions/OES/OES_EGL_image.txt

3、纹理压缩

纹理压缩可以显着提高图形应用程序的性能和加载时间,因为它可以减少纹理内存和总线带宽的使用。可以使用Adreno纹理压缩和可视化工具创建压缩纹理,随后由OpenGL ES应用程序使用。
Adreno 3xx支持的重要压缩纹理格式包括:

a、ATC  - 专有的Adreno纹理压缩格式(用于RGB和RGBA)

b、ETC  - 标准OpenGL ES 2.0纹理压缩格式(用于RGB)

c、ETC2  -  OpenGL ES 3.0 API支持的纹理压缩格式(适用于R,RG,
RGB和RGBA)

Adreno 4xx增加了对ASTC LDR压缩的支持,该压缩可通过Android Extension Pack获得。
要了解有关纹理压缩使用的更多信息,请参阅Adreno SDK中的压缩纹理教程。

4、浮点纹理

Adreno 2xx,3xx及以后版本支持相同的纹理功能,包括:
通过GL_OES_texture_half_float和GL_OES_texture_half_float_linear扩展来对FP16纹理进行纹理和线性过滤

通过GL_OES_texture_float从FP32纹理进行纹理处理
通过OpenGL ES 3.0 API,Adreno 3xx及其后续版还包括对FP16(完全支持)和FP32(无混合)的渲染支持。

5、具有无缝边缘的立方体映射

多维数据集映射是一种创建高级图形效果(如环境映射)的快速且廉价的方法。 立方体贴图采用三维纹理坐标,并返回给定立方体贴图中的纹素(类似于天空框)。
Adreno 3xx及其后续版本支持立方体贴图纹理采样的无缝边缘支持。

6、3D纹理

除了2D纹理和立方体贴图之外,还有一个已批准的用于3D纹理的OpenGL ES 2.0扩展名为GL_OES_texture_3D。 此扩展允许3D纹理初始化并用于体积渲染目的。 这是从OpenGL ES 3.0开始的核心功能。

纹理尺寸

Adreno 330支持最大8192x8192x8192的纹理尺寸。根据内存的可用性,Adreno 420可以处理分辨率高达16384x16384x16384的纹理。

sRGB纹理和渲染目标

sRGB是Hewlett-Packard和Microsoft于1996年合作创建的标准RGB色彩空间,用于显示器,打印机和互联网。今天的智能手机和平板电脑显示器也假设sRGB(非线性)色彩空间。要获得具有正确颜色的最佳观看体验,渲染目标和纹理的颜色空间与显示器的颜色空间(sRGB)相匹配非常重要。不幸的是,OpenGL ES假设线性或RGB颜色空间
默认。由于Adreno 3xx支持渲染目标和纹理的sRGB色彩空间,因此可以确保正确的色彩查看体验。

PCF用于深度纹理

Adreno 3xx具有对Percentage Closer Filtering(PCF)的OpenGL ES 3.0功能的硬件支持。硬件双线性样本被提取到阴影贴图纹理中,这减轻了在实时应用中使用阴影贴图可以看到的锯齿问题。

三、能见度处理(Visibility processing)

1、早期Z拒绝(Early Z rejection)

早期Z拒绝提供了一种快速遮挡方法,可以拒绝从视图位置看不到(隐藏)的对象的不需要的渲染过程。 Adreno 3xx可以以高达4倍的绘制像素填充率来抑制被遮挡的像素。

Figure 1-4,表示为网格的颜色缓冲区,每个块表示为一个像素。此网格上的渲染像素区域为黑色。这些渲染的黑色像素的Z缓冲区值为1.如果尝试将新图元渲染到Z缓冲区值为2的现有颜色缓冲区的相同像素上(如带有绿色块的第二个网格中所示),这个新原语中的冲突像素将被拒绝,如表示最终颜色缓冲区的第三个网格所示。 Adreno 3xx可以在最多四倍的绘制像素填充率下拒绝被遮挡的像素。

为了从这个功能中获得最大的好处,QTI建议绘制一个场景,从前到后整理出基元;即近远。这确保了远基元的Z拒绝率更高,这对于具有高深度复杂性的应用是有用的。

2、混合延迟和直接渲染模式(FlexRenderTM)

QTI推出了新的FlexRender解决方案,作为Adreno 3xx的一部分。 FlexRender是指GPU在间接渲染(分箱或延迟渲染)和直接渲染到帧缓冲区之间切换的能力。
直接和延迟渲染模式都有优点。 Adreno 3xx GPU旨在通过动态方式在两种模式之间切换来最大化性能。 这可以通过以下两种方式之一工作:

a、开发人员可以提供一个提示,告诉GPU何时应该切换模式。

b、GPU可以分析给定渲染目标的渲染并自动选择模式。

注:建议使用自动方法,因为这允许Adreno GPU选择最佳渲染模式。

延迟模式渲染机制将场景帧缓冲区分成小区域以进行渲染,从而优化整体渲染。 Adreno GPU的延迟模式渲染机制使用两遍算法来渲染场景。 第一遍将每个基元与一组BinID和后向信息相关联,该传递每帧完成一次。 在第二遍中,这些BinID用于平凡地拒绝落在当前正在渲染的bin之外的基元并执行早期的背面剔除。
第二遍每个bin运行一次,每个bin都呈现给GMEM。 然后,每个bin被解析为内存中的渲染表面。 延迟模式呈现机制进一步示出
详见图1-5。

四、Shader支持

1、统一的shader结构

所有Adreno GPU都支持统一着色器模型,该模型允许在所有着色器类型(顶点和片段着色器)中使用一致的指令集。 在硬件方面,Adreno GPU具有支持片段和顶点着色器的计算单元,例如ALU。
Adreno 3xx使用共享资源架构,允许相同的ALU和获取资源由顶点着色器,像素或片段着色器以及通用处理共享。 着色器处理在统一着色器架构内完成,如图所示:

图1-6显示了顶点和像素以四个为一组处理为矢量或线程。 当线程停止时,可以重新分配着色器ALU。 在统一着色器架构中,顶点和片段着色器没有单独的硬件。

如图1-7所示。 这允许像素和顶点负载平衡的更大灵活性。

Adreno 3xx着色器架构也是多线程的,例如,如果片段着色器执行由于纹理提取而停止,则执行被给予另一个着色器。 只要硬件中有空间,就会累积多个着色器。使用统一着色器架构无需特殊步骤。 Adreno GPU根据场景构成智能地最有效地使用着色器资源。

2、标量架构
Adreno 3xx具有标量组件架构。 Adreno 3xx可以支持的最小组件是标量组件。 这样可以更有效地使用硬件资源来处理标量组件,并且不会浪费完整的矢量组件来处理标量。 与当今使用矢量架构的其他移动GPU相比,Adreno 3xx的标量架构可以提供两倍的功率效率,并且可以提供两倍于处理使用中等精度浮点(mediump)的片段着色器的性能。 对于Adreno 3xx,mediump是一个16位浮点,highp是一个32位浮点。

五、总结

本篇主要是简单介绍了Adreno GPU相关的部分功能,欢迎一起讨论学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值