首页 > 编程知识 正文

android游戏开发框架(Adreno GPU上Android 游戏开发介绍 (1))

时间:2023-05-05 15:18:30 阅读:123926 作者:4140

Adreno GPU开发Android游戏指南(1)了解和解决显存负载简单来说,什么是显存负载? 为什么图形内存负载很大? Snapdragon Profiler检测图形内存负载

了解和解决图形内存加载

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

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

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

显卡内存的负载是什么? Qualcomm Adreno GPU瓷砖结构管道包含渲染通道。 在渲染期间,每个块都渲染为GMEM。 在驱动程序的正常操作中,以前的帧缓冲区数据从主存储器加载到每个tile的GMEM中,然后进行GMEM加载(或未解析)。

为什么图形内存负载很大? 问题是所有GMEM负载都会降低处理速度。 如果帧缓冲区的内容被清除或禁用,驱动程序可以清除GMEM中的块。 这包括额外的图形调用及其相关开销,但比渲染中的所有情色鸭子将帧缓冲区重新加载到GMEM中成本更低。

GMEM负载的主要原因有以下两个。

http://www.Sina.com/- APP应用程序代码确定驱动程序需要帧缓冲区的早期内容。 通常忽略缓冲区的清除。 这归结于比较简单的修复,在缩短渲染时间方面受益匪浅。 Vulkan显式处理条件,因此主要适用于OpenGL ES编程。 33558 www.Sina.com/-某些API (如glreadpixels和glFlush )强制更新管道以获得结果。 如果在恢复绘图帧的内容时运行此中间帧,则会加载GMEM。 通常,可以通过修改算法来避免GMEM负载。 在Snapdragon Profiler检测图形内存负载的跟踪捕获模式下使用Snapdragon Profiler时,渲染阶段指标可以在自己的轨道上突出显示GMEM负载。

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

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

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

然后,可以在快照配置文件程序中使用快照捕获模式来确定GMEM负载的原因。

施加GMEM载荷的第一个曲面是第一个绑定曲面— glBindFrameBuffer。 将帧缓冲区参数设置为1: #,然后选择帧缓冲区对象1(FBO1)检查资源。 “检查器”视图显示具有颜色、深度和模板的曲面的附件。 #通过调用# glClearColor和glClearDepth,GPU认为Stencil附件的内容与下一帧相关。 这引起了GMEM负荷。 同样,其他三个曲面(在本例中为ID 5、7和9 )具有Stencil附件,它们不会被清除。

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

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

特别是有关增强现实APP应用中GMEM负载的详细信息,请参见QDN博客文章profilingvrappsforbetterperformance。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。