5

我想知道是否有可能在没有 Xorg 及其 DDX 驱动程序的情况下,仅使用内核模块和用户空间驱动程序的其余部分来获得图形硬件加速。我问这个是因为我开始在嵌入式平台上进行开发(类似于 beagleboard 或更粗略的带有集成 GPU 的德州仪器 ARM 芯片),并且我将获得硬件加速而无需图形服务器的开销(这不是需要)。

如果是,如何?我在考虑 OpenGL 或 OpengGLES 实现,或 Qt 嵌入式http://harmattan-dev.nokia.com/docs/library/html/qt4/qt-embeddedlinux-accel.html

并且 TI 提供了大量文档,但我仍然不清楚 http://processors.wiki.ti.com/index.php/Sitara_Linux_Software_Developer%E2%80%99s_Guide

谢谢你。

4

2 回答 2

7

答案将取决于您的用户应用程序。如果一切都是裸机并且您的应用程序团队正在编写一切,那么可以按照 Fredrik 的建议使用DirectFB API 。如果您使用 GTK 的帧缓冲版本,这可能会特别有趣。

但是,如果您使用的是 Qt,那么这不是最好的方法。Qt5.0 取消了 QWS(Qt 嵌入式加速)。Qt 正在迁移到LightHouse,现在称为QPA。如果您编写的QPA插件通过您公开的任何内核机制使用图形加速,那么您已经 加速了Qt 图形。同样令人感兴趣的可能是Wayland 架构WaylandQPA插件。Qt4.8+ 和 Qt5.0+ 中 存在对QPA的支持。Skia也是一个有趣的图形 API,支持 OpenGL 后端;安卓设备使用 Skia。

获得图形加速很容易。你要合成吗?你的记忆脚印是多少?谁是你的开发者受众,他们会为API编程?您需要对象功能还是只需要绘制图元?SKIAPegUIWindML和成熟的图形框架(Gtk、Qt)之间存在很大差异,这些框架具有人们今天所期望的所有小部件和动态效果。对OpenGL ES API进行编程乍一看似乎很好,但如果您的应用程序有任何复杂性,您将需要更丰富的图形框架;主要是重复Mats Petersson 的评论。

编辑:来自Qt 嵌入式加速链接,

  1. CPU blitter - 最慢
  2. 硬件 blitter - 例如,directFB。快速内存移动通常使用位操作而不是机器字,例如 DMA。
  3. 2D 矢量 - OpenVG,简图绘图,带有位操作。
  4. 3D 绘图 - OpenGL(ES) 具有多边形填充等。

这是您希望执行的绘图类型。像QtGtk这样的框架,提供了一个 API 来在屏幕上放置单选按钮、复选框、编辑框等。它还具有文本样式以及与键盘、鼠标和/或触摸屏和其他元素的交互。框架使用绘图引擎将对象放在屏幕上。

图形加速只是将Bresenham 算法之类的算法放在单独的 CPU 或专用硬件中。如果您选择的框架不支持3D对象,则这些框架不太可能需要 OpenGL 支持,并且性能可能不会更好。

最后一块拼图是窗口管理器。许多嵌入式设备不需要这个。然而,许多手机正在使用合成alpha值来创建透明窗口并允许同时看到多个应用程序。这也可能会影响您的图形 API。

此外:没有 X 的 DRI给出了一些令人信服的理由,说明这可能不是一件好事;对于单个用户任务的情况,甚至不需要DRI 。

下面是Wayland博客上的一个Wayland图形堆栈图。

韦兰图

于 2013-01-31T02:06:41.120 回答
0

这取决于 soc gpu 驱动程序实现,在 iMX6 上,您可以在帧缓冲区上使用 wayland 复合我构建了一个示例项目作为参考

在 imx6D/Q 上带有 Wayland 的 Qt

在omap3上有一个项目

omap3 sgx 韦兰

于 2014-02-20T06:10:35.523 回答