纹理特性
纹理压缩
纹理压缩可以显著提高图形应用程序的性能和加载时间,因为它减少了纹理内存和总线带宽的使用。
Adreno gpu支持的重要压缩纹理格式包括(一般而言越前面的越好):
- ASTC - OpenGL ES(3.0及更高版本)和Vulkan支持的纹理压缩格式,允许压缩为大小可变的块,并且比其他选择更有效地支持sRGB纹理数据
- ETC2 -标准OpenGL ES 3.0和Vulkan纹理压缩格式,支持R, RG, RGB和RGBA组件布局,以及sRGB纹理数据
- ATC -专有Adreno纹理压缩格式(适用于RGB和RGBA)
- ETC -标准OpenGL ES 2.0纹理压缩格式(仅适用于RGB)
- DXT - DirectX纹理压缩
- BC -块压缩(DirectX)
Adreno gpu支持HDR和LDR profiles 的ASTC。
与桌面OpenGL不同的是,Vulkan不提供底层支持在运行时压缩纹理,所以纹理数据需要离线准备好。
以下是将纹理转换为Adreno硬件的几种方法: - 设备上转换:这是一种耗时的一次性纹理资产转换,发生在游戏启动时
- 预封装:最优化的解决方案,但需要为每个GPU提供替代版本的APK
- 下载:需要GPU检测和互联网连接,但允许对每个GPU的实际使用纹理格式进行更多控制
无论哪种方法,第一步就是要创建压缩纹理。
浮点精度纹理
Adreno GPUs 支持浮点进度纹理特性
无缝边界的立方体贴图
立方体贴图(Cube Mapping)是创建图形效果(如环境映射)的一种快速且廉价的方法。立方体贴图接受一个三维纹理坐标,并从给定的立方体贴图中返回一个体素(类似于天空盒)。
Adreno gpu支持立方体贴图纹理采样的无缝边缘。
视频纹理
Adreno gpu支持视频纹理,它由实时从视频文件流传输的动态图像组成。
没有应用程序开发人员可以控制的专用视频内存-视频纹理像其他纹理一样由图形驱动程序从系统内存中分配。
着色器(shader)
统一着色器(Unified shader)架构
所有Adreno gpu都支持统一着色器模型,所有着色器类型中使用一致的指令集。
在硬件方面,Adreno gpu具有计算单元(例如,算法逻辑单元/ALUs)并获取支持顶点、片元和计算着色器的资源,因此以下许多建议适用于大多数或所有着色器。
如下图所示,着色处理是在统一着色器架构内完成的。这张图片表达了顶点和像素以四个为一组作为一个矢量或一个线程进行处理。当线程停顿时,着色器的算法逻辑单元(ALUs)可以被重新分配。
如下图所示,在统一的着色器架构下,顶点和片段着色器没有单独的硬件。这允许像素和顶点负载均衡具有更大的灵活性。
Adreno着色器架构也是多线程的。如果一个片元着色器执行由于获取纹理而停滞,另一个着色器将被安排执行。只要在硬件中有空间(主要是通用目的寄存器General Purpose Register),多个着色器就可以“准备好有效地调度”。
使用统一的着色器架构不需要特殊的步骤。Adreno GPU可以智能地根据场景最有效地利用着色器资源。
标量架构
Adreno gpu有一个标量组件架构Scalar component architecture。它们原生支持的最小组件是标量组件。因为它不会浪费一个完整的矢量组件来处理标量,所以可以更有效地使用硬件资源来处理标量组件。
有许多方法可以有效地利用硬件。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。