libkwinnvidiahack4 包有什么作用?

libkwinnvidiahack4 包有什么作用?

我刚刚偶然发现了这些包裹libkwinnvidiahack4安装 libkwinnvidiahack4(并且libkwinactivenvidiahack4安装 libkwinactivenvidiahack4)。从描述中我了解到它与 Nvidia 二进制图形驱动程序结合为 KDE 窗口管理器提供了一些“黑客攻击”。

该软件包包含 nvidia 卡用于 KDE 窗口管理器的库。

这个软件包是 KDE 工作区模块的一部分。

但是,这个描述缺少它的实际功能。我使用 KDE/Kubuntu,并且安装了 Nvidia 显卡驱动程序。安装这些软件包有什么好处?它们有什么作用?

我已经libkwinnvidiahack4安装了该软件包(可能是自动的),但我不确定它负责什么。

运行变更日志(apt-get changelog libkwinnvidiahack4)给我kde-workspace一个带有条目的变更日志(从中取出几个片段):

  • 将 libkwinnvidiahack4 移至其自己的包中
  • 添加包

    • kde-窗口管理器-活动
    • kde-窗口管理器-active-gles
    • libkwinactiveglutils1
    • libkwinactiveglesutils1
    • libkwinactiveeffects1abi3
    • libkwinactivenvidiahack4
  • kde-window-manager/-gles 依赖于 libkwinnvidiahack4

  • 不要安装 /usr/lib/libkwinnvidiahack.so。没有人应该链接到 libkwinnvidiahack。既然 kde-window-manager 不包含任何可以链接的内容,那么让 kdebase-workspace-dev 依赖于 libkdecorations4 和 libkwineffects1,而不是 kde-window-manager。

这也不能解释为什么要添加这些包以及它们的作用。

答案1

经过一番认真的谷歌搜索后,我偶然发现了这个帖子

该文件的唯一目的是在链接顺序中晚于(nvidia的)libGL,从而由它之前的动态链接器初始化,允许它尽快设置__GL_YIELD=NOTHING,以便libGL能够注意到它。

鉴于该引文来自某位 M-Graesslin,Martin 是该领域的主要维护者,因此是一个可靠的来源。

确实,查看源代码

apt-get source libkwinnvidiahack4

这实际上是 kde 工作区模块。

kwin/nvidiahack.cpp有问题的源模块是 - 它本身就是一个小模块

从此黑客仍在 13.04 - 并且是核心构建的一部分,是的,它仍然需要,其目的是确保 KDE 的 OpenGL 组件的库链接在正确的功能秩序。

就模块的作用而言 - 它看起来像是定义了一个运行时环境变量__GL_YIELD

来自freedesktop 规格

OpenGL 屈服行为

在某些情况下,NVIDIA OpenGL 驱动程序需要等待外部状态发生变化才能继续。为了避免在这些情况下消耗过多的 CPU 时间,驱动程序有时会让步,以便内核可以在驱动程序等待期间安排其他进程运行。例如,在等待命令缓冲区中的可用空间时,如果经过一定次数的迭代后仍未有可用空间,则驱动程序将在继续循环之前让步。

默认情况下,驱动程序会调用 sched_yield() 来执行此操作。但是,如果有其他优先级相同的进程在 CPU 上争用时间,这可能会导致调用进程被调度相对较长的一段时间。一个例子是基于 OpenGL 的复合管理器正在移动和重新绘制窗口,而 X 服务器正在尝试在窗口移动时更新窗口,这两者都是 CPU 密集型操作。

您可以使用 __GL_YIELD 环境变量来解决这些调度问题。此变量允许用户指定驱动程序在需要让步时应执行的操作。

因此,技巧就是永远不要等待,并且始终在 OpenGL 复合表面上进行绘画 - 最有可能阻止图形伪影出现。

相关内容