問題タブ [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++ - Vulkan 関数をグローバルにロードする
Vulkan がリリースされたので、(趣味として) Vulkan ベースの GUI を書くことにしました。しかし、私は現在、最初のステップである Vulkan 関数のロードで立ち往生しています。私が見る限り、Vulkan 関数をグローバルにロードする必要がある Nvidia の C++ Vulkan ラッパーを使用しています。
ローカル関数を正常にロードできますが、::vkCreateInstance
失敗します:
新しい関数ポインターをグローバルに割り当てようとすると、コンパイル時に 2 つのエラーが発生します (VS2015 を使用してコンパイル):
- 式は変更可能な左辺値でなければなりません。
- '=': 左オペランドとして機能します。
vulkan.h
ヘッダーで宣言された関数プロトタイプがあります。次に例を示します。
これが、関数をグローバルにロードできない原因です。もし私が を定義するとしたらVK_NO_PROTOTYPES
、これらのプロトタイプはスキップされ、私はそれらを as などと再宣言することができると信じていPFN_vkCreateInstance vkCreateInstance = nullptr;
ます。しかし、これは正しい方法ですか?
それで、私の質問 - Vulkan 関数をグローバルにロードする正しい方法は何ですか?
pipeline - vkCreateGraphicsPipelines からのアクセス違反
Vulkan API のこの部分でアクセス違反が発生しています。
エラーは次のとおりです。
私が知る限り、他のすべての関連コード:
device と pipelineCache はどちらも、Sascha Willems によって作成されたスーパークラスによって設定され、彼が作成したすべての例で機能するため、そこに問題があるとは思いません。ただし、実際には、pipelineCreateInfo または pipelines.billboard がエラーの潜在的な原因として残るだけです。
これらは両方とも、Sascha の例での例と (ほぼ正確に) 同じ方法で処理されているため、ここで途方に暮れています。
編集:問題が見つかりました。シェーダーでサンプラーのバインディング ポイントを指定できませんでした。
c# - C# : 構造体のアンマネージ デリゲート、および vulkan API dll をラップすることによるその他のアンマネージの問題
C# プログラムで新しい vulkan API を使用しようとしています。ヘッダー ファイルにしかアクセスできないため、コードをコピーし、安全でないクラスに適用してラップしました。
すべての PFN_xxx は、もともとヘッダー内の関数ポインターであり、直感的にデリゲートとして書き直しました。だから、今のところ、それは働いています。ただし、コードの後半に、dll からインポートされた次の関数があり、エラーが発生します。
エラーはCS0208 で、次のメッセージで説明されています。その中にデリゲートがあるため、管理されています。では、どうすればこの問題を解決できますか? ネット上で満足のいく答えが見つかりませんでした.構造体でデリゲートをアンマネージ関数ポインターとしてマーシャリングしようとしましたが(このように)、うまくいかないようで、コンパイラーはエラーを保持します.
ここに別の問題があります。構造体の固定サイズの配列が定義されている構造体があります。元の宣言は次のとおりです。
そして、私はこのように翻訳しました:
しかし、繰り返しますが、次の関数 import が原因で、同じ問題、有名な CS0208 エラーがあります。
今回のエラーは、固定サイズの配列が原因です。何か案が ?
ご協力ありがとうございました。
memory-management - 誰かが VkPhysicalDeviceMemoryProperties を理解するのを手伝ってくれませんか?
私はそれを理解しようとしていますが、私は少し立ち往生しています。
タイプとヒープの関係は単純ですが、少し奇妙です。(なぜメンバーを与えないVkMemoryHeap
のVkMemoryType
ですか?)
私はすべてのVkMemoryPropertyFlags
意味を理解していると思います。それらはかなり単純に見えます。
しかし、VkMemoryHeap.flags
メンバーはどうですか?どうやら、ゼロ以外の有効な値が 1 つだけありVkMemoryHeapFlagBits.VK_MEMORY_HEAP_DEVICE_LOCAL_BIT
、それ自体はそれほど奇妙ではありませんがVkMemoryPropertyFlagBits.VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
、ヒープのメモリ タイプに存在する可能性のある もあります。
メンバーとは何VkMemoryHeap.flags
を意味し、メンバーとどのように関係していVkMemoryType.flags
ますか?
c++ - 同じ VkPhysicalDevice から 2 つの VkDevices を作成することは有効ですか?
Vulkan API の C++ ラッパーを作成しているので、ドキュメントが実際の API の内容と矛盾しないようにしたいと考えています。
このシナリオは、LunarG 標準検証レイヤーを有効にして実行している場合でも機能します。しかし、現在、正しくないにもかかわらず、検証レイヤーを通過しているものはたくさんあります。だから私の質問は、これを行うことは有効ですか?
c++ - Vulkan DestroyInstance / DestroyDevice with VK_NULL_HANDLE
私は、NULL ハンドルで Destroy / Free を呼び出すことができるという印象を受けました。
2.5.1 有効な使用法
VK_NULL_HANDLE を任意の vkDestroy* または vkFree* コマンドに渡すことは有効であり、これらの値は黙って無視されます。
しかし、vkGetInstanceProcAddrとvkGetDeviceProcAddrを使用して関数ポインターを取得するとどうなるでしょうか。私は次のことをしています:
もちろん、元のデバイスに対してデストラクタが呼び出されると、null ハンドルがデバイス固有のvkDestroyDeviceに渡されます。
現在、これにより読み取りアクセス違反が発生しています。これが AMD のせいなのか、LunarG のせいなのか、それとも私のせいなのかわかりません。