web-dev-qa-db-ja.com

UbuntuでMesa 10.1を使用してOpenGL 3.3を有効にする方法

AMD Radeon 6950を使用してUbuntu 13.10で実行するOpenGL 3.3およびGLSL 3.3に依存するOpenGLベースのレンダリングエンジンを取得しようとしています。依存するオープンソースドライバー(radeon)を使用したいOpenGL実装のためのMesa。 Ubuntu 13.10はMesa 9.2(OpenGL 3.1を実装)のみを「そのまま」提供します。ただし、このスレッドで説明されているように、Mesa 10.1(OpenGL 3.3を実装)を this PPA からインストールすることは可能です。

StackOverflow: buntu 12.04のHD Graphics 4000上のOpenGL&GLSL 3.

私はそこで説明されているのとまったく同じ手順を使用しました:

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を有効にするにはどうすればよいですか?先ほど触れた StackOverflowスレッド の比較からわかるように、glxinfoにOpenGL 3.3を報告させることができます。 glxinfoが誤ったバージョン番号を報告する可能性があることを認識しています Mesa 10.1リリースノート ただし、実行しようとしているレンダリングエンジンこれが原因で失敗します

次のコードを使用してウィンドウを生成します。

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
6
Malte Skoruppa

彼らがあなたに教えていないが、間接的に示唆していること("一部のドライバはOpenGL 3.3で必要なすべての機能をサポートしていない。")、それは最後の公式リリース Mesa(10.0)の場合、GL 3.3はIntelハードウェアでのみ機能します。これは、インテルがMesaプロジェクトに密接に関与したことの喜びの1つです。 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が誤解を招く情報を提供しています。

12

私は「Ubuntu 12.04のHD Graphics 4000上のOpenGLとGLSL 3.3」というスレッドOPの言及に答えましたが、情報が非常に少ないように思われるので、ここでも同じ答えを出すと思いました。これは、freeglutとglewを使用するユーザーに有効です。

だから私はこれを取り巻くスレッドをたくさん見ました、そして私はここが応答するのに良い場所だと思いました。私はIntel ivybridgeでUbuntu 15.04を実行しています。 「Linux用Intel Graphicsインストーラー」アプリケーションを使用した後、glxinfoはopenGlに関する次の情報を提供します。

_OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.6.0
OpenGL core profile shading language version string: 3.30
OpenGL version string: 3.0 Mesa 10.6.0
OpenGL shading language version string: 1.30
_

これから、コアプロファイルとglslバージョンが3.3であることがわかりますが、互換性のあるopenGlは3.0のみであるため、コードを3.3で実行する場合はopenglコアプロファイルとglslコアプロファイルの両方を指定する必要があります。次の手順は、freeglutとglewを使用している場合に機能します。

-glsl #versionは、コアプロファイルが必要であることを指定する必要があります。

_#version 330 core_

-opengl 3.3を指定します。

glutInitContextVersion (3, 3);

-最後にglewInit()の前にglewExperimentalをtrueに設定します。

_glewExperimental = GL_TRUE;_

これが一部の人々が始めるのに役立つことを願っています:)

1
lecker909