opengl - 如何在 Ubuntu 上使用 Mesa 10.1 启用 OpenGL 3.3

标签 opengl ubuntu mesa

我正在尝试使用 AMD Radeon 6950 获得基于 OpenGL 的渲染引擎,该引擎依赖于 OpenGL 3.3 和 GLSL 3.3 在 Ubuntu 13.10 上运行。我想使用开源驱动程序 (radeon ),它们依赖于 Mesa 来实现 OpenGL。 Ubuntu 13.10 仅提供“开箱即用”的 Mesa 9.2(实现 OpenGL 3.1)。但是可以从 this PPA 安装 Mesa 10.1(实现 OpenGL 3.3)如本线程中所述:

计算器溢出:OpenGL & GLSL 3.3 on an HD Graphics 4000 under Ubuntu 12.04

我使用了与那里解释的完全相同的步骤:

1.) Add the PPA Repository
  $ sudo add-apt-repository ppa:oibaf/graphics-drivers
2.) Update sources
  $ sudo apt-get update
3.) Dist-upgrade (rebuilds many packages)
  $ sudo apt-get dist-upgrade
4.) Then I rebooted.

Mesa 10.1 已成功安装。但是,glxinfo 虽然现在报告正在使用 Mesa 10.1,但仍仅报告 OpenGL 3.0(兼容配置文件)和 OpenGL 3.1(核心配置文件):

$ glxinfo | grep OpenGL
OpenGL vendor string: X.Org
OpenGL renderer string: Gallium 0.4 on AMD CAYMAN
OpenGL core profile version string: 3.1 (Core Profile) Mesa 10.1.0-devel (git-7f57408 saucy-oibaf-ppa+curaga)
OpenGL core profile shading language version string: 1.40
OpenGL core profile context flags: (none)
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 10.1.0-devel (git-7f57408 saucy-oibaf-ppa+curaga)
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:

这是为什么呢?如何启用 OpenGL 3.3?通过对比可以看出 the StackOverflow thread我提到过,可以让 glxinfo 报告 OpenGL 3.3。我知道 glxinfo 可能会根据 the Mesa 10.1 Release Notes 报告错误的版本号,但是我尝试运行的渲染引擎因此失败

我使用以下代码生成一个窗口:

glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 3);
glfwOpenWindowHint(GLFW_OPENGL_PROFILE, 0);

if(GL_TRUE != glfwOpenWindow(
    _windowDimensions.x, _windowDimensions.y,
    0, 0, 0, 0, 32, 0, GLFW_WINDOW))
{
    THROW("GLFW error: failed to create window.");
}

当我尝试使用此设置运行渲染引擎时,由于不支持 OpenGL 3.3,会抛出上述异常。我可以将 GLFW_OPENGL_VERSION_MINOR 设置为 0,然后窗口可以正常打开,但稍后会抛出异常,因为需要 GLSL 3.3 着色器。

另请注意,当我使用专有的 fglrx 驱动程序(然后 glxinfo 报告 OpenGL 4.2 版)时,渲染引擎运行良好,因此应用程序本身确实不是问题,但支持的 OpenGL 是。

那我做错了什么?为什么 Mesa 10.1 不支持 OpenGL 3.3?我的显卡当然支持。

这里有一些可能有用的附加信息。

$ apt-cache policy libgl1-mesa-glx
libgl1-mesa-glx:
  Installed: 10.1~git1402041945.7f5740+curaga~gd~s
  Candidate: 10.1~git1402041945.7f5740+curaga~gd~s
  Version table:
 *** 10.1~git1402041945.7f5740+curaga~gd~s 0
        500 http://ppa.launchpad.net/oibaf/graphics-drivers/ubuntu/ saucy/main amd64 Packages
        100 /var/lib/dpkg/status
     9.2.1-1ubuntu3 0
        500 http://archive.ubuntu.com/ubuntu/ saucy/main amd64 Packages


$ lspci -vv
...snip...
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Cayman PRO [Radeon HD 6950] (prog-if 00 [VGA controller])
    Subsystem: Hightech Information System Ltd. Device 2307
    Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
    Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 0, Cache Line Size: 64 bytes
    Interrupt: pin A routed to IRQ 53
    Region 0: Memory at c0000000 (64-bit, prefetchable) [size=256M]
    Region 2: Memory at fe620000 (64-bit, non-prefetchable) [size=128K]
    Region 4: I/O ports at e000 [size=256]
    Expansion ROM at fe600000 [disabled] [size=128K]
    Capabilities: <access denied>
    Kernel driver in use: radeon
...snip...


$ lsmod | egrep 'radeon|fglrx'
radeon               1402995  3
i2c_algo_bit           13413  1 radeon
ttm                    84169  1 radeon
drm_kms_helper         52710  1 radeon
drm                   297056  5 ttm,drm_kms_helper,radeon


$ modinfo radeon
filename:       /lib/modules/3.11.0-15-generic/kernel/drivers/gpu/drm/radeon/radeon.ko
license:        GPL and additional rights
description:    ATI Radeon
author:         Gareth Hughes, Keith Whitwell, others.
...snip...
firmware:       radeon/CAYMAN_smc.bin
firmware:       radeon/CAYMAN_rlc.bin
firmware:       radeon/CAYMAN_mc.bin
firmware:       radeon/CAYMAN_me.bin
firmware:       radeon/CAYMAN_pfp.bin
...snip...
srcversion:     D174B1E4686391B33437915
alias:          pci:v00001002d000099A4sv*sd*bc*sc*i*
alias:          pci:v00001002d000099A2sv*sd*bc*sc*i*
...snip...
depends:        drm,drm_kms_helper,ttm,i2c-algo-bit
intree:         Y
vermagic:       3.11.0-15-generic SMP mod_unload modversions 
parm:           no_wb:Disable AGP writeback for scratch registers (int)
parm:           modeset:Disable/Enable modesetting (int)
parm:           dynclks:Disable/Enable dynamic clocks (int)
parm:           r4xx_atom:Enable ATOMBIOS modesetting for R4xx (int)
parm:           vramlimit:Restrict VRAM for testing (int)
parm:           agpmode:AGP Mode (-1 == PCI) (int)
parm:           gartsize:Size of PCIE/IGP gart to setup in megabytes (32, 64, etc) (int)
parm:           benchmark:Run benchmark (int)
parm:           test:Run tests (int)
parm:           connector_table:Force connector table (int)
parm:           tv:TV enable (0 = disable) (int)
parm:           audio:Audio enable (1 = enable) (int)
parm:           disp_priority:Display Priority (0 = auto, 1 = normal, 2 = high) (int)
parm:           hw_i2c:hw i2c engine enable (0 = disable) (int)
parm:           pcie_gen2:PCIE Gen2 mode (-1 = auto, 0 = disable, 1 = enable) (int)
parm:           msi:MSI support (1 = enable, 0 = disable, -1 = auto) (int)
parm:           lockup_timeout:GPU lockup timeout in ms (defaul 10000 = 10 seconds, 0 = disable) (int)
parm:           fastfb:Direct FB access for IGP chips (0 = disable, 1 = enable) (int)
parm:           dpm:DPM support (1 = enable, 0 = disable, -1 = auto) (int)
parm:           aspm:ASPM support (1 = enable, 0 = disable, -1 = auto) (int)


$ dpkg -S /lib/modules/3.11.0-15-generic/kernel/drivers/gpu/drm/radeon/radeon.ko
linux-image-extra-3.11.0-15-generic: /lib/modules/3.11.0-15-generic/kernel/drivers/gpu/drm/radeon/radeon.ko


$ apt-cache policy linux-image-extra-3.11.0-15-generic
linux-image-extra-3.11.0-15-generic:
  Installed: 3.11.0-15.25
  Candidate: 3.11.0-15.25
  Version table:
 *** 3.11.0-15.25 0
        500 http://archive.ubuntu.com/ubuntu/ saucy-updates/main amd64 Packages
        500 http://archive.ubuntu.com/ubuntu/ saucy-security/main amd64 Packages
        100 /var/lib/dpkg/status

最佳答案

他们没有告诉您,但间接暗示(“某些驱动程序不支持 OpenGL 3.3 中所需的所有功能。”)的是,在上一个官方版本 的 Mesa (10.0),GL 3.3 仅适用于 Intel 硬件。这是英特尔密切参与 Mesa 项目的乐趣之一。如果您希望在 AMD 硬件上以任何形式获得可靠的 GL 3.3 支持,您应该暂时使用 fglrx(专有的 AMD 驱动程序)。


Mesa 10.1 的开发版本可能会在 radeon 驱动程序上实现 GL 3.3,但您需要请求 3.3 核心配置文件。您目前没有这样做。

这个:

glfwOpenWindowHint(GLFW_OPENGL_PROFILE, 0);

实际上需要这样:

glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

此外,没有 GL 3.0 兼容性配置文件或 3.1 核心配置文件之类的东西。直到 3.2 才将配置文件引入 OpenGL。 GL 3.1 中有一个GL_ARB_compatibility 的概念,但这与配置文件不是一回事; glxinfo 提供误导性信息。

关于opengl - 如何在 Ubuntu 上使用 Mesa 10.1 启用 OpenGL 3.3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21565680/

相关文章:

linux - Linux 与 macOS 中的巨大 OpenGL 性能差异,相同的硬件

node.js - 永远在 ubuntu 上

python-2.7 - virtualenv python-ldap 安装错误

android - 关于启动Android虚拟设备时GPU模式错误

headless - 如何正确编译 ParaView 以进行 headless (headless)离屏渲染?

linux - 具有 GPU 支持但不支持窗口的离屏渲染

opengl - 统一 block 的动态数量

c++ - GL_TEXTURE_RECTANGLE_ARB 不适用于着色器和 OS X

c++ - 无纹理的四边形显得较暗

node.js - sudo apt-get install npm 未安装