問題タブ [spir-v]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
batch-file - Vulkan アプリケーションで使用するために GLSL を対応する Spir V にコンパイルする
ここにあるgithubのJonno RobsonのVulkanコードベースを使用しています:Vulkan-Terrain-Generatorは、Vulkanをよりよく理解するためのガイドまたは学習リファレンスとして使用しています。ソース コード自体には問題はありませんが、GLSL シェーダー コードを Spir V コードにコンパイルすることに関する質問または懸念事項があります。SpirV のコンパイラとツール キットは初めてです。glslangValidator.exe と glslc.exe の両方を使用して、シェーダー ファイルを Spir V ファイルに変換しようとしました。
Jonno のコード ベースでは、各 GLSL シェーダー ファイルを対応する spirv ファイルに変換しました。彼がバッチ ファイルで使用したフラグ オプションを使用してみましたが、唯一の違いは、彼の glslangValidator.exe を指すディレクトリを自分のディレクトリに置き換えたことです。
バッチ ファイルのディレクトリにあるすべてのシェーダー ファイルを GLSL から Spir V にコンパイルして.spv
、新しい SpirV ファイルのそれぞれの最後に追加するのと同じ効果を達成しようとしています。 GLSL から適切な Spir V バイト コードに変換した後、そのディレクトリに生成されます。
私のバッチファイルは次のようになります。
コンパイル.バット
ただし、バッチファイルをダブルクリックしてもうまくいきません。開いて実行しますが、期待されるshader_filename.vert.spv
...shader_filename.frag.spv
ファイルを生成していません。
彼らがどのプラットフォームで実行したかはわかりませんが、私は Windows 7 を実行しており、バッチ コマンド内で供給されるコマンド引数またはフラグに違いがあるかどうかはわかりません。彼らが Vulkan SDK 内の他のツール キットを使用したのか、それとも外部のライブラリやツールを使用したのか、それ以外のものを使用したのかはわかりません。
このバッチ ファイルでできることは、すべてのシェーダー ファイルを適切な Spir V ファイルに、最も単純なバッチ コマンドで変換することです。このディレクトリには 20 を超えるシェーダーがあるため、シェーダー ファイルごとに同じコマンドを何度も記述する必要はありません。
どうすればこれを達成できますか、または必要な SpirV ファイルを生成するための glslangValidator または glslc の適切なコマンド引数は何ですか?
ここにあるドキュメントを読みました: SPIR-V ツールチェーンですが、必要なバッチ ファイルを適切に生成する方法がまだわかりません。
clang - spir-v バイナリカーネルで clCreateProgramWithIL() を適切に使用するには?
いくつかのエキゾチックなプロファイリングの目的で、入力として受け取る OpenCL カーネルのコードを計測する OpenCL アプリケーションを作成する必要があります (必要なものが見つからないため、自分で行う必要がある/したい)。
カーネルを中間表現 (現在は LLVM-IR) にコンパイルし、インストルメント化 (LLVM C++ バインディングを使用) し、インストルメント化されたコードを SPIR-V にトランスパイルしてから、ホストコードでclCreateProgramWithIL()
.
今のところ、インストルメンテーションなしで 2 つのベクトルを追加する単純な OpenCL カーネルをコンパイルしています。
上記を LLVM IR にコンパイルするには、次のコマンドを使用します。
その後、ツール( herevadd.bc
)を使用してトランスパイルします。vadd.spv
llvm-spirv
最後に、次のように C ホストコードからカーネルを構築してみます。
clBuildProgram
ホストコードを実行した後、コマンドから上記のエラーが表示されます。
vadd.spv
ファイルが OpenCL カーネル ライブラリとリンクされていないようです。これを達成する方法はありますか?