因为,每家芯片的特性不同,根据向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
Next-Generation AAA Mobile Rendering
FastMobileShaders
High-End Graphics for Smartphones and Tablets: A Development Case Study" CEDEC 2013
 

mobile cpu上禁用alpha test的相关总结的更多相关文章

  1. (转)mobile cpu上禁用alpha test的相关总结

    转自:http://www.cnblogs.com/TracePlus/p/4037165.html 因为,每家芯片的特性不同,根据向framebuffer写法的不同,分为tile-based的mob ...

  2. linux下将不同线程绑定到不同core和cpu上——pthread_setaffinity_np

    =============================================================== linux下的单进程多线程的程序,要实现每个线程平均分配到多核cpu,主 ...

  3. <转>Python 多线程的单cpu与cpu上的多线程的区别

    你对Python 多线程有所了解的话.那么你对python 多线程在单cpu意义上的多线程与多cpu上的多线程有着本质的区别,如果你对Python 多线程的相关知识想有更多的了解,你就可以浏览我们的文 ...

  4. 限制某个进程只能在某个CPU上运行

    首先可以调用GetSystemInfo查看有多少个CPU,再通过调用: BOOL WINAPI SetProcessAffinityMask( __in HANDLE hProcess, __in D ...

  5. Sql Server CPU 性能排查及优化的相关 Sql

    Sql Server CPU 性能排查及优化的相关 Sql 语句,非常好的SQL语句,记录于此: --Begin Cpu 分析优化的相关 Sql --使用DMV来分析SQL Server启动以来累计使 ...

  6. 【翻译】借助 NeoCPU 在 CPU 上进行 CNN 模型推理优化

    本文翻译自 Yizhi Liu, Yao Wang, Ruofei Yu.. 的  "Optimizing CNN Model Inference on CPUs" 原文链接: h ...

  7. 查询OSD运行在哪些cpu上

    前言 在看CPU相关的文章的时候,想起来之前有文章讨论是否要做CPU绑定,这个有说绑定的也有说不绑定的,然后就想到一个问题,有去观测这些OSD到底运行在哪些CPU上面么,有问题就好解决了,现在就是要查 ...

  8. YOLOv5】LabVIEW+OpenVINO让你的YOLOv5在CPU上飞起来

    前言 上一篇博客给大家介绍了使用opencv加载YOLOv5的onnx模型,但我们发现使用CPU进行推理检测确实有些慢,那难道在CPU上就不能愉快地进行物体识别了吗?当然可以啦,这不LabVIEW和O ...

  9. 多线程程序在单核cpu与多核cpu上是怎么工作的?

    转自 1.多线程在单核和多核CPU上的执行效率问题的讨论 a1: 多线程在单cpu中其实也是顺序执行的,不过系统可以帮你切换那个执行而已,其实并没有快(反而慢) 多个cpu的话就可以在两个cpu中同时 ...

随机推荐

  1. rsync --exclude 参数

    /usr/bin/rsync -vr --exclude=".svn" --exclude="temp" --delete /alidata/www/pro/e ...

  2. 拷贝Java项目报错

    经常需要将一个项目,导出,然后发给同事,或者是自己用另一个Eclipse工具打开. 这时,导入项目后,就会出现各种各样的问题.大牛笔记:www.weixuehao.com 代码相同,环境不同,主要是修 ...

  3. Java Hour 51 CheckStyle

    Plan List: 1 mysql 相关 2 java code style 安装体验 1 直接从eclipse install new software 安装,莫名奇妙失败,提示为缺少依赖项. 这 ...

  4. Sql server之路 (二)登录本地服务器

    安装环境 Microsoft SQL Server Management Studio Express  http://www.microsoft.com/zh-cn/download/details ...

  5. 利用SQL语句查询一个数据库中的所有表

    SQL  :  select * from information_schema.tables ORACLE: select table_name from user_tables ACCESS: s ...

  6. Android Bitmap详细介绍

    package com.testbitmapscale; import java.io.File; import java.io.FileInputStream; import java.io.Fil ...

  7. 原生JS代码实现一个Ajax异步请求

    异步加载的方式 (1) defer,只支持IE (2) async: (3) 创建script,插入到DOM中,加载完毕后callBack 实现ajax之前必须要创建一个 XMLHttpRequest ...

  8. c++ insert iterators 插入型迭代器

    insert iterators 插入型迭代器 (1)front inserters 前向插入迭代器 只适用于提供有push_front()成员函数的容器,在标准程序库中这样的容器是deque和lis ...

  9. Graph database_neo4j 底层存储结构分析(7)

    3.7  Relationship 的存储 下面是neo4j graph db 中,Relationship数据存储对应的文件: neostore.relationshipgroupstore.db ...

  10. Sublime Text 2的快速入门和常用技巧

    1. 安装扩展器包管理器Package Control组件 点击菜单 View -> Show Console 调出控制台或者按快捷键 “Ctrl + `”(1左边的符号,可能和QQ拼音输入法和 ...