代码改变世界

如何开发绚丽、高效率的界面(Windows嵌入式系统)(三)

2009-11-30 22:12 王克伟 阅读(...) 评论(...) 编辑 收藏

声明

上一篇文章:如何开发绚丽、高效率的界面(Windows嵌入式系统)(二)

我从硬件的基础知识介绍起,面较广,但是这些知识有助于更深入的掌握Graphics programming。下一篇文章介绍DirectDraw。

 

2.Windows系统下图形编程的相关基础知识

做Windows下的Graphics programming有哪些知识需要知道的呢?请看MSDN的说明:

"Graphics programming requires specialized knowledge of page flipping, animation, pixel addressing, color representation, video-related concepts, coordinate systems, matrices, and the way physical objects behave in the real world (physics). "

 

思考以下问题:

1.GPU是什么?如何工作?

2.什么是System Memory?什么是Video Memory?CPU访问Video Memory为什么很慢?

3.CPU和GPU如何协作?

4.GPU vs. CPU

5.显示器是如何显示的?

6.色彩深度是什么?

7.DirectDraw是什么?DirectX又是什么?Windows Mobile/Windows Embeded CE中如何使用DirectX?GAPI、GDI、GDI+、DirectDraw等又是什么关系?

8.DirectDraw中的Color Keying(色彩键码)是什么?

9.图片格式有哪些?位图在内存中是以什么形式存储的?什么是Sprite?如何表示图片的透明?

10.如何在显示器上绘图?Page Flipping是什么?

11.什么是DirectDrawClippers(剪切器)?为什么需要它?

12.什么是DirectDraw Surface?

13.硬件对开发绚丽的界面有哪些限制,如何考虑?

14.ARM处理器对图形加速的支持情况如何?目前市场如何?未来会如何?

 

1.GPU是什么?如何工作?

"A graphics processing unit or GPU (also occasionally called visual processing unit or VPU) is a specialized processor that offloads 3D graphics rendering from the microprocessor. It is used in embedded systems, mobile phones, personal computers, workstations, and game consoles. Modern GPUs are very efficient at manipulating computer graphics, and their highly parallel structure makes them more effective than general-purpose CPUs for a range of complex algorithms. In a personal computer, a GPU can be present on a video card, or it can be on the motherboard. More than 90% of new desktop and notebook computers have integrated GPUs, which are usually far less powerful than those on a dedicated video card.”

如果想更深入了解,推荐NVIDIA文档:《How GPUs Work》

IEEE的文章在这里:http://www.computer.org/portal/web/csdl/doi/10.1109/MC.2007.59,但是是收费的。

 

2.什么是System Memory?什么是Video Memory?CPU访问Video Memory为什么很慢?

System Memory是被Cached,CPU直接访问的RAM(CPU-local),而Video Memory是GPU直接访问的RAM(GPU-local)。另外在Direct3D中还会遇到一个AGP Memory的概念,关于它和Video Memory的区别在论坛中的讨论请见这里,简单的说AGP Memory是没有Cached的CPU-local RAM。

CPU访问Video Memory需要经过BUS(总线),这会很慢。

维基中有关Video Memory的介绍在这里:http://en.wikipedia.org/wiki/Video_memory

"Around 2003, the video memory was typically based on DDR technology. During and after that year, manufacturers moved towards DDR2, GDDR3, GDDR4, and even GDDR5 utilized most notably by the ATI Radeon HD 4870. The effective memory clock rate in modern cards is generally between 400 MHz and 3.8 GHz. ”

目前PC和嵌入式系统中也经常采用Shared Memory构架:http://en.wikipedia.org/wiki/Shared_Memory_Architecture

我们经常看到采用Intel集成显卡的PC,Intel的集成显卡也是采用Shared Memory构架,这里是其DVMT(动态Video Memory技术)的介绍:http://www.intel.com/support/graphics/sb/cs-010488.htm

 

3.CPU和GPU如何协作?

不管它们如何协作,最终目的都是为了更好的在终端设备(比如显示器)上输出“图像”,当然它们的协作方式会一直变化。

举个协作的简单例子:

我们经常说到“xxx图形特性不支持硬件加速,需要以软件的方式实现”,那么这里的“软件”方式就是指GPU无法直接去处理,需要让CPU去代劳。

我推荐你阅读Intel以下通俗易懂的博客文章,相信能够让你简单理解这个问题:

CPU和GPU在今天计算机中的作用和位置

 

4.GPU vs. CPU

“CPU和GPU都是具有运算能力的芯片,CPU更像“通才”——指令运算(执行)为重+ 数值运算,GPU更像“专才”——图形类数值计算为核心。在不同类型的运算方面的速度也就决定了它们的能力——“擅长和不擅长”。芯片的速度主要取决于三个方面:微架构,主频和IPC(每个时钟周期执行的指令数)。”

微架构:

“CPU的微架构是按照兼顾“指令并行执行”和“数据并行运算”的思路而设计的,就是要兼顾程序执行和数据运算的并行性、通用性以及他们的平衡性。CPU的微架构偏重于程序执行的效率,不轨一味追求某种运算极致速度而牺牲程序的效率。和GPU相比,CPU核心的重复设计部分不多,这种复杂性不仅以晶体管的多寡来衡量,还来自于CPU要处理的逻辑复杂度。

GPU主要进行图形运算,图形运算的特点是大量同类型数据的密集运算——如图形的矩阵运算,GPU的微架构就是面向适合于矩阵类型的数值计算而设计的,大量重复设计的计算单元,这类计算可以翻成众多独立的数值计算——大量数值运算的线程,而且数据之间没有像程序执行的逻辑相关性。GPU微架构复杂度不高,尽管晶体管数量不少。从应用的角度看,如何运用好GPU的并行计算能力主要的工作是开发好它的驱动程序。”

可见复杂的逻辑处理,例如AI,是GPU所不擅长的,AI的处理一般交给CPU去做。

clip_image002[1]

主频:

目前主流的CPU的主频一般在1GHz以上,而GPU的主频一般在500~600MHz。

IPC:

“这个方面,CPU和GPU无法比较,因为GPU大多数指令都是面向数值计算的,少量的控制指令也无法被操作系统和软件直接使用。如果比较数据指令的IPC,GPU显然要高过CPU,因为并行的原因。但是,如果比较控制指令的IPC,自然是CPU的要高的多。原因很简单,CPU着重的是指令执行的并行性。

另外,目前有些GPU也能够支持比较复杂的控制指令,比如条件转移、分支、循环和子程序调用等,但是GPU程序控制这方面的增加,和支持操作系统所需要的能力CPU相比还是天壤之别,而且指令执行的效率也无法和CPU相提并论。”

上面的语气有点说CPU好,GPU不好的味道。不过从目前GPU在GP(通用计算)的发展看到,GPU也在逐渐具备CPU的更多能力:http://gpgpu.org/

 

更多参考资料:

http://www.gamedev.net/

Nvidia搅局英特尔Atom CPU与GPU的爱恨情仇

CPU和GPU擅长和不擅长的方面

也谈CPU和GPU之间的关系:融合、取代还是共存?

 

5.显示器是如何显示的?

CRT显示器工作原理简介:

显示器的显示系统和电视机类似,主要部件是显像管 (电子枪)。在彩色显示器中,通常是3个电子枪,索尼Trinitron的3个电子枪在一起, 也称为单枪。显示管的屏幕上涂有一层荧光粉,电子枪发射出的电子击打在屏幕上,使被击打位置的荧光粉发光,从而产生了图像, 每一个发光点又由“红”“绿”“蓝”三个小的发光点组成,这个发光点也就是一个象素。由于电子束是分为三条的,它们分别射向屏幕上的这三种不同的发光小点,从而在屏幕上出现绚丽多彩的画面。

彩色显像管屏幕上的每一个像素点都由红、绿、蓝三种涂料组合而成,由三束电子束分别激活这三种颜色的磷光涂料,以不同强度的电子束调节三种颜色的明暗程度就可得到所需的颜色,这非常类似于绘画时的调色过程。
关于更详细的知识,比如荫罩(Shadow Mask)在此略过。

(摘录自www.allwiki.com)

 

LCD(Liquid Crystal Display)显示器:

液晶显示器是以液晶材料为基本组件,由于液晶是介于固态和液态之间,不但具有固态晶体光学特性,又具有液态流动特性。LCD即是利用了这些特征。

在不加电压下,光线会沿着液晶分子的间隙前进而转折90度,所以光可通过。但加入电压后,光顺着液晶分子的间隙直线前进,因此光被滤光板所阻隔。

液晶是具有流动特性的物质,所以只需外加很微小的力量即可使液晶分子运动,以最常见普遍的向列型液晶为例,液晶分子可轻易的藉著电场作用使得液晶分子转向,由于液晶的光轴与其分子轴相当一致,故可借此产生光学效果,而当加于液晶的电场移除消失时,液晶将藉著其本身的弹性及黏性,液晶分子将十分迅速的恢复原来未加电场前的状态。

根据光源的位置LCD显示器有透射和反射显示之分。透射型LCD由一个屏幕背后的光源照亮,而观看则在屏幕另一边(前面),这样的显示器具有较高的高亮度。而反射型LCD具有较高的对比度。

LCD技术也是根据电压的大小来改变亮度,每个 LCD 的子图元显示的颜色取决于色彩筛检程序。由于液晶本身没有颜色,所以用滤色片产生各种颜色,而不是子图元,子图元只能通过控制光线的通过强度来调节灰阶,只有少数主动矩阵显示采用类比信号控制,大多数则采用数位信号控制技术。大部分数位控制的 LCD 都采用了 8 位控制器,可以产生 256 级灰阶。每个子图元能够表现 256 级,那么你就能够得到 256^3种色彩,每个图元能够表现 16,777,216 种成色。因为人的眼睛对亮度的感觉并不是线性变化的,人眼对低亮度的变化更加敏感,所以这种 24 位的色度并不能完全达到理想要求。工程师们通过脉冲电压调节的方法以使色彩变化看起来更加统一。

彩色LCD中,每个画素分成三个单元,或称子画素,附加的滤光片分别标记红色,绿色和蓝色。三个子画素可独立进行控制,对应的画素便产生了成千上万甚至上百万种颜色。老式的CRT采用同样的方法显示颜色。根据需要,颜色组件按照不同的画素几何原理进行排列。

主动矩阵式LCD显示器与CRT相比较小,需要很少的电量。事实上,它已经变成了可携式设备的标准显示器,从 PDA 到笔记型电脑均广泛运用。但不管怎样,LCD技术还是可悲的效率低下:即使你将萤幕显示白色,从背景光源中发射的光也只有不到10%穿过萤幕发出,其他的都被吸收。所以目前新型的电浆显示器的耗电量已经比同面积的液晶显示器低。

TFT-LCD 即是thin-film transistor liquid-crystal display的缩写(薄膜电晶体液晶显示器),为目前最新技术所制的液晶显示器,也更为复杂。

(摘录自维基百科,经笔者适当整理。)

 

等离子显示器:

又称电浆显示器(Plasma Display Panel,简称电浆)。是一种平面显示屏幕,光线由两块玻璃之间的离子,射向磷质而发出。放出的气体并无水银成份,而是使用惰性气体氖及氙混合而成,这种气体是无害气体。

电浆显示器甚为光亮(1000 lx 或以上),可显示更多种颜色,也可制造出较大面积的显示屏,最大对角可达381厘米 (150吋)。等离子显示屏的对比度亦高,可制造出全黑效果,对观看电影尤其适合。显示屏厚度只有6厘米,连同其他电路板,厚度亦只有10厘米。

电浆的发光原理是在真空玻璃管中注入惰性气体或水银蒸气,加电压之后,使气体产生等离子效应,放出紫外线,激发荧光粉而产生可见光,利用激发时间的长短来产生不同的亮度。电浆显示器中,每一个像素都是三个不同颜色(三原色)的等离子发光体所产生的。由于它是每个独立的发光体在同一时间一次点亮的,所以特别清晰鲜明。电浆显示器的使用寿命约5~6万个小时,会随着使用的时间,其亮度会衰退。

等离子显示屏于1964年由美国伊利诺大学两位教授Donald L. Bitzer及H. Gene Slottow发明。原本只可显示单色,通常是橙色或绿色。

1980年代个人电脑刚刚普及,电浆显示器当时曾一度被拿来用作电脑萤幕。这是由于当时的液晶显示发展仍未成熟,只能进行黑白显示,对比低且液晶反应时间太长的原因所致。直到薄膜电晶体液晶显示器(TFT-LCD)被发明,电浆显示器才渐渐被赶出电脑萤幕市场。

由于材料与结构性限制,让电浆显示器不能往20吋以下的小尺寸发展,乃为市场竞争上的最大弱点。

(摘录自维基百科。)

 

6.色彩深度是什么?

又称色彩位数,在某一分辨率下,每一个像素点可以有多少种色彩来描述,它的单位是“bit”。典型的色深是8-bit、16-bit、24-bit和32-bit。深度数值越高,可以获得更多的色彩。

在Windows 7中,支援的显示模式包括了16位的sRGB、24位的sRGB、30位的sRGB、30位宽色域的sRGB、48位的scRGB。

显示器的色彩品质,下图是我R60笔记本支持的色彩品质,但是我笔记本的LCD并不是真正支持1670万种颜色(还有8位记录Alpha值),至于LCD具体如何处理这要看LCD的相关知识,在此略过。

clip_image002[1]

 

7.DirectX是什么?DirectDraw又是什么?Windows Mobile/Windows Embeded CE中如何使用DirectX?GAPI、GDI、GDI+、DirectDraw等是什么关系?

"DirectX is a set of low-level APIs for creating games and other high-performance multimedia applications.
It includes support for high-performance 2D and 3D graphics, sound, and input.”

DirectX后面的"X代表Graphics、Sound等等,Direct有“更直接的”的含义,对硬件的操作更直接,而不需要经过操作系统太多层。更多请见:http://zh.wikipedia.org/wiki/DirectX

DirectDraw是DirectX的基础,Direct3D、DirectShow等在2D呈现(Render)时使用到DirectDraw技术。在桌面操纵系统上微软已经将DirectDraw技术合并到Direct3D中,起一个新名:DirectGraphics。

Windows Mobile/Windows Embeded CE上的DirectDraw、Direct3D分别叫做DirectDraw、Direct3D Mobile,是桌面版本的一个子集。开发方法与在桌面系统基本相同。Windows Mobile/Windows Embeded CE开发文档中有更详细的说明。

GAPI微软声明已经集成进DirectDraw中,不再有GAPI支持。关于GDI与DirectDraw的区别在后面会详细讲到。

 

8.DirectDraw中的Color Keying(色彩键码)是什么?

DirectDraw 可以把某种颜色或某个范围的颜色指定为一个颜色值,这个颜色值是由DDCOLORKEY结构即色彩键码说明的,DDCORLORKEY结构说明如下:

typedef struct _DDCOLORKEY
{
DWORD dwColorSpaceLowValue; //颜色范围的低端
DWORD dwColorSpaceHighValue; //颜色范围的高端
} DDCOLORKEY;

当我们对表面进行拷贝操作时,表面中哪些像素不被拷贝是由色彩键码决定的。例如当DDCOLORKEY结构的两个分量都为零时,表面内所有置为零的像素都不能被拷贝。又例如,当表面是24位RGB模式时,若想指定RGB=(120,120,120)像素不被拷贝,则应该:

DDCOLORKEY ddck;
ddck.dwColorSpaceLowValue=RGB(120,120,120);
ddck.dwColorSpaceHighValue=RGB(120,120,120);
surf->SetColorKey(DDCKEY_SRCBLT,&ddck);

其中SetColorKey()函数是把色彩键码赋给表面surf。这样,在对表面surf的blt操作期间RGB值为(120,120,120)的像素不能被拷贝。

 

9.图片格式有哪些?位图在内存中是以什么形式存储的?什么是Sprite?

图片压缩格式主要有以下几种,了解更多请直接点击对应的链接:

ISO/IEC/ITU-T

JPEG · JPEG 2000 · JPEG XR · lossless JPEG · JBIG · JBIG2 · PNG · WBMP

Others:

APNG · BMP · DjVu · EXR · GIF · ICER · ILBM · MNG · PCX · PGF · TGA · TIFF

“位图是一副图片在计算机里被当作一个像素值的数组来存储。这么定义的基本上可以是计算机上的任何图片,通常是一块由像素组成的矩形。Sprite通常是有透明区域的位图(也就是你看到的不规则图形)。”

 

10.Page Flipping是什么?

“如果你的游戏直接绘图到当前显示器,当游戏直接绘图到屏幕时用户将注意到非常明显的闪烁。解决方案是准备两个图像缓冲区,一个“前缓冲区”,一个“后缓冲区”。前缓冲区是用户看到的那个,后缓冲区不是。你把所有的操作画到后缓冲区,当完成绘制完屏幕的所有部分后,你复制后缓冲区的所有内容到前缓冲区。这就是双缓冲区,事实上现在有好几种双缓冲区模式。

通常有两种方法来执行后缓冲区到前缓冲区的传输:Blt(复制)或者Flip(页翻转)。前者用于窗口模式,后者用于全屏模式。

复制:后缓冲区的内容简单的复制到前缓冲区。页翻转:使用这种技巧,就不需要实际的复制操作。两个缓冲区都必须在显存中。为你游戏的每个框架轮流使用这两个表面来绘图。你总是绘图到当前不可见的那个缓冲区,在框架绘制完成后,你指示硬件去把这个绘制好的缓冲区当成可见的,因此在每个框架中前缓冲区现在都是后缓冲区了。”

 

11.什么是DirectDraw Clippers(剪切板)?为什么需要它?

Clip是一种技术,指预防绘图操作超出到屏幕外边或者超出一个矩形区域比如窗口。如果没有,可能会造成错误的显示,甚至内存非法访问。

我们也用它实现一些功能:

"One common use for a clipper is to define the boundaries of the screen or window. For example, imagine that you want to display a sprite as it enters the screen from an edge. You do not want to make the sprite pop suddenly onto the screen; you want it to appear as though it is smoothly moving into view. "

 

12.什么是DirectDraw Surface?

“DirectDraw使用“表面”去访问一段内存,无论是系统内存还是显存,内存段通常用来存储位图,纹理图,子图形,屏幕或窗口的当前内容。

主表面(primary surface)是用户在屏幕上可以看到的,它是显示内存的一部分。所有DirectDraw程序都有主表面,而且只有一个。它在DirectDraw表面对象之前就已经存在了,因此不能改变它的尺寸、格式和位置。

主表面有一个很重要的特性——翻页(flip)。页面翻页用于程序中,可以产生相当平滑、不闪烁的动画。一个可以翻页的主表面实际上是两个表面,一个是可见的,一个是不可见的。不可见的表面称为后备缓冲区。当发生表面翻页时,后备缓冲区就成为可见的,而以前的可见主表面则成为后备缓冲区。

clip_image001[1]

当翻页后,将原后备缓冲区页中的内容copy入可见主表面页,而同时将原可见主表面页的内容copy入后备缓冲区页。

显示器屏幕虽然每秒中刷新很多次,在此我们假定为85次,但每次都是一遍一遍地读取可见主表面中存储的显示页信息,而你对后备缓冲区的改动不会显示出来,并且也不会影响可见主表面的显示,而只有当施行翻页操作后,两页的内容互换,而你已经完成了的在原后备缓冲区的改动才会显示在屏幕上,而这个互相拷贝的过程几乎是瞬间完成的,这个时间比起每次刷新所用的时间少得多得多,两者几乎差了几乎几十万个数量级。而人眼是根本察觉不到的,所以用这种方法可以不闪烁,平滑,优质的动画效果

还有一种表面叫离屏表面,它是不能直接见到的。离屏表面作为存储缓冲区,有助于表面之间的互相切换,它的大小是可以改变的。

主表面和离屏表面都分为有调色板的和无调色板的这两类。像素深度为8位(256色)的表面称为有调色板的表面;而像素深度为16位(64K色)、24位(16M色)的像素表面称为无调色板的表面,它们存储实际的色彩值(RGB值)。

DirectDraw也支持“覆盖”,一个特殊类型的子图形,一个“覆盖”通常是屏幕上将被覆盖的包含透明位图的内存段。”

 

13.硬件对开发绚丽的界面有哪些限制,如何考虑?

No floating point processor:

The main reason most mobile devices don’t possess a floating point processor is because of power consumption. Nobody wants to play a game and have their battery die after a few minutes. Floating point data types can still be used, but they are extremely slow because they use a software-only implementation of real number data types. So avoid using them whenever possible. You should use fixed point data types and transformations instead for an increase in speed. The only disadvantage is that you may lose precision and accuracy when performing transformations and other fixed point math operations. Please refer to Chapter 4, “A Fixed Point Math Primer,” for more information on fixed point arithmetic.

Limited CPU MIPS:

Most handheld platforms run at slow clock speeds. For example, the ARM9 used in many commercial phones is clocked at 153–225MHz. In the next three years, mobile processors’ speeds reaching 1GHz will appear. Until then there are limited MIPS available for your game, and you have to be very cautious not to burn extra CPU cycles, as that will directly affect your performance.Using software-only rendering engines, you lose a lot of MIPS to the graphics processing that could be used by the game itself.

Limited memory:

Even today, memory is still at a premium for mobile phones.Most vendors will opt for the cheaper memory to save their bottom line.Memory bandwidth is also slower than you might expect with rates of 75MHz on average. Later in the chapter, you’ll find a more detailed section on what to expect for memory configurations.

Low bus bandwidth:

Slow system bus speeds will have a huge impact on vertex/polygon count and fill rates. Simply put, data sent from the CPU to the graphics engine either in software or hardware will be a bottleneck for the most part because of the bus bandwidth. Graphics vendors will optimize this as much as possible, but the developers should at least be aware of this limitation when performing certain operations, such as the data types used for vertex arrays. This will be covered in greater detail later in the chapter.

LCD screen size:

Although the resolution on handheld devices is improving (with QVGA common now and HVGA appearing by next year), the screen sizes are still small. Even with a decent resolution, you, as a developer, should always be aware of different resolutions for different devices. If you want your game to run on several phones in the market, then you will almost certainly need to support multiple screen resolutions. You should design for a flexible aspect screen ratio and reduced color depth and color formats. A screen size of a few inches by a few inches also greatly limits the types of games that look good and are playable. There will be many things that might not even be worth adding to your game—such as very high-resolution textures—since they will add very little noticeable difference, at the cost of a large increase in your game’s memory footprint.

Key pad and buttons:

The controls and buttons available on most mobile devices are very limited. They are gradually improving, and we’ll soon see devices with minijoysticks, better keypads, and additional game buttons, but for now, there should still be great consideration about what keys to use for your game. The controls should be mapped in a way that’s consistent with other games and applications (e.g., using the exit key to leave the game). Care should also be taken not to map controls in such a way that playing the game will be uncomfortable due to hand and finger position on small devices.

Limited battery life:

Battery life will always be a main concern. No one wants to play a game that drains his battery completely after only a few minutes. Great game play with high-quality visual effects and assets is always a constant trade-off when considering game play length. How long will people play your game before they have to close their phones and do something else? Always keep that in mind when considering game play length. All of the above limitations will affect battery life, some worse than others. It is always a balancing act when using CPU and memory cycles to create a game and trying not to kill your phone battery. Fortunately, batteries are continually improving, so this limitation will be reduced with time.

3D graphics hardware:

3D graphics hardware isn’t a limitation but rather has an impact on the other limitations listed above. The more work that is done by dedicated graphics hardware, the more resources will be available for other things, such as AI, physics, special effects, and so on.However, 3D hardware also introduces its own share of issues that will have to be addressed.We will cover how to optimize and increase your performance using 3D graphics hardware in the next couple of sections of this chapter. There are always hardware limitations and features that are more optimized than others, so it’s recommended that game developers read and understand the documentation provided by hardware vendors.

 

14.ARM处理器对图形加速的支持情况如何?目前市场如何?未来会如何?

2010年较高端掌上游戏设备的硬件配置统计与预测

"The Battle Royal for handheld gaming 2010:
Apple iPhone 3G s / 4G = ARM Cortex + PowerVR SGX
HTC = ARM Cortex + PowerVR
Microsoft Zune HD = ARM11 + GeForce 6
Nintendo DS2 = ARM Cortex + GeForce 9
Nokia platform = ARM11 only
Palm Pre 2 = ARM Cortex + PowerVR SGX
RIM BlackBerry = ARM9 only
Samsung = ARM Cortex + PowerVR SGX
Sony PSP2 = ARM ? + PowerVR SGX”

ARM媒体部门在ARM上支持硬件加速的计划

“iPhone所带来的“蝴蝶效应”让业界对视觉体验(Visual Experience)有了全新的认识,其图形的缩放、翻转、倒置、井深、反射、三重线性过滤等功能令用户体验耳目一新。ARM媒体处理部门图形处理经理Gareth Vaughan近日来京,为ARM针对3D GPU市场推出的Mali内核家族做推介宣传时表示,将图形硬件加速技术置于多媒体战略的核心地位,已成为越来越多OEM厂商的不二选择。

Gareth介绍说,目前业界一般以软件写入的方式,将图形加速功能整合至应用处理器之中。这样做虽然能应付一时的市场需求,但在内存资源及能耗上却不是最有效的做法。再加上手持式设备对于功耗及成本一贯的苛刻要求,厂商必须寻求更高性能与效能,但又能同时降低功耗及成本的解决方案。而这,恰恰就是Mali IP内核推出的初衷。

目前,包括Broadcom、Cisco、ERICSSON、Telechips、NXP、ZORAN、Micronas 在内的13家公司已经获得授权,他们将直接用Mali作为3D GPU用于其相关产品平台。同时,ARM还推出了为Mali配套的协议栈,包括图形处理单元、OpenGL ES和Open VG 驱动器、以及SVG-T和所有开放的JAVA图形标准,以便为客户提供更好的游戏、导航、UI和网页浏览体验。“统一图形堆栈策略使得ARM的软件IP成为主要OEM厂商软件团队的核心部分。同样,也会使ARM的图形硬件加速成为SoC设计团队的核心部分。”ARM中国区总裁谭军对此显得非常自信。

“2012年,几乎所有的高端智能手机都将会采用独立的高端GPU。其在Feature Phone、PMP、PND、STB、DTV、以及车载系统中的使用比例也将得到大幅提高。” Gareth分析说,“这些图形GPU还会转向支持OpenGL ES 2.0标准,因为统一图形(UI)界面是业界的共识。”

ARM目前提供Mali55、Mali200和Mali400三个版本。Mali55采用65nm工艺制造,在1.0平方毫米面积上支持OpenGL ES1.1和Open VG 1.0,200MHz时可支持100万像素/秒,并具备最高达16X的全景反锯齿功能(FSAA),能够在一个VGA屏幕上实现类似于成本高昂的SVGA系统,非常适用于例如网页浏览、Java游戏和3D导航等成本敏感型市场应用。同时,Mali55据称也是世界上最小的2D/3D图形GPU;

Mali200绘图解决方案则包含Mali200像素处理器及MaliGP2可程序化几何坐标处理器,两者构成一个完整的OpenGL ES 2.0可程序化绘图解决方案。两者核心都支持OpenGL ES 1.1 API及OpenGL ES 2.0可程序化API,每秒900万个三角形。除了具备16X FSAA和高动态范围光源(High Dynamic Range, HDR)着色技术外,Mali200还提供包括处理器能执行的软件、AMBA 3 AXI互连接口、高流量SDRAM 控制器,以及一个 LCD/VGA 影像控制器在内的完整系统解决方案。

多核解决方案Mali400则可实现最高达1G像素每秒的性能。“功耗和面积效率是该GPU在设计时的核心考虑。”Gareth认为,未来随着高清设备的日益普及、GPGPU带来的浮点运算的变化、以及OpenGL ES 3.0、FLASH 11、Desktop OpenGL等标准的陆续推出,一旦如Mali400这样的图形加速技术成为标准,“机顶盒与数字电视的用户界面将完全不同于过去。” ”

 

为了提高一下“阅读体验”我将文章拆分了,下一篇文章:如何开发绚丽、高效率的界面(Windows嵌入式系统)(四)