web-dev-qa-db-ja.com

Linux上のグラフィックカードドライバーとOpenGLの関係は何ですか?

最新の専用Nvidiaドライバーをインストールしています。これはnvidia-415です(「ドライバーマネージャー」インターフェイスによる)。一部のプログラムは、OpenGL3.3がないことを訴えます。

そこで、コマンドを実行して次のことを確認しました。

$ glxinfo | grep "OpenGL version"
OpenGL version string: 3.0 Mesa 12.0.6
OpenGL core profile version string: 4.3 (Core Profile) Mesa 12.0.6

はい、バージョン3.0を使用しているようです。しかし、Mesaを見ると、「グラフィックスタック」と呼ばれ、FOSSnvidiaドライバーと最新のOpenGLが含まれています。

4.3の「コアプロファイルバージョン」もあります。だから私は4.3または3.0ですか?

だから今私は混乱しています。独自のNvidiaドライバーはMesaOpenGLで動作しますか?または、nouveauオープンソースドライバーはMesaのオープンGLでのみ動作しますか?独自のドライバーで動作するには、Nvidiaから非mesaのプロプライエタリOpenGLをインストールする必要がありますか?

3
Nick

簡単なAPI定義から始めて、そこから下に移動して、すべてのベースがカバーされていることを確認します。以下にTL; DRもあります。

APIの概要

そもそも、OpenGLは、マシンのグラフィカル機能への簡単なアクセスを容易にすることを目的とした、言語に依存しない抽象的なAPIを記述しています。これにより、ソフトウェア開発者(ビデオゲーム開発者など)は、下位レベルでハードウェアと効率的にインターフェイスし、速度、信頼性、プログラミングの容易さを確保できます。他のもの。具体的には、ソフトウェア開発者がグラフィックスハードウェアと直接話したい場合は、 アセンブリ言語 またはその他のハードウェアレベルの言語でコードを記述する必要があります。代わりに、OpenGLでは高レベルの OpenGLシェーディング言語 を使用できます。これははるかに使いやすく、ハードウェアを独自の言語で話す「上の」ステップと考えることができます。これは、とりわけ、ハードウェアへの呼び出しが非常に高速になることを意味します。

メサ

前述のように、OpenGLはAPIの仕様にすぎません。 OpenGLは、ライブラリにインストール(出力に表示されているバージョン)を提供しますが、これらを機能させるには、実装する必要があります。 )特定のOSに対して。そこでMesaが登場します。Mesa(別名Mesa 3D)はオープンソースであり、多くのLinuxディストリビューションで使用されています。もともとはOpenGLの単なる実装として考えられていましたが、最近ではそれだけではありません。また、OpenCLなどの他のAPI仕様も実装しており、ハードウェアドライバーがバンドルされています。

ハードウェアドライバー

これまで、私たちは比較的高いレベルにありました。 MesaとOpenGL仕様は、アプリケーション(またはゲーム)と、下位レベルのグラフィックカードのハードウェアドライバーとの間の単なる仲介者です。ここではいくつかのオプションがあり、Mesaは、グラフィックハードウェアのメーカーと、オープンソースイニシアチブとの協力関係に応じて、そのうちの1つを提供します。たとえば、Intelの統合グラフィックスは、ほとんどの場合、すべて、OpenGL実装、およびハードウェアドライバーにMesaを使用します。 IntelはMesaのソースコードに直接貢献しているため、グラフィックソリューション全体をMesaにすることができます。一方、Nvidiaは...

Nvidia&Nouveau

Nvidiaは、オープンソースコミュニティとの連携に関しては古典的に頑固であり、独自のクローズドソースの代替案を開発することを好みました。この頑固さにより、Linus Torvaldsは1回のインタビューで、会社についての彼の 2セント を共有するようになりました。 Linuxに関しては、Nvidiaは独自のOpenGL実装と、独自のハードウェアドライバー(すべてクローズドソース)を提供しています。 Nvidiaはいくつかの製品ドライバーをオープンソースとしてリリースしましたが、これは 製品の範囲が限られています です。 Nouvea 一方、実際には、Nvidiaのドライバーリリースから意図的にリバースエンジニアリングされたハードウェアドライバーを提供するためのオープンソースコミュニティによる取り組みです。これは勇敢な努力ですが、オープンソースコミュニティが追いつくことを余儀なくされているため、Nvidiaの独自のスタックと比較してNouveauドライバーでは新しいグラフィックカード機能が必然的に遅れていることを意味します。

TL; DR

正確なカードモデルを知らなければ、グラフィックスタックが何を使用しているかを確実に知ることは困難ですが、ほぼ確実に次のいずれかです。

  1. Nvidiaは、独自のOpenGL実装とハードウェアドライバーを提供しています。
  2. MesaはOpenGLの実装に使用され、Nouveauはハードウェアドライバーに使用されます。

glxinfoは、OpenGL実装を表示するためのユーティリティとしてのみ意図されており、ハードウェアにアクセスできないため、次で使用されるハードウェアドライバーを表示してみてください。

lspci -k | grep -EA3 'VGA|3D|Display' 

「使用中のカーネルドライバ」フィールドを探します。次に、そのドライバーに関する情報を次のように取得します。

modinfo drivername

大量の出力が得られる可能性があるため、ライセンスの上部をチェックして、GPLまたは別のオープンソースライセンスかどうかを確認できます。 MesaでNvidiaカーネルスペースドライバーを使用する可能性はほとんどありません。

3
baelx