問題タブ [vulkan]
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++ - MinGW で Vulkan を使用するにはどうすればよいですか? (R_X86_64_32 エラー)
Vulkan を使用するための最低限のプログラムをセットアップしようとしています。LunarG SDK をインストールしました。基本的に を呼び出すだけの小さなプログラムがありますvkCreateInstance
。私はこの行でコンパイルしました:
64 ビット mingw (MSYS2) を使用すると、次のコンパイラ エラーが発生します。
私は何をしますか?正しいライブラリにリンクしていますか?
c++ - Vulkan でプリミティブを描画するには?
Vulkan が既に初期化されていて、コマンド バッファーに記録していると仮定すると、フレーム バッファーとレンダー パスがあり、Vulkan を使用してプリミティブな 2D 幾何学的形状をどのように描画するのでしょうか?
c# - c# から pInvoke を介して vkEnumeratePhysicalDevices を呼び出すと AccessViolationException が発生する
C# で Vulkan のラッパーを作成するという強い考えがあります。残念ながら、Vulkan API の 2 回目の呼び出しはすでに説明のつかない失敗をしています。以下のコードは、Sascha Willems の Vulkan の例から抜粋し、c# コードに変換したものです。
と
私の疑いは、Vk.Instance は空のクラス以外のものであるべきだということです。VkInstance は公式の vulkan.h にあり、 として定義されていtypedef struct VkInstance_T* VkInstance
ます。残念ながら、この行に関する私の理解は非常に限られています。Vk.Instance
タイプをIntPtr
andと交換しようとしましobject
たが、成功しませんでした。
論文は重要なセグメントですvulkan.h
c++ - Vulkan サンプル: vkQueueSubmit の後には常に vkWaitForFences が続きますか?
Vulkan に付属するAPI サンプルでは、直接または(util_init.hpp で)を介して、vkWaitForFences
への呼び出しの後に常に への呼び出しがあるようです。への呼び出しは、GPU が前の ですべての作業を完了するまで CPU の実行をブロックします。これにより、実際には複数のフレームを同時に構築することができなくなり、(理論上) パフォーマンスが大幅に制限されます。vkQueueSubmit
execute_queue_command_buffer
vkWaitForFences
vkQueueSubmit
これらの呼び出しは必要ですか? その場合、新しいフレームを構築する前に GPU をアイドル状態にする必要がない別の方法はありますか?
c - vulkan.h で、ディスパッチできないオブジェクトが常に 64 ビットに型定義されるのはなぜですか?
vulkan.hi を調べると、次のようになります。
64ビットの理由を知っている人はいますか? 私にとっては、常にifdefの最初のケースを使用する方が合理的です
c# - P/Invoke vkGetPhysicalDeviceFeatures アクセス違反
私は C# 用の Vulkan ラッパーに取り組んでおり (多くの人がそうしているように)、vkGetPhysicalDeviceFeatures
データが返されないか、アクセス違反がスローされるという問題が少しあります。
未処理の面 - 署名:
仕様からの署名は次のとおりです。
VkPhysicalDevice
handle
次のように定義されたオブジェクトです。
これは単なるポインターであり、この形状のオブジェクトのラッパーを使用IntPtr
する他のインポートは機能します。SafeHandle
マネージ側 - DLL インポート:
予想される DLL インポート (ただし失敗):
これは、他の作業中のインポートに似ています。注:PhysicalDeviceHandle
派生SafeHandle
元はにマーシャリングする必要がありますIntPtr
。このパターンで機能する他のインポートがあります。上記は、呼び出されるとアクセス違反をスローします。
プラットホーム:
- Windows 10 (x64)
- Nvidia ドライバー:
356.43-vkonly
(最新)
アップデート
@V. クラフチェンコは正しかった
上記のインポートに問題はありませんでした。私の問題は実際にはvkEnumeratePhysicalDevices
通話にありました。
まず、インポートが間違っていました。正しいインポートは次のようになります。
第二に、私は実際に関数を間違って使用していました。vkEnumeratePhysicalDevices
2回電話する必要があります。最初の呼び出しでデバイスの数を取得し、2 番目の呼び出しでデバイスの配列を設定します。
注:これは、関数のドキュメントの説明/有効な使用法セクションで概説されていますが、最初に読んだときに正しく解釈できませんでした。
最終的に適切なハンドル値を取得するEnumeratePhysicalDevices
と、最終的な呼び出しがGetPhysicalDeviceFeatures
期待どおりに機能しました。の最終的なインポートはGetPhysicalDeviceFeatures
次のようになります。
注: 名前に が含まれる変数Handle
は、 のサブクラスですSafeHandle
。
c++ - 「VkDescriptorSetLayout」の未使用のバインディングの影響は?
2 つのフラグメント シェーダー (GLSL で記述) があり、どちらもサンプラーの配列を持っています。他のバインディングは同じですが、配列は 2 つの間でサイズが異なります。
対
VkDescriptorSetLayout
このパラメーターにVkDescriptorSetLayoutBinding
一致するを作成できます。
作成されたVkDescriptorSetLayout
は、両方のシェーダーにバインドするために正しく機能します。
2 つの質問:
未使用の記述子の唯一の意味は、VkDescriptorSet
(最初のシェーダーの配列の場合) 必要以上に大きくなるということですか? 余分に割り当てられた記述子は、大きなパフォーマンスやメモリの問題ですか?
c++ - Vulkan:現在割り当てられているオブジェクトをダンプしますか?
Vulkan のオブジェクトが破棄され、VK_LAYER_LUNARG_object_tracker
レイヤーが有効になっており、デバッグ レポートがインストールされている場合は常に、destroy 呼び出しが報告され、コールバックを介して残りのオブジェクトの総数が示されます。例えば:
まだ割り当てられているオブジェクトに関する情報を取得する方法はありますか?
編集: object_tracker レイヤー ( https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/blob/master/layers/object_tracker.h ) のソースを調べると、 のプロトタイプがあるobjTrackGetObjectsOfTypeCount
ようですが、そうではないようですどこにでも実装があるように。この機能は何らかの方法でアクセスできますか?