渲染Surface
sRGB纹理和render targets
sRGB是一种标准的RGB色彩空间,由Hewlett-Packard和Microsoft于1996年合作创建,用于显示器、打印机和Internet。今天的智能手机和平板电脑显示器也采用sRGB(非线性)色彩空间。sRGB以正确的颜色提供最佳的观看体验,并确保渲染目标和纹理的色彩空间与显示的色彩空间相匹配。
API支持各不相同,不同像素格式的效率也各不相同。
通用带宽压缩
自A5x以来,所有gpu都支持通用带宽压缩(UBWC)。UBWC是一种独特的预测带宽压缩方案,可提高系统内存的有效吞吐量。通过最小化数据带宽,可以实现显著的节能。
UBWC适用于Snapdragon处理器中的许多组件,包括GPU,显示器,视频和相机。压缩支持YUV和RGB格式,减少内存瓶颈。Snapdragon Profiler通常将surface显示为“Optimal”(UBWC)或“Linear”(性能低得多,但像c数组一样布局,而不是这种专有的压缩方案)。
必须正确使用图形api才能最大限度地利用UBWC。例如,在Vulkan中,VK_IMAGE_TILING_LINEAR和VK_IMAGE_TILING_OPTIMAL通常最好映射为“Linear”和“Optimal”
PCF抗锯齿
Adreno gpu硬件支持OpenGL ES 3.0和Vulkan Percentage Closer Filtering (PCF)功能。
硬件从阴影贴图(shadow map)纹理中提取双线性采样,缓解了实时阴影贴图中出现的锯齿问题。
LRZ, Early-Z and Fast-Z
Low Resolution Z pass
自Adreno5X以后(A5X)就支持了低分辨率Z pass(LRZ)。这也被称为不依赖于绘制顺序的深度剔除。
在分块通道(binning pass)中,构建了一个低分辨率z缓冲区,可以剔除LRZ-tile以大范围提高分组性能。然后在渲染过程中使用这个LRZ,在全分辨率z缓冲区测试之前有效地剔除像素。
LRZ占用的CPU资源可以忽略不计。分块流程在GPU中执行,生成的可见性流(决定哪些drawcall影响哪些块)被放置在系统内存中,供GPU在渲染通道(Rendering pass)中使用。
这个特性减少了内存访问和渲染图元的数量,减少了应用程序从前到后绘制需求,从而通常提高了帧率。
LRZ不能被开发者直接使用,不能通过Vulkan、DirectX、OpenGL ES或任何其他公共API,但是开发者可以影响LRZ被执行的可能性。
Early Z剔除
对于通过LRZ测试的像素,Early Z剔除模式提供了一种快速遮挡方法,可以剔除从视点位置不可见(隐藏)的无需进入渲染通道的对象。
下图显示了一个用网格表示的颜色缓冲区,每个块表示为一个像素。这个网格上渲染的像素区域是黑色的。这些渲染的黑色像素的z缓冲值为1。
如果您试图将新图元渲染到现有颜色缓冲区的相同像素上,该像素的Z-buffer值为2(第二个带有绿色块的网格),则该新图元中的冲突像素将被拒绝(第三个网格表示最终颜色缓冲区)。
为了获得此功能的最大好处,请确保驱动程序执行了Early Z剔除。此外,建议在一个场景绘制的图元对其从前到后排序;即,从近到远——这确保了远图元的z剔除率更高,这通常会优化具有高深度复杂性的应用程序。
Fast-Z
GPU有一个特殊的模式,例如,当应用程序渲染到阴影贴图(shadowmap)或z-prepass时,以正常速率的两倍写Z-only像素-这可以提高性能。开发者可以影响驱动激活Fast-Z的可能性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。