Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3131112
  • 博文数量: 117
  • 博客积分: 10003
  • 博客等级: 上将
  • 技术积分: 5405
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-23 09:34
文章分类

全部博文(117)

文章存档

2011年(1)

2010年(10)

2009年(69)

2008年(37)

分类: LINUX

2009-04-13 15:01:37

X Server是一个广泛使用的图形引擎,提供用户界面绘画的基础图形原语以及用户事件的截获和发布功能。X server的图形操作可以由软件实现,然而,很多的显卡提供了硬件加速功能。如果利用这些硬件加速功能来实现X server的一些图形操作,将可以极大的提高X server的性能。

目前,嵌入式上X server 使用kdrive (tinyX) 的较多,但也有逐渐向Xorg server迁移的趋势。对这两种X server,分别有一个对应的硬件加速架构: KAA 和 EXA。KAA 和EXA非常类似,kdrive 也可以使用exa架构。如果要更好的了解如何实现kaa和exa,可以参考openmoko 的Xserver: git://git.openmoko.org/git/xglamo

KAA
X server源码中,文件src/hw/kdrive/kdrive.h中的_KaaScreenInfo描述了可以使用硬件加速来实现的函数,主要有四 组:Solid, Copy, Blend和Composite。Solid组函数对屏幕上某块区域进行颜色填充;Copy组函数将屏幕上一个矩形区域拷贝到另一个位置。Blend组函 数将两块矩形区域alpha混合;Composite组函数更复杂,先将一块区域进行掩码操作,再和另一块区域alpha混合,可能还有填充,旋转能操 作。Blend函数可看作Composite的一个特例。

每组函数都有三个函数(Composite是四个), 如PrepareSolid, Solid, DoneSolid。PrepareXXX判断硬件能不能进行对应的加速操作,不能的话则仍然使用软件实现。XXX(如Solid)进行真正的硬件加速操作。DoneXXX一般不用实现。

在对某个矩形区域加速之前,这块区域需要位于显卡的framebuffer之上,包括onscreen 和 offscreen framebuffer。KAA框架中的内存管理程序(koffscreen.c)实现将一个区域拷贝到framebuffer之上,并按一定算法将过期的区域移出。

可以使用gtkperf或x11perf来测试X server的性能是否提高。

值得注意的是当需要加速的区域太小时,使用软件实现反而更快。这个时候可以再加上判断,当区域太小时,就不要移入framebuffer。如对Copy操作,在kaa.c的kaaCopyNtoN中加上判断即可。
阅读(2477) | 评论(0) | 转发(0) |
0

上一篇:Qtopia Boot Stages

下一篇:关于优化所想到的

给主人留下些什么吧!~~