码迷,mamicode.com
首页 > 其他好文 > 详细

Snapdragon——2. 避免图像内存load

时间:2020-02-21 20:06:56      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:ima   资源   pen   线刷   移植   war   memory   adp   重要   

许多pc或主机游戏在移植到手机上,都会有问题。

Graphics Memory(GMEM)load是其中影响gpu性能的最重要的问题。下面介绍怎么用snapdragon发现哪里GMEM Load。

剖析

tiling机制的gpu管线都有一个pass,这个pass中,每个tile都渲染到GMEM。驱动的正常行为,上一帧的frame buffer从主存load到GMEM为每个tile,也就是说GMEM load发生了。

问题在于每个GMEM Load使进程变慢。如果framebuffer被clear了,或者失效了,那么驱动可以在GMEM中清掉那个tile。尽管需要额外的图形调用和相关消耗,但是着比为每个被渲染的bin把frame buffer加载到GMEM消耗少。

主要有两个原有导致GMEM load:

1. 给驱动错误的暗示:代码使驱动任务frame buffer上帧的内容还有用,通常因为没有调用clear buffer。通常这种情况都是OpenGL ES下的,vulkan控制的比较好;

2. 算法,一些涉及到GLReadPixels、glFlush强制管线刷新,获取资源,帧中间导致GMEM load。可以通过修改算法来避免GMEM load。

在Snapdragon里检测GMEM Load

gpu stages里,下图,4个surface里都调用了GMEM load(depth stencil)

技术图片

 

 

rendering stages的设置对话框显示了那些GMEM load占用了9%的渲染时间。

 

通过capture看什么导致了load,

 

技术图片

 

 

 

 

 

1. glBindFrameBuffer,参数为1;

2. 选择fbo1看资源,发现这个surface绑定了颜色、深度、stencil;

3. glClearColor和glClearDepth调用使gpu任务stencil的内容下一帧还有用,导致了Gmem load;

4. 另外3个surface也类似,有一个stencil绑定,但是没有clear。

修改代码,清理了stencil从framebuffer,然后就没有GMEM load depth stencil轨道了。

 

 技术图片

 参考:https://developer.qualcomm.com/software/snapdragon-profiler/app-notes/avoid-gmem-loads

Snapdragon——2. 避免图像内存load

标签:ima   资源   pen   线刷   移植   war   memory   adp   重要   

原文地址:https://www.cnblogs.com/Shaojunping/p/12342636.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!