2

AMD と Nvidia の両方のハードウェアで GLSL シェーダーを動作させるのに問題があります。

特定のシェーダーを修正するためのヘルプを探しているわけではありませんが、これらの問題を一般的に回避する方法を探しています。それぞれのハードウェアを搭載したマシンでアプリケーションを実行せずに、シェーダーが AMD/Nvidia ドライバーでコンパイルされるかどうかを確認して、実際に試してみることはできますか?

最終的には、テストが確実な唯一の方法であることはわかっていますが、開発中は少なくとも明らかな問題を回避したいと考えています。

GLSL を使用しているすべての人がこれらの問題を抱えているに違いありません。

4

2 に答える 2

5

それぞれのハードウェアを搭載したマシンでアプリケーションを実行せずに、シェーダーが AMD/Nvidia ドライバーでコンパイルされるかどうかを確認して、実際に試してみることはできますか?

いいえ。アプリケーションの開発に真剣に取り組もうとしているのであれば、さまざまなハードウェアでテストすることが信頼できる唯一の方法です。そして、あなたが真剣になろうとしないなら、誰が気にします.

一般的に言えば、小規模なチームでこれを処理する最も簡単な方法は、問題を完全に回避することです。ほとんどのドライバーの非互換性は、型破りなことをしようとすることから生じます: 出力/入力変数として配列を渡す、属性として行列を渡す、最新のドライバー機能を使用するなど。GLSL で使用されており、実際の OpenGL アプリケーションでほぼ確実に使用されている、堅牢で安全なもののみを使用してください。

于 2013-07-16T23:58:58.923 に答える
3

NVidias の NVEmulate と AMD の GPU ShaderAnalyzer を使用することも選択肢の 1 つです。

AMD の GPU ShaderAnalyzer は、スタンドアロンの GLSL/HLSL コンパイラです。NVidias の NVEmulate は、さまざまな (より優れた) NVidia グラフィック カードの機能をソフトウェアでエミュレートするためのツールです。したがって、NVidia カードをお持ちの場合は、プログラムを実行してテストし (NVEmulate で別の NVidia カードをエミュレートする可能性があります)、ShaderAnalyser を使用して、シェーダーが AMD カードでコンパイルされるかどうかを確認できます。

シェーダーが AMD で実行されている場合、ほとんどの場合、NVidia で実行されます。cgc (Cg ツールキットの一部である NVidias スタンドアロン Cg コンパイラ) でこれをテストすることもできます。これは、GLSL および Cg コードをバイナリにコンパイルするか、HLSL にクロスコンパイルします。とにかく、これはNVidiaドライバーがGLSLに使用するコンパイラーです。おまけに、シェーダーのバイナリ/アセンブリ コードも確認できるため、低レベルの最適化に非常に役立ちます。

シェーダーが異なるハードウェアで (期待どおりに) 動作するかどうかは、どのツールにもわかりません.最近、一部の新しい AMD ドライバーがデフォルトの均一な値を適切に処理しないことがわかりました...警告やエラー メッセージなしで...しかし、これは別の話です。したがって、ある時点で、ターゲット ハードウェアでコードをテストする必要があります。

于 2013-10-31T22:37:26.610 に答える