天天看点

显卡概述

    参考:

    http://www.igao7.com/news/201406/1217-vv-gpu.html

    http://www.igao7.com/news/201406/1218-vv-gpu.html

一、渲染架构

1、分离的渲染架构(Discrete Shader):

    a、顶点渲染

    b、像素渲染:一条像素渲染管线有一到四个贴图单元

2、统一渲染架构(Unified Shader):

    也就是一个核心中是由一组专门的通道既负责顶点渲染又负责像素渲染的。

二、性能因素

1、图形处理单元(GPU)的性能:显卡的图形运算能力

    a、像素填充率:是指图形处理单元在每个单位时间内(即一秒内)所渲染的像素数量,单位是MPixels/S

        像素填充率 = 显卡的显示核心频率 * 像素渲染管线数量

    b、纹理填充率:是指GPU在单位时间内所能处理的纹理贴图的数量,单位是MTexels/S

        纹理填充率 = 显卡的显示核心频率 * 像素渲染管线数量 * 纹理贴图单元数量

    c、多边形填充率

    当今的桌面GPU往往都不再谈三角形生成率,或是像素填充率了,给的指标都是Shader的计算能力——GFLOPS

    不同GPU侧重很不一样,比如Mali-400,三角形很弱,像素部分,填充率强。高通Adreno 2xx,Vivante的GPU,多边形很强,Shader计算强,但填充率较弱

2、显存的性能:显卡的数据传输能力

    显存带宽:即显存在单位时间内所能够传输数据的大小,单位是GB/S

        显存带宽 = 显存频率(如果是DDR,取等效值)* 显存位宽 / 8

        显存位宽 = 显存颗粒位宽×显存颗粒数

三、显存位宽

    电脑一般都是32位真彩色显示模式,在这个模式下每个像素点的渲染需要16+32B的数据,其中前16B是基本渲染,后32B是纹理渲染。

    整个屏幕渲染一次需要的数据流 = 分辨率 * 48;

    例如分辨率是1920×1080,那么整个屏幕渲染一次需要的数据流是:1920x1080x48B=99532800B=94.92MB。

    最低显存位宽=(分辨率*48*8)/(显存频率)

四、渲染模式

    1、IMR:立即渲染模式

    目前几乎所有的桌面GPU(nVIDIA,AMD)都是IMR架构,在移动领域,nVIDIA的GeForce ULP和Vivante的GC系列GPU都是属于IMR架构。IMR架构的GPU渲染完物体后,都会把结果写到系统内存中的帧缓存里,因此就可能出现GPU花了大量的时间渲染了一个被遮挡的看不见的物体,而最后这些结果在渲染完遮挡物后被覆盖,做了无用功。这个问题称之为Overdraw。虽然现代的IMR架构GPU在一定程度上可以避免这个问题,但要求应用程序将场景里的三角形按照严格的从前往后的顺序提交给GPU,要完全避免Overdraw还是很困难的。

    另一方面,由于IMR架构的GPU频繁的读写和修改帧缓存,因此对带宽的要求比较高,同时也增加了电力的消耗。

    2、TBR:分块渲染

    ARM的Mali GPU和高通的Adreno GPU采用TBR(分块渲染)架构,实际上IMG的PowerVR也是分块渲染的。TBR架构在把三角形场景变成像素图(光栅化)前,先把整个画面分成小块,这些小块的渲染在GPU上的高速缓存里进行,这样就避免了对帧缓存(位于系统内存里)的频繁读写和修改。当然,由于一个三角形可能被分在几个不同的块里,三角形的数据(几何数据)可能被需要多次读取,但总的来说还是能大大减少对系统内存的访问,节约了带宽的同时也减少了电力消耗。

    3、TBDR:

    而PowerVR的不同之处在于,它采用的TBDR(Tile Based Deferred Rendering)架构,可以彻底避免Overdraw的问题。

    相比TBR更进一步的是,TBDR在光栅化之后,有一个HSR(Hidden Surface Removal))硬件单元,通过对一个块内的三角形进行测试,剔除掉被遮挡的三角形,合成一幅由所有可见部分组成的画面,交给后续的流水线去渲染。这样不可见部分就不需要Pixel Shader去做相应的计算,也不需要去拾取相应的纹理,节省了计算量的同时也节省了带宽,对移动设备来说有很大的帮助。

五、显卡厂家参数

    图芯技术(Vivante Corporation)

    https://en.wikipedia.org/wiki/Vivante_Corporation