AdrenoGPU开发Android游戏指南了解和解决显存负载简单

AdrenoGPU开发Android游戏指南了解和解决显存负载简单

了解图形内存加载并排除故障

由于移动GPU的硬件条件不同,一些运行在PC、游戏机等平台上的编程技术无法很好地移植到移动设备上。

视频内存 (GMEM) 负载是影响移动应用中 GPU 性能的最常见问题之一。 本节介绍如何使用Snapdragon Profiler在APP应用程序代码中搜索GMEM负载。

简而言之像素游戏素材,清除或禁用所有帧缓冲区附件。 它指示 GPU 不要将块数据从系统内存加载到 GMEM 中。

框架软件游戏框架_android游戏开发框架_手游开发框架

显卡显存的负载是多少? Qualcomm Adreno GPU 瓦片结构管道包含渲染通道。 在渲染过程中android游戏开发框架,每个块都被渲染为 GMEM。 在驱动程序的正常操作中,先前的帧缓冲区数据从主内存加载到每个图块的 GMEM 中,然后加载(或不解析)GMEM。

为什么显存负载过重? 问题是所有 GMEM 负载都会减慢处理速度。 如果清除或禁用帧缓冲区的内容硬件设备,驱动程序可以清除 GMEM 中的块。 这包括额外的图形调用及其相关开销,但比将渲染中的所有色情鸭子的帧缓冲区重新加载到 GMEM 中要便宜。

android游戏开发框架_框架软件游戏框架_手游开发框架

GMEM 负载有两个主要原因。

APP应用程序代码确定驱动程序需要帧缓冲区的早期内容。 缓冲区的清除通常被忽略。 这是一个相对简单的修复,它在减少渲染时间方面带来了巨大的好处。 Vulkan 显式处理条件,因此主要适合 OpenGL ES 编程。 33558 某些 API(例如 glreadpixels 和 glFlush)强制更新管道以获得结果。 如果在恢复绘图框架的内容时运行此中间框架,则将加载 GMEM。 一般情况下,可以通过修改算法来避免GMEM负载。 当在跟踪捕获模式下使用 Snapdragon Profiler 时,Snapdragon Profiler 会检测图形内存负载,渲染阶段指标可以突出显示其自己轨道上的 GMEM 负载。

框架软件游戏框架_手游开发框架_android游戏开发框架

下面的屏幕截图基于 Adreno SDK 的景深演示 APP。 红色块表示渲染四个不同表面(0、16、32 和 48)时发生 GMEM 加载(深度模板)。

“渲染阶段设置”对话框显示这些 GMEM 负载约占渲染时间的 9%。

框架软件游戏框架_手游开发框架_android游戏开发框架

如果不需要 GMEM 加载,大约 9% 的帧时间可以被重用。

然后可以在快照分析器中使用快照捕获模式来确定 GMEM 负载的原因。

框架软件游戏框架_android游戏开发框架_手游开发框架

应用 GMEM 负载的第一个表面是第一个绑定表面 - glBindFrameBuffer。 将帧缓冲区参数设置为 1: # 并选择帧缓冲区对象 1 (FBO1) 来检查资源。 检查器视图显示表面的附件,包括颜色、深度和模板。 #通过调用#glClearColor和glClearDepth,GPU认为Stencil附件的内容与下一帧相关。 这导致 GMEM 加载。 同样,其他三个表面(在本例中为 ID 5、7 和 9)具有模板附件android游戏开发框架,并且不会被清除。

修改代码以显式清除帧缓冲区中的 Stencil 内容后,可以在跟踪捕获模式下验证结果。 在此模式下,GMEM 加载的深度 Stencil 轨迹将不再显示。

在这种情况下,渲染时间减少了大约 9%。

特别是,请参阅 QDN 博客文章 profilingvrappsforbetterperformance,了解有关增强现实应用程序中 GMEM 有效负载的详细信息。

文章来源:https://www.aman.icu/post-132030.html