使用 Ubuntu 16.04 运行某些游戏(例如 Warthunder)时 Radeon r600g 驱动程序 OpenGL 出现问题

使用 Ubuntu 16.04 运行某些游戏(例如 Warthunder)时 Radeon r600g 驱动程序 OpenGL 出现问题

我目前正在尝试在 Xubuntu 16.04 (HWE) 下使用开源 Radeon 驱动程序 (r600g) 运行 Gaijin 的 Warthunder 游戏,该驱动程序适用于我的 AMD Radeon HD 6450 显卡。“glxinfo”显示的 OpenGL 版本是 3.0(和 3.3 核心),Mesa 版本是 12.0.6。

如果我运行游戏,所有的颜色都是错误的,并且到处都有奇怪的彩色条纹(多边形绘制正常,所以我猜这是一个着色器问题)。

但由于我的硬件以及 r600g 驱动程序都支持 OpenGL 4,因此我在启动游戏时将 OpenGL 版本和 GLSL 版本覆盖为 4.1:

MESA_GL_VERSION_OVERRIDE=4.1 MESA_GLSL_VERSION_OVERRIDE=410 %command%

但是因为我有一个“Caicos”芯片,其中只缺少符合 OpenGL 4 标准的“hardware-double-precision-fp64”扩展,所以我目前只能使用 OpenGL 3.3(尽管我希望 Radeon 开发人员也能为旧芯片实现软件模拟双精度支持)。

无论如何,版本覆盖大大改善了渲染效果:除了天空之外,其他一切都显示正确,天空是乌黑的,上面有一些错误颜色的部分。所以这似乎又是一个着色器问题,因为打印出了以下控制台错误消息:

EE ../../../../../src/gallium/drivers/r600/r600_state_common.c:798 r600_shader_select - Failed to build shader variant (type=1) -1 (sometimes also -12 here)
EE ../../../../../src/gallium/drivers/r600/r600_shader.c:182 r600_pipe_shader_create - translation from TGSI failed!
EE ../../../../../src/gallium/drivers/r600/r600_shader.c:3662 r600_shader_from_tgsi - GPR limit exceeded - shader requires 125 registers
EE ../../../../../src/gallium/drivers/r600/r600_shader.c:8685 tgsi_endif - if/endif unbalanced in shader

这四条消息重复了几百次。最后一个错误表明着色器代码的某些部分也未正确编码 - 这可能是 Gaijin 的错误。

到目前为止我发现的解决这个问题的唯一方法是使用专有 AMD 驱动程序 - 它只适用于 Ubuntu 15.10,并且比开源驱动程序慢约 30-50%。

我在游戏的启动日志文件中发现了所需的 OpenGL 扩展列表(正如预期的那样,“fp64 双精度”扩展未列出)但没有错误消息。

有人能告诉我解决这个问题的可能方法吗,或者升级驱动程序的最佳方法是什么?我知道最新的驱动程序中有一些 PPA,但我测试它们时它们没有改变任何东西。

欢呼吧,伊格纳提阿穆斯

相关内容