加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Linux图形系统与GPU通信的最低级开放/公共API是什么?

发布时间:2020-12-14 01:28:18 所属栏目:Linux 来源:网络整理
导读:我有一个想法,在过去,XFree86使用/ dev / fb * framebuffer设备.但现在看起来GUI系统使用OpenGL,这是一个开放标准.那么OpenGL是最低级别的开放API吗?通过’开放’,我的意思是没有模糊的私人ioctl或闭源的东西. 更新: 在与@datenwolf讨论后,我得到了我需要
我有一个想法,在过去,XFree86使用/ dev / fb * framebuffer设备.但现在看起来GUI系统使用OpenGL,这是一个开放标准.那么OpenGL是最低级别的开放API吗?通过’开放’,我的意思是没有模糊的私人ioctl或闭源的东西.

更新:

在与@datenwolf讨论后,我得到了我需要的东西,@ datenwolf也提供了很好的答案.
如果有人想要更多编码细节:X服务器驱动程序是任何GPU上X系统的最低公共级别.要了解X服务器驱动程序必须实现哪种接口:请参阅DDX Design,它是最新X.org的详细文档,告诉您如何编写X驱动程序.

解决方法

在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进行内存访问.在这种情况下,内核对与图形硬件的通信没有任何支持.但出于安全性和性能原因,没有人(程序)再这样做了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读