代码改变世界

Snapdragon——5. adreno抗锯齿

2020-02-21 19:59  kk20161206  阅读(597)  评论(0编辑  收藏  举报

抗锯齿,内存和带宽要求高,消耗大量性能。tile架构的gpu不像平台设计的那样后处理抗锯齿。

Adreno gpu有扩展,帮助多采样抗锯齿(MSAA),经有采样层上的限制。你可以做2x msaa不需要导致大量渲染消耗,但比2x更高的,就会消耗大了。

 

 msaa的后处理抗锯齿方法。

尽管有效,但涉及到blit rt A到贴图B,blit在移动gpu上消耗较大。

下面是消耗较小的blit:

 

 Adreno gpu可以在GMEM上执行多采样,然后GMEM store到一个单采样贴图,用glFramebufferTexture2DMultisampleEXT。bin数量和2x msaa在renderbuffer的一样,resolve到tile到主存的时候,进行滤波。

 

 

 

 

看到是glBlitFramebuffer调用,导致了blit。

为了实现第二种工作流的方式,替换为glFramebufferTexture2DMultisampleEXT:

 

 看到blit消失了。bin和msaa没有变化:

 

 渲染时间缩短了。

不是所有blit都是这帧原因。mipmap有时候在gpu生成、blit阶段。blit也可能是通过更新当前在用的贴图导致的。

 

参考:https://developer.qualcomm.com/software/snapdragon-profiler/app-notes/anti-aliasing-with-adreno