問題タブ [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.
c++ - glslangの使い方
glslang を使用して glsl シェーダー コードを SPIR-V バイナリにコンパイルしようとしています。glslang プロジェクトは次の場所にあります。
https://github.com/KhronosGroup/glslang
コマンドラインで glslangValidator.exe を手動で使用すると、うまく機能します。しかし、私は c++ インターフェイスを使用したいと思います。
github ページに記載されているようにプロジェクトをビルドしましたが、実際にインターフェイスを使用する方法に苦労しています。
実際にはソリューションにプロジェクトを含めたくありません (私は Visual Studio を使用しています) が、それを使用するために必要な .lib とヘッダーをリンクします。リンクする必要があるものを見つけることができません。github ページには ShaderLang.h と StandAlone.cpp しか記載されていませんが、これでは十分ではありません。
glslang を使用できるプロジェクトをセットアップする方法を誰かが説明できますか? glsl シェーダー コードを SPIR-V バイナリにコンパイルするためだけに必要です (シェーダー コンパイルに関するデバッグ情報を含む)。これは、すでにやったことがあるか、経験が豊富な人にとっては非常に簡単な質問だと思います。
glsl - vkCreateShaderModule の後に Vulkan で属性とユニフォームを取得する方法はありますか?
opengl と同様に、glGetActiveAttrib と glGetActiveUniform を実行できます。
opencl - Vulkan 計算シェーダーで clz() を使用する方法はありますか?
Vulkan 計算シェーダーのセットに特定のアルゴリズムを実装することに興味があります。アルゴリズムは、ある時点で clz() 関数を使用します。私の NVIDIA GPU は、おそらくこの機能のハードウェア サポートを提供していると思います。CUDA はどうやら clz 命令を使用しており、clz() は OpenCL 1.2 にも含まれています。だから私は自分の clz() を書きたくありません。CUDA や OpenCL のように関数を呼び出す方法はありますか?
OpenCL カーネルを SPIR-V にコンパイルして、それを Vulkan で使用することもできると思いますが、Vulkan はそれについてあまり満足しないと思います...?
私が考えたもう 1 つの考えは、clz() 呼び出しを含む非常に単純な OpenCL カーネルを SPIR-V アセンブリに変換し、GLSL シェーダーで同じことを行い、表示される clz() 呼び出しを手動でハックできるのではないかということです。カーネル アセンブリ コードで、シェーダーのアセンブリ コードに。しかし、SPIR-V の詳細や、計算シェーダーが使用する可能性のある SPIR-V 命令の種類に Vulkan が課す可能性のある制限については、実際には何も知らないので、それが実際に機能するかどうかについてはほとんどわかりません.
glsl - glslang を使用して GLSL を SPIR-V にコンパイルする際の装飾の制御
SPIR-V 仕様では、適切な命令の制御装飾を使用して、モジュールが分岐をフラットにするか、ループを展開するように要求できます。これは、シェーダーの最終的なパフォーマンス プロファイルに大きな影響を与えます。ただし、HLSL とは異なり、標準の GLSL にはこれを表現する方法がありません。その意図は、ドライバーがあなたに代わってこれらの決定を下せるようにすることですが、そうするのに十分な情報を持っているのはおそらく開発者だけです.
glslang を使用するときに制御操作を GLSL からコンパイルする方法を指定する方法はありますか、またはこれらの決定を行うのはドライバーに任されていますか? ループが分岐しないことを確認するために、手動でループを展開する必要がありますか?
opengl - SPIR-V バイトコードは難読化を提供しますか?
リバース エンジニアが OpenGL アプリケーションにグラフィック デバッガーをアタッチして、シェーダー ソース コードを抽出するのは簡単です。一方、Vulkan はプレーンテキスト シェーダーをグラフィックス API に渡すのではなく、SPIR-V バイトコードを使用していると理解しています。
SPIR-V バイトコードはシェーダー ソースを難読化しますか? それとも逆コンパイルするのはかなり簡単ですか?
c++ - OpenCL2.2 SPIRV コンパイラは無効なコードをチェックしませんか
OpenCL C++の参照用の clang 実装を使用して、仕様の 13 ページにあるソースをコンパイルしました。
仕様によると、half
変異のある行があり、これは有効ではないため、コンパイルが失敗すると予想していました。悲しいことに、それは何の不満もなくコンパイルされました。
私は何か間違っていることを理解していますか?
opencl - OpenCL、Vulkan、Sycl
私は、OpenCL エコシステムと、Vulkan がどのように機能するかを理解しようとしています。
- OpenCL は、SPIR にコンパイルできるカーネルを使用して、GPU と CPU でコードを実行するためのフレームワークであることを理解しています。
- Vulkan は、同じ SPIR 言語を使用してコンピューティング API としても使用できます。
- SYCL は、OpenCL コードを適切な標準準拠の C++14 として記述できるようにする新しい仕様です。この仕様の無料の実装はまだないというのが私の理解です。
とすれば、
OpenCL は Vulkan とどのように関係していますか? OpenCL が高レベルでデバイスを抽象化していることは理解していますが、内部で Vulkan を使用していますか (または使用できますか?) (ベンダー固有のドライバーに依存する代わりに)
Vulkan はコンピューティング API とグラフィックス API の両方として宣伝されていますが、コンピューティング部分のリソースはほとんど見つかりませんでした。何故ですか ?
Vulkan には、OpenGL よりもパフォーマンス上の利点があります。Vulkan と OpenCl についても同じことが言えますか? (悲しいことに、OpenCL は CUDA より遅いことで有名です。)
SYCL は内部で OpenCL を使用していますか、それとも Vulkan を使用できますか? それとも、どちらも使用せず、代わりに実装される低レベルのベンダー固有の API に依存していますか?
opengl - OpenGL 4.5 の SPIR-V シェーダーでバインドレス テクスチャを使用することはできますか?
Windows で LunarG Vulkan SDK 1.0.37.0 を使用して次のシェーダーをコンパイルしようとしています。
コンパイル コマンド:
コンパイラは次の出力を提供します。
警告、バージョン 450 はまだ完成していません。ほとんどのバージョン固有の機能が存在しますが、一部が欠けています。
エラー: assets\shader.frag:2: '#extension': 拡張子はサポートされていません: GL_ARB_bindless_texture
エラー: assets\shader.frag:2: '#extension': 余分なトークン -- 予想される改行エラー: assets\shader.frag:2: '': コンパイルが終了しました
OpenGL 4.5 および SPIR-V シェーダーでバインドレス テクスチャを使用する方法はありますか?
c++ - SPIRV バイナリ シェーダーの読み込みに失敗する
私のプログラムでは、Sasha Willems ( https://github.com/SaschaWillems/openglcpp/blob/master/SPIRVShader/main.cpp )のサンプル コードを使用して、コンパイル済みのバイナリ シェーダーを読み込もうとしました。
テスト用に次の 2 つの単純なシェーダーを作成しました。
test.frag
と text.vert
github の glslangValidator を使用して SPIR-V 形式に変換しました: https://github.com/KhronosGroup/glslang を使用しました:
これらのシェーダーをロードしようとすると、次の行でセグメンテーション違反が発生してクラッシュします
古い GPU (GeForce GTX 660) を搭載した別の PC で同じことを試しましたが、問題なく動作しました。しかし、Radeon R9 Fury X を搭載した新しい PC では動作しません。
何か案は?