opengl:gpusl
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン最新のリビジョン両方とも次のリビジョン | ||
opengl:gpusl [2014/06/11 09:29] – oga | opengl:gpusl [2015/03/03 21:54] – oga | ||
---|---|---|---|
行 2: | 行 2: | ||
- | ^ ^ Graphics ^ Compute ^ ^ | + | ^ |
- | | HLSL (DirectX) | + | | HLSL (DirectX) |
- | | GLSL (OpenGL) | + | | GLSL (OpenGL) |
- | | Cg (NVIDIA) | + | | Cg (NVIDIA) |
- | | Mantle (AMD) | | + | | Mantle (AMD) | Y |
- | | Metal (Apple) | + | | Metal (Apple) |
- | | CUDA (NVIDIA) | + | | CUDA (NVIDIA) |
- | | OpenCL | + | | OpenCL |
- | | RenderScript (Android) | + | | RenderScript (Android) |
+ | | SPIR-V (Vulkan) | ||
+ | |||
+ | |||
* C言語タイプ : リソースはポインタ表現が可能、LLVM (clang) ベース | * C言語タイプ : リソースはポインタ表現が可能、LLVM (clang) ベース | ||
行 16: | 行 20: | ||
* GLSL タイプ : function, statement は C言語だが、データタイプ (配列, | * GLSL タイプ : function, statement は C言語だが、データタイプ (配列, | ||
* data type (vector, matrix 等) とその演算子、組み込み関数などは基本的に互換性なし | * data type (vector, matrix 等) とその演算子、組み込み関数などは基本的に互換性なし | ||
+ | |||
+ | LLVM/clang を使った C言語タイプはコンパイラが明確かつメジャーなので、構文上のバグ発生率が極めて低いという利点があります。 | ||
+ | GLSL のようにドライバ毎にコンパイラが異なっている場合は、同じ言語でも実装が GPU によって異なるため、初歩的なバグが残っていることも少なくありません。 | ||
+ | |||
+ | GLSL が一番方言が強いですが、Smartphone からブラウザまで最も多くのプラットフォームで走るシェーダー言語でもあります。 | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Shader File ===== | ||
+ | |||
+ | プラットフォームによって Shader File に記述可能な情報が異なっています。 | ||
+ | |||
+ | * GLSL : Entry は必ず main() 、そのため VertexShader, | ||
+ | * HLSL : コンパイル時に Entry 関数名を指定可能。そのため複数のシェーダー関数を 1ファイルに記述できる。 | ||
+ | |||
+ | シェーダーの入出力を定義するのは描画命令を発行するアプリケーション (エンジン) 側の役割なので、 | ||
+ | 同じ言語の ShaderFile でも他の環境でそのまま使えるわけではありません。 | ||
+ | |||
+ | In/Out (attribute/ | ||
+ | |||
+ | |||
+ | |||
===== FX ===== | ===== FX ===== | ||
- | VertexSahder, | + | FX は、 |
- | DirectX | + | VertexSahder, |
+ | DirectX | ||
+ | |||
+ | FX に記載された情報を解釈するのは描画エンジン (CPU側) の役割なので、描画エンジンが対応していない情報は記述しても無視されます。 | ||
+ | |||
+ | HLSL, CgFx 以外は明確な標準型が存在しないため、多くの場合は描画エンジン依存であり互換性はありません。 | ||
+ | |||
+ | |||
+ | ===== SAS ===== | ||
+ | |||
+ | 同じシェーダー言語だったとしても入出力のインターフェースに互換性がないと、そのまま再利用することが出来ません。 | ||
+ | 入出力の記述を共通化するために定められたフォーマットが DirectX HLSL の SAS です。 | ||
+ | |||
+ | ただし厳密に SAS に従った実装は多くなく、部分的な流用が多いものと考えられます。 | ||
+ | 決められたルールだけでは不足するので、実際の描画時は何らかの独自拡張が必要となっていることも問題です。 | ||
+ | |||
+ | また SAS 自体も途中で仕様を完全にリセットしたことがあります。 | ||
+ | これは互換性が全くない仕様変更であり、初期の実装が無駄になっています。 | ||
+ | それゆえ信頼性の面でも不安が残り普及を妨げることとなりました。 | ||
+ | |||
+ | GUI との相性が良いためツールではよく利用されていますが、 | ||
+ | やはり完全な互換性が確保できているわけではありません。 | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
opengl/gpusl.txt · 最終更新: 2015/03/04 22:02 by oga