Linux图形系统与GPU通信的最低级开放/公共API是什么?
我有一个想法,在过去,XFree86使用/ dev / fb * framebuffer设备.但现在看起来GUI系统使用OpenGL,这是一个开放标准.那么OpenGL是最低级别的开放API吗?通过’开放’,我的意思是没有模糊的私人ioctl或闭源的东西.
更新: 在与@datenwolf讨论后,我得到了我需要的东西,@ datenwolf也提供了很好的答案. 解决方法
在Linux中,内核没有“最低级API”来执行图形操作.所有图形驱动程序实际上都是在用户空间中通过所谓的“状态跟踪器”实现的,它使用特殊的内核函数直接与图形硬件1对话.作为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 *(…)直接访问硬件.在*(…)函数中,打开/ dev / mem进行内存访问.在这种情况下,内核对与图形硬件的通信没有任何支持.但出于安全性和性能原因,没有人(程序)再这样做了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |