Vcc: Vulkan Clang コンパイラ
グラフィックス API の状況では、 シェーディング言語は限界に直面していますGLSL、HLSL、C++ の間で共通のサブセットでコードを記述する可能性があるにもかかわらず、現在の制限が存在するためです。
これがVccが生まれた理由です (Vulkan Clang Compiler) Vulkan Clang コンパイラは、3 年間開発されてきたプロジェクトです。 これらの制限と課題への対応として生じます。このプロジェクトは、表現上の制限を克服するだけでなく、シェーディング言語の概念自体を排除することを目指しています。
取り入れることで 完全な言語ファミリー C / C ++ バルカンに、 Vcc は、これまで Vulkan シェーダーになかった機能を導入します。 物理ポインタ、汎用ポインタ、実際の関数呼び出し、完全な制御フローなどです。
このイニシアチブ グラフィックスとコンピューティング API の間のソフトウェア ギャップを埋めることを目指しています。 Vulkan を他の GPU コンピューティング API と互換性を持たせることで、Vcc はグラフィックスとコンピューティングにおけるプログラミングの統合に向けた重要なステップとして提示され、Vulkan が知られている大量採用と実装品質に合わせます。
VCCについて
Vcc は、Vulkan で実行可能コードを生成するように設計された Clang ベースのコンパイラであり、その目的は次のとおりです。 C++ コードを変換できるコンパイラとして自身を位置づけます GPU上で実行できる表現で Vulkan グラフィックス API をサポートするもの。 GLSL および HLSL シェーダ言語に基づく GPU プログラミング モデルとは異なり、Vcc は個別のシェーダ言語の使用を完全に排除するという考えを採用しており、Vulkan 用に C/C++ コードを直接コンパイルする機能を提供します。
しかし GLSL および HLSL の競合他社とみなされる可能性があります。 このプロジェクトの背後にある真の意図はさらに続きます。 Vcc は、C/C++ 言語ファミリーを Vulkan に組み込むことを目指しています。 Vulkan シェーダに多くの機能が導入されました。
Vcc は、Shady、IR、および前述のコンストラクトをサポートして SPIR-V を拡張するように設計されたコンパイラへの単なるインターフェイスです。 Shady は比較的従来型の IR として提供され、LLVM IR の解析のサポートが含まれています。 SPIR-V 3 の現在のバージョンにはないすべての追加機能の削減とエミュレーションを処理します。
もちろん、シェーダーにしかない独自の機能も数多くあります。これらは、組み込み関数とアノテーションを使用して Vcc で公開され、Vulkan チャネルのさまざまな機能と対話するコードを作成できます。
Vcc でのコンパイル プロセスには、LLVM および Clang プロジェクト コンポーネントの使用が含まれます。 インターフェースとして。 GPU での実行の場合、Vcc 独自の中間シェーダ表現「Shady」を開発し、 コードをこの表現に変換する専用のコンパイラとともに。このアプローチにより、標準 C/C++ コードのコンパイルが可能になり、GPU の機能を活用する特定の組み込み関数によって補完されます。
Vccの プログラム フローを制御するためのネイティブ C/C++ 関数のサポートが際立っています。 「goto」命令の使用も許可します。さらに、関数の呼び出し、関数の再帰的な実行、物理ポインター、タグ付きポインター、関数ポインターなどのさまざまなタイプのポインターの使用の機能も提供します。さらに、ポインターに対する算術演算の実行や、メモリ内の型レイアウトの決定が容易になります。
Shady シェーダの中間表現は SPIR-V 3 に基づいており、C/C++ 機能に固有の特別な構造をサポートするように拡張されています。エミュレーションは、SPIR-V には直接適用できない高度な機能を実装するために使用されます。 Vcc には、プログラムがシェーダーの特定の機能を効率的に使用できるようにする組み込み関数と注釈が含まれており、GPU アプリケーションの開発に多用途で強力な環境を提供します。
最後に、すべてがバラ色であるわけではないことを言及しておく価値があります。実装のいくつかの制限を考慮することが重要です。 たとえば、Vcc は C++ 例外をサポートしておらず、malloc/free 機能は使用できません。さらに、ホスト システムと GPU 間の関数とポインタの移植性にも制限があります。これらの考慮事項は、Vcc を使用するアプリケーションの開発を計画し、効率的で問題のない展開を確保するときに重要です。
もしあなたが それについてもっと知りたい、 相談できます サイト コードに興味がある人は、それが利用可能であることを知っておく必要があります。 ここに。