KDE SC 4.5.0は、私のものを含む一部のビデオカードでいくつかの問題があります。リリース時に Archはいくつかの回避策を推奨しました 。その1つは
kDEを開始する前に「LIBGL_ALWAYS_INDIRECT = 1」をエクスポートします
それが最も簡単で最良の方法だと思いました。しかし、それが何をするのか、それが私のシステムにどのような影響を与えるのかはわかりません。デフォルトより遅いですか?問題を監視し、修正後は無効にすることを忘れないでください。
間接レンダリングは、GLXプロトコルがOpenGLコマンドの送信に使用され、X.orgが実際の描画を行うことを意味します。
直接レンダリング は、アプリケーションが最初にメサ経由でX.orgと通信せずにハードウェアに直接アクセスできることを意味します。
直接レンダリングは、X.orgプロセスへのコンテキストの変更を必要としないため、より高速です。
説明:どちらの場合も、レンダリングはGPUによって行われます(または技術的にはGPUによって行われる場合があります)。ただし、間接レンダリングでは、プロセスは次のようになります。
直接レンダリング
OpenGLはネットワーク経由で動作するように設計されているため、間接レンダリングの方がアーキテクチャの素朴な実装よりも高速であることに注意してください。つまり、一度に大量のコマンドを送信できます。ただし、コンテキストの切り替えとプロトコルの処理に費やされるCPU時間に関しては、ある程度のオーバーヘッドがあります。
まず、_LIBGL_ALWAYS_INDIRECT
_は、Mesa 3Dクライアント側OpenGL実装(libGL.so)に関連するフラグです。他のベンダー(NVIDIAなど)のバイナリドライバーでは動作しません。
次に、質問に直接回答するために、最後にフラグが次のように機能するMesaコードを確認しました。
Mesaが間接Xサーバーで作業していた2008年以前(たとえば、_ssh -X
_を実行したか、ディスプレイを非ローカルサーバーに明示的に設定した場合)は、リモートXサーバーによって提供されるGLXビジュアルのリストを使用できるようにします。 GLXアプリケーション。アプリケーションが呼び出します。 glXChooseVisual()とMesaは一致する妥当なものを見つけ、その後のglFoo()
呼び出しはリモートXサーバーに送信され、リモートXサーバーが接続されているlibGL(GPUなど)によって実行されます。 。
2008年の終わり頃にMesaが変更され、リモートX接続に内部ソフトウェアOpenGLレンダラー( Xlibドライバー )を使用するようになりました。 (SuSEのような一部のディストリビューションは、古い動作に戻すために特にパッチを当てました。)これは、リモートXサーバーが内部ソフトウェアレンダラーの1つと正確に一致するGLXビジュアルを提供した場合にのみ機能します。 (それ以外の場合は、「エラー:RGBを取得できませんでした、ダブルバッファビジュアル」という共通のエラーが発生します。)そのようなビジュアルが見つかった場合次に、MesaはすべてのglFoo()
コマンドをローカル(アプリケーションに対して)CPUでレンダリングし、その結果をラスターイメージを介してリモートXサーバーにプッシュします(XPutImage()
); _LIBGL_ALWAYS_INDIRECT=1
_の設定(Mesa 17.3より前の値は機能するため、1またはを使用する必要があります) true)は、通常の直接レンダリングまたは内部ソフトウェアレンダラーを無視し、以前と同じように間接レンダリングを使用するようMesaに指示します。
間接レンダリングまたは直接ソフトウェアレンダリングを選択すると、次の2つのことに影響します。
OpenGLバージョン
パフォーマンス
glGetInteger()
のような愚かなことをフレームあたり100回行う場合、高速LANでも、これらのクエリはそれぞれ1ミリ秒、またはフレームあたり合計100ミリ秒かかるため、10 FPSを超えることはありません。あなたの申請。glGetInteger()
呼び出しがマイクロ秒またはナノ秒で直接応答されるためです。したがって、アプリケーションとネットワークの特性の正確な詳細なしでは、直接ソフトウェアレンダリングと間接レンダリングのどちらが特定の状況に適しているかを判断することは不可能です。
あなたの場合、ローカルのkwinインスタンスを実行しているように見えるので、_LIBGL_ALWAYS_INDIRECT
_の効果は、ローカルXサーバーへの間接レンダリングを強制することです。これは明らかにkwin
の動作を変更するか(OpenGL 1.4のみ)、または他のいくつかのバグを回避します。
根本的な問題が修正されたら、必ずこのフラグを削除します。