因为,每家芯片的特性不同,根据向framebuffer写法的不同,分为tile-based的mobile cpu,如ImgTec PowerVR,ARM Mali,一部分老版本Qualcomm Adreno。还有标准的direct(immediate)的mobile cpu,如Nvida,Intel,Viante,以及一部分Qualcomm芯片(Qualcomm的Adreno.3xx系列后是可以在这两者之间进行切换的)。对tile-based的GPU来说,一旦使用打开alpha test或者其他discard功能的指令,就意味着这个fragment shader上不再只绘制一次像素了。这样会增加额外的性能消耗,所以一般都是建议用不实用alpha test,或者用alpha blend来代替。
 
  tile-based gpu又分为Tiled Deferred(PowerVR)和Tiled(Adreno,Mali),两者都是在tile里进行渲染,而区别是TBR有自己的预处理,可以只着色可见像素。
图 1 三种管线。
  TBDR,以苹果设备用的ImgTec的PowerVR系列来说,在渲染处理时,会在fragment shading 阶段提供,在每个tile使用Deferred的方法,进行Hidden Surface Removal(HSR)的处理,原理是fs阶段前,对多边形进行预处理,决定它的哪个像素会对最终结果产生贡献,后面就只对这些像素进行着色。这个功能需要对不透明几何体进行排序。也就是说,要进行这种优化,必须要确保一定有能遮挡的像素,然而使用带有discard的shader指令,例如alpha-test,sample mask,alpha-to-coverage等等,会使得一些本来被遮挡的像素对最终结果产生贡献,所以,这个特性可能只能对一部分物体产生作用,从而产生额外的状态切换消费。以及该fragment额外隐藏像素的处理。
  
图2 ImgeTec的渲染处理
除此之外,ImgeTec还有另一个depth-only pass功能,生成深度缓冲,再次进行渲染时,就可以获取每个像素的可见深度,只有可见像素才会进行处理。所以,对于苹果设备来说,在CPU阶段对不透明物体的那种从前向后预处理排序是没有必要的。而是应该根据渲染状态来排序。
图3 ImgTec的渲染提示
  TBR也上有提供类似的HSR方法,也就是early z-cull,使用粗糙,低精度和分辨率的Zbuffer进行depth-test,测试失败的fragment则不传说给rasterization。如果打开alpha test,后果跟TBDR也是类似的。
图4 TBDR的Deferred vs TBR的 Early z
图5 Qualcomm的TBR
而IMR上,还是按照传统方法,尽可能的在CPU上进行Cull,以及从前向后进行距离排序,也提高erlay-z的效率。

不透明物体,early-z的overdraw测试,只有PowerVR不需要进行预先排序处理。红色是从前向后绘制,蓝色是从后向前绘制

如图,当绘制透明和半透明混合物体时,必须使用discard命令的话,对性能的消耗还是很大的
不同芯片上的的推荐绘制顺序
OpenGL Insights Performance Tuning for Tile-Based Architectures
http://www.seas.upenn.edu/~pcozzi/OpenGLInsights/OpenGLInsights-TileBasedArchitectures.pdf
Next-Generation AAA Mobile Rendering
https://de45xmedrsdbp.cloudfront.net/Resources/files/GDC2014_Next_Generation_Mobile_Rendering-2033767592.pdf
FastMobileShaders
http://aras-p.info/texts/files/FastMobileShaders_siggraph2011.pdf
High-End Graphics for Smartphones and Tablets: A Development Case Study" CEDEC 2013
http://research.tri-ace.com/Data/AndroidABC2014_Final.pptx

转载于:https://www.cnblogs.com/TracePlus/p/4037165.html

mobile cpu上禁用alpha test的相关总结相关推荐

  1. Intel CPU 上使用 pmu-tools 进行 TopDown 分析

    title: Intel CPU 上使用 pmu-tools 进行 TopDown 分析 date: 2021-01-24 18:40 author: gatieme tags: - debug - ...

  2. 面试官:Java如何绑定线程到指定CPU上执行?

    不知道你是啥感觉,但是我第一次看到这个问题的时候,我是懵逼的. 而且它还是一个面试题. 我懵逼倒不是因为我不知道答案,而是恰好我之前在非常机缘巧合的情况下知道了答案. 我感觉非常的冷门,作为一个考察候 ...

  3. PPLcnet和YOLO的碰撞,真的能在cpu上快到起飞?

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨陈TEL 来源丨GiantPandaCV [导语]这是一篇论证博客,前几天,baidu发布了PP ...

  4. FastFormers:实现Transformers在CPU上223倍的推理加速

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要5分钟 Follow小博主,每天更新前沿干货 作者:Parth Chokhra 编译:ronghuaiyang 导读 使用多头注意力的Tran ...

  5. 在VB中如何让线程或进程在指定的CPU上运行

    代码如下: Option Explicit Private Declare Function WTSEnumerateProcesses Lib "wtsapi32.dll" Al ...

  6. 如何在移动网页上“禁用”缩放?

    本文翻译自:How can I "disable" zoom on a mobile web page? I am creating a mobile web page that ...

  7. 迪士尼源码_如何在迪士尼+上禁用自动播放和背景视频

    迪士尼源码 Just like Netflix, Disney+ makes it easy to binge-watch a show by automatically playing the ne ...

  8. 操作系统应该如何在多CPU上调度工作?

    本章将介绍多处理器调度(multiprocessor scheduling)的基础知识.由于本章内容相对较深,建议认真学习并发相关的内容后再读. 过去很多年,多处理器(multiprocessor)系 ...

  9. 在Windows Mobile手机上运行Android

    Interested in Android but think you need to buy a new phone to try it out? Actually, your Windows Mo ...

最新文章

  1. python matplotlib画折线图_python使用matplotlib绘制折线图教程
  2. 解决办法在安装完Nginx后服务启动失败
  3. [mybatis]映射文件_select_resultMap_关联查询
  4. php 安全基础 附录 A. 配置选项
  5. python-ppt1
  6. 任正非谈鸿蒙系统问题不大,任正非谈鸿蒙系统:两三年重建生态,有信心打造全球生态...
  7. R语言高级算法之人工神经网络(Artificial Neural Network)
  8. 为什么有些人退休后,一下子衰老了很多?
  9. mpvue配置底部菜单栏图标路径报错
  10. Windows Mobile之开机自启动
  11. Rust : 宏、重复、及向量与递归实例
  12. linux iozone测试工具,linux系列之常用工具:iozone测试磁盘性能
  13. ENVI学习总结(五)——辐射定标和大气校正(FLAASH/QUAC)
  14. 讯飞离线语音合成(离线资源包)
  15. 【随便做做|线段树】POJ3667 Hotel
  16. 无人机动力测试台:150kg级-Flight Stand 150
  17. win10经常无法复制粘贴
  18. 如何完全的卸载ArcGIS?
  19. 响应式Web程序设计【15】
  20. 浅析智能化指挥信息系统发展

热门文章

  1. 如何知道一个域名是否存在_域名检测API实现查看一个域名在微信中是否被封
  2. python字符串排序_Python-如何对字符串列表进行排序?
  3. java enum 报错_enum报错问题,求大神帮看下
  4. linux查询设备文件信息失败怎么办,Linux下使用blkid命令查询设备及文件系统信息的方法...
  5. 入门C语言10问10答
  6. python程序设计之文件_Python程序设计之文件操作(2)
  7. Ubuntu16U盘没有不能新建粘贴文件[sdf] Write cache: disabled, read cache: enabled, doesn‘t support DPO or FUA
  8. [渝粤教育] 中国地质大学 运筹学 复习题
  9. openssh arm linux 编译,openssh编译安装到ARM嵌入式系统中
  10. php模拟论坛,模仿OSO的论坛(二)