問題タブ [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.
vulkan - Vulkan アタッチメントの説明
レンダー パスの添付ファイルには、フィールドの初期レイアウトと最終レイアウトが必要であり、ドキュメントでそのように説明されています。
initialLayoutは、レンダー パス インスタンスの開始時に添付イメージ サブリソースが配置されるレイアウトです。
finalLayoutは、レンダー パス インスタンスが終了したときに添付画像サブリソースが遷移するレイアウトです。レンダー パス インスタンスの間、必要に応じて、アタッチメントは各サブパスで異なるレイアウトを使用できます。
これは、レンダー パス インスタンスを呼び出して終了すると、アタッチメントが自動的に移行されるということですか? それとも、プログラマーがレンダー パスの前後にこれらのレイアウトへの移行を行う必要があるということですか? ありがとう
vulkan - Vulkan ローダーの違いは何ですか?
最初に、いくつかの概念を適切に理解しているかどうかを確認するために、いくつかの細かい詳細について疑問に思います。
- vulkan-1.dll (または Linux では libvulkan.so.1) はローダーと呼ばれるものですか?
- を使用する場合
HMODULE vulkan_module = LoadLibrary( "vulkan-1.dll" );
、これはグラフィックス ドライバーのローダーを使用していますか? (前の詳細が正しい場合)?
では、実際の質問に移ります。ローダーは、ドライバーをまとめて一種の「ユニット」として見せるだけでなく、利用可能な拡張機能と検証レイヤーを収集する役割も果たしているようです。では、LunarG ローダー (たとえば) とグラフィックス ドライバーによって提供されるものとの違いは何ですか? なぜ一方を他方より使いたいのでしょうか?
c++ - vkEnumerateDeviceExtensionProperties を「2 回」呼び出す - 必要ですか?
vkEnumerateDeviceExtensionPropertiesのマニュアルページから、
vkEnumerateDeviceExtensionProperties は、physicalDevice でハンドルが指定されている物理デバイスの拡張機能のプロパティを取得します。層によって実装される拡張機能を決定するには、層の名前を指すように pLayerName を設定し、返される拡張機能はその層によって実装されます。pLayerName を NULL に設定すると、使用可能な非レイヤー エクステンションが返されます。pPropertyCount は、pProperties が指す VkExtensionProperties 配列のサイズに設定する必要があります。pProperties は、入力する VkExtensionProperties の配列または null を指す必要があります。null の場合、vkEnumerateDeviceExtensionProperties は、見つかった拡張機能の数で pPropertyCount を更新します。VkExtensionProperties の定義は次のとおりです。
(強調鉱山)。現在の実装 (Window SDK v1.0.13) では、nullかどうかに関係なく、拡張機能の数で更新されているpPropertyCount
ようです。pProperties
ただし、ドキュメントは、この状況で何が起こるかについて明示していないようです。
このような機能を持つことが「より良い」理由の例を次に示します。
対。
私の質問は、これを行うことでサポートされていない機能に依存しているのでしょうか、それともドキュメントのどこかで宣伝されているのでしょうか?
gpu - Vulkan パイプライン + カラー アタッチメント
パスのすべてのカラー アタッチメントに書き込みを行わないパイプライン (適切なフラグメント シェーダーを使用) を使用することは可能ですか? たとえば、Pass には 2xColor + 1depth のアタッチメントがあります。color01+depth の両方を書き込むフラグメント プログラムもあれば、color0+depth のみを書き込むフラグメント プログラムもあります。
未使用の添付ファイルに対して colorWriteMask を none に設定するだけでは成功しません。検証レイヤーを通過するパイプライン構成を見つけることができませんでした。余分な添付ファイルがフラグメントシェーダーによって書き込まれていないと常に不平を言っています。
android - Android N での Vulkan API サンプルのコンパイルに関する問題
Android NI で vulkan API サンプルを実行しようとしていますが、現在問題に直面しています。 apk ですが、実行時に Vulkan インスタンスにアクセスできる物理デバイスが無効な値として返されるため、アプリがクラッシュします。
linux - Vulkan SDK 環境変数はどのように設定すればよいですか?
Vulkan SDKのLinux 入門ガイドには、ランタイム環境をセットアップして、アプリケーションがローカルの Vulkan SDK インストールを表示できるようにする手順が記載されています。
VULKAN_SDK 変数を設定した後、環境でこれらの変数を設定します。
これらのコマンドで何をすればよいですか? 現在、~/.bashrc
ファイルの最後にそれらを配置しています。
今のところこれで動いているように見えますが、これは Bash に変数を設定するだけではないでしょうか? 別のシェルまたは IDE を使用している場合はどうなりますか?
これは Vulkan SDK 環境変数を設定する方法ですか、それとももっと良い方法はありますか?
graphics - Vulkan でミップマップを生成する
を使用して mipmaps ランタイム (glGenerateMipmap()
機能を実装) を生成しようとしてvkCmdBlitImage
いますが、プロセスがわかりません。これまでの私のコードは次のとおりです。
各ミップ レベルには独自のイメージが必要ですか? どのように初期化する必要がありますか? テクスチャ データにステージング バッファを使用する場合、いつミップマップを生成する必要がありますか?
編集: 提案どおりに 1 つの画像のみを使用するようにコードを変更しましたが、現在は機能しているようです (RenderDoc テクスチャ ビューアで正しいミップ レベルの画像を確認でき、検証エラーは発生しません)。
vulkan - MemoryRequirements のサイズは、私が期待しているものではありません
テクスチャを作成し、メモリ要件を照会していますが、期待していたものではありません。ImageCreateInfo 構造は次のとおりです。
ここで、R、G、B のそれぞれに 1024 の幅と高さで 1 バイトを期待して、メモリ要件を3 * 1024 * 1024 = 3,145,728
. しかし、代わりに、1,048,576
完全に 1024 * 1024 である を返します。RGB の各チャネルの 1 バイトは気にしないようです。ここで何が欠けていますか?
vulkan - LunarGコア検証レイヤーが構造をゼロにリセット
基本的なテクスチャ キューブの例を実装していますが、興味深い問題に遭遇しました。DescriptorWriteSet
構造体をUpdateDescriptorSets
API 呼び出しに渡した後、すべてのフィールドがゼロに設定されています。その後にフィールドを読み取ろうとするコードはすべて、null ポインター例外を取得します (DescriptorBufferInfo ポインターが null であるため)。これは、VK_LAYER_LUNARG_core_validation が有効になっている場合にのみ発生し、無効にすると、API 呼び出しは正常に機能するようです。
私のサンプルは不完全なので、レイヤーを無効にしても機能するかどうか、またはコードにエラーがあるかどうかはわかりません。ただし、 null ポインターを渡していないことは確かだったので、この呼び出しに渡される値を監視し、サニティ チェックを行っていました。これはバグですか、それとも予想される動作ですか?
- ウィンドウズ10
- LunarG SDK 1.0.8 (1.0.13 を使用したいのですが、これには新しい AMD ドライバーが必要で、コンピューターがブルー スクリーンになります)
編集:
私が与えた構造をゼロにするだけではありません.現在DescriptorWriteSet
、定数配列の最初のものだけを渡しており、2番目も同様にゼロにしています. 実際、アレイ周辺のメモリを調べると、この層はアレイの両側のメモリに接触しています。これは私にはバグのように思えます...
編集2:
問題は私のコードに起因することがわかりました:
両方のレイアウト バインディングのバインディング インデックスは同じ 0 でした。もちろん、これが問題を引き起こすことは予想できますが、将来の API 呼び出しで渡される構造体がゼロ化されることはないと思います。このようなことは Github の問題として扱われます。なぜなら、半分以上の時間、私が問題を抱えているのは私のせいだからです。