调查了下现在移动端的GPU厂商,主要有Imagenation technology公司的Power VR 系列
高通的骁龙系列,Mali的MP系列。
各品牌手机使用的GPU
苹果手机->Power VR
魅族->Power VR
三星手机->骁龙
小米手机->骁龙
华为手机->Mali
每家芯片的特性不同,根据向framebuffer写法的不同,分为tile-based的mobile cpu,如PowerVR,Mali,一部分老版本Adreno。对tile-based的GPU来说,一旦使用打开alpha test或者其他discard功能的指令,就意味着这个fragment shader上不再只绘制一次像素了。这样会增加额外的性能消耗,所以一般都是建议用不实用alpha test,或者用alpha blend来代替。
PowerVR文档对Alpha Test的建议:
传送门:http://cdn.imgtec.com/sdk-documentation/PowerVR+Performance+Recommendations.The+Golden+Rules.pdf
个人理解:
由于Power VR使用了基于瓦片的延时渲染技术。
普通物体由于Early-Z技术的存在,使得被遮挡的物体片元的着色器不会被执行,马上更新深度缓冲的值
使用了Alpha Test的物体破坏了Early-Z技术,硬件检测后禁掉Early-Z技术,使得即使被遮挡的片元的片元着色器执行完才更新深度缓冲的值。(片元着色器被多执行了)
使用Alpha Test会导致性能降低,所以尽量使用Alpha Blend代替Alpha Test.