ger*_*ijk 4 kde nvidia graphics kwin
我刚刚偶然发现了libkwinnvidiahack4软件包(还有libkwinactivenvidiahack4
)。从描述中我了解到它为 KDE 窗口管理器与 Nvidia 二进制图形驱动程序结合提供了一些“技巧”。
这个包包含一个由 nvidia 卡用于 KDE 窗口管理器的库。
这个包是 KDE 工作区模块的一部分。
然而,这种描述缺乏它的实际作用。我使用 KDE/Kubuntu 并安装了 Nvidia 图形驱动程序。安装这些软件包有什么好处?他们在做什么?
我已经libkwinnvidiahack4
安装了该软件包(可能是自动安装的),但我不确定它负责什么。
运行更改日志 ( apt-get changelog libkwinnvidiahack4
) 给我一个kde-workspace
带有条目的更改日志(从中提取的几个片段):
- 移动 libkwinnvidiahack4 到它自己的包
添加包
- kde-window-manager-active
- kde-window-manager-active-gles
- libkwinactiveglutils1
- libkwinactiveglesutils1
- libkwinactiveeffects1abi3
- libkwinactivenvidiahack4
kde-window-manager/-gles 依赖于 libkwinnvidiahack4
不要安装 /usr/lib/libkwinnvidiahack.so。没有人应该链接到 libkwinnvidiahack。使 kdebase-workspace-dev 依赖于 libkdecorations4 和 libkwineffects1 而不是 kde-window-manager,因为 kde-window-manager 不包含任何可以链接的内容。
这也没有解释为什么添加这些包以及它们的作用。
经过一番谷歌搜索后,我发现了这篇文章:
该文件的唯一目的是在链接顺序中比(nvidia 的)libGL 晚,因此由它之前的动态链接器初始化,允许它尽快设置 __GL_YIELD=NOTHING 以便 libGL 注意到它。
鉴于引用来自某个 M-Graesslin,Martin 是该领域的主要维护者,因此是一个可靠的来源。
确实,查看源代码
apt-get source libkwinnvidiahack4
Run Code Online (Sandbox Code Playgroud)
这实际上是 kde 工作区模块。
kwin/nvidiahack.cpp
是有问题的源模块 - 它本身就是一个小模块
由于此hack仍在 13.04 中 - 并且是核心构建的一部分,是的,它仍然需要,其目的是确保 KDE 的 OpenGL 组件的库链接以正确的功能顺序完成。
就模块的作用而言 - 看起来它定义了一个运行时环境变量 __GL_YIELD
OpenGL 屈服行为
有几种情况,NVIDIA OpenGL 驱动程序需要等待外部状态改变才能继续。为了避免在这些情况下消耗太多 CPU 时间,驱动程序有时会让步,以便内核可以在驱动程序等待时安排其他进程运行。例如,在等待命令缓冲区中的空闲空间时,如果经过一定次数的迭代后空闲空间仍未可用,则驱动程序将在继续循环之前让步。
默认情况下,驱动程序调用 sched_yield() 来执行此操作。但是,如果有其他相同优先级的进程在 CPU 上竞争时间,这可能会导致调用进程被调度到相对较长的时间段。一个例子是基于 OpenGL 的复合管理器正在移动和重新绘制窗口,而 X 服务器试图在窗口移动时更新窗口,这都是 CPU 密集型操作。
您可以使用 __GL_YIELD 环境变量来解决这些调度问题。该变量允许用户指定驱动程序想要让步时应该做什么。
因此,黑客是永远不要等待并始终在 OpenGL 复合表面上绘画 - 很可能是为了阻止图形工件的出现。
归档时间: |
|
查看次数: |
313 次 |
最近记录: |