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

Posted shaojunping

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Snapdragon——2. 避免图像内存load相关的知识,希望对你有一定的参考价值。

许多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的主要内容,如果未能解决你的问题,请参考以下文章

三星 Exynos 4412对比高通 骁龙Snapdragon MSM8528哪个更好???急

暴走吧!Snapdragon SDK开发速成指南

使用 SIMD 指令避免无效的内存加载

SnapDragon Profiler 学习

SnapDragon Profiler 学习

Snapdragon——4.尽量减小rt