W.S*_*Sun 4 linux x11 opengl user-interface gpu
我有一个想法,在过去,XFree86使用/ dev/fb*framebuffer设备.但现在看起来GUI系统使用OpenGL,这是一个开放标准.那么OpenGL是最低级别的开放API吗?通过'开放',我的意思是没有模糊的私人ioctl或闭源的东西.
更新:
在与@datenwolf讨论后,我得到了我需要的东西,@ datenwolf也提供了很好的答案.如果有人想要更多编码细节:X服务器驱动程序是任何GPU上X系统的最低公共级别.要了解X服务器驱动程序必须实现哪种接口:请参阅DDX Design,它是最新X.org的详细文档,告诉您如何编写X驱动程序.
在Linux中,内核没有"最低级API"来执行图形操作.所有图形驱动程序实际上都是在用户空间中通过所谓的"状态跟踪器"实现的,它使用特殊的内核函数直接与图形硬件¹对话.作为Mesa项目的一部分实现的开源驱动程序使用Linux特定的DRM API与硬件进行通信.NVidia和AMD的专有驱动程序都使用了非常具体的内核模块.
现在谈到最终程序可用性Mesa和专有驱动程序有点不同:
NVidia和AMD/ATI的专有驱动程序根本不为最终用户程序提供API.相反,它们被实现为由X服务器加载的模块; X服务器期望驱动程序模块遵循特定方案,该方案通常随X服务器中的主要更改而变化,因此每个X服务器主要版本通常也需要更新驱动程序模块.
X服务器又提供了一个众所周知的基于命令流的图形API.通过此API发送的图形命令由X服务器调度,并调度到驱动程序模块的正确函数.驱动程序模块依次包含与GPU通信的全部智能,并将来自X服务器的命令转换为指向GPU的命令.
可以说X服务器是当前Linux程序可用的最低级通用图形API(除了可以实现所有内容以直接使用X驱动程序模块的程序之外).
说到X11,作为Mesa项目一部分的驱动程序与专有驱动程序没什么区别.然而,因为Mesa是开源的,它的开发人员开始实现程序可以直接使用Mesa及其驱动程序而无需通过X服务器与它通信的方式.为此,他们选择使用EGL规范公开符合API的API.不幸的是,EGL本身是无用的,因为它需要一个外部显示系统(或者你只能做屏幕外渲染).
这是Wayland进入图片的地方.Wayland 不是一个显示系统.然而,它是一种允许显示系统的构建块彼此对话的协议.基于Wayland的显示系统的一个中心组件是合成器,其实际上掌握所谓的"座位"(=显示设备和相关的输入设备).想要在屏幕上显示内容的程序使用Wayland打开与合成器的连接,这为他们提供了使用EGL的显示.然后,他们可以使用它来创建实际的绘图表面来进行图形处理.
[1]:实际上对于某些驱动程序(传统硬件),必须以root权限启动X服务器,以便它可以使用特殊功能ioperm(…)
使用out*(…)
和in*(…)
函数直接访问硬件并打开/dev/mem
以进行内存访问.在这种情况下,内核对与图形硬件的通信没有任何支持.但出于安全性和性能原因,没有人(程序)再这样做了.