私はグラフィックプログラミングとVulkanを使い慣れています。 私は、ディスクリプタセットにバインドバッファが必要であることを理解していますが、私が持っているすべてのバッファに対して新しいディスクリプタセットが必要か、ディスクリプタセットが2つ以上のバッファをバインドできるかどうかは疑問です。 「はい」の場合は、これについての経験則は何ですか?すべてのバッファに新しいディスクリプタセットを作成する必要がありますか?
答えて
各ディスクリプタセットは、同じタイプまたは異なるタイプの複数のリソースを持つことができます。ディスクリプタセットを介してどのタイプのリソースにバインドできるかは、ディスクリプタセットレイアウトで定義されます。そこでは、VkDescriptorSetLayoutBinding構造を通して、リソースの特定のタイプ(サンプラー、ストレージイメージ、またはユニフォームバッファなど)を指定し、このタイプのリソースの数をシェーダ内の配列としてアクセスします。しかし、別のレイアウトエントリ(レイアウト作成中に指定された複数のVkDescriptorSetLayoutBindingエントリ)と同じタイプの複数のリソースを指定することもできます。そのような記述子のそれぞれは、別々の異なるバインディングを使用する必要があります。 - それは依存してあなたの質問の後半部分については
layout(set=S, binding=B) uniform <variable_type> <variable_name>;
:と同一の結合は、特定のリソースにアクセスするために、シェーダ内で使用する必要があります。描かれたシーン、レンダリングされたリソースのタイプ、リソースの数、メモリ使用量、グラフィックスハードウェアベンダーさえも、レンダリング中にディスクリプタセットを作成してバインドするために使用されるアプローチに影響します。一般的なルールは、レンダリング中に状態の変化を最小限に抑えることです。したがって、vkCmdBindDescriptorSets()関数呼び出しの数はできるだけ小さくする必要があります。しかし、これはあなたのシーンの柔軟性とダイナミックの両方を制限します。したがって、記述子を変更するか、複数の記述子を使って複数の記述子を一度にバインドする必要がある多くの状況があります。しかし、私が書いたように、それはすべて与えられた状況に依存します。
いいえ、リソースごとに個別のディスクリプタセットは必要ありません。
VkDescriptorSetLayoutのドキュメントは、何が起こっているかを明確にしているようです。同じ章でこれを実証している素晴らしいコード例もあります。だから、
、それを総括する:あなたは、単一の記述子タイプ
- あなたは、それぞれが任意の記述子タイプのリソースを保持することができ、いくつかの「バインディング」を持つことができます(またはその配列)
- そして間接の1つの以上の層として使用すると、複数の記述子を持つことができますが、親指の
ルールはおそらくある「以下がよりある」独自のバインディングを持つそれぞれを設定します。別のタイプまたは名前を持つためにリソースを必要としない場合は、arrayを使用します。別のセットが必要ない場合は、1セットのみを使用してください。
- 1. いつ新しいブランチを作成する必要がありますか?
- 2. すべてのiVarsのプロパティを作成する必要がありますか?
- 3. レルム:新しいRLMObjectをすべて作成する必要がありますか
- 4. いつwit.aiに新しいインテントを作成する必要があります
- 5. 新しいテーブルを作成する必要がありますか?
- 6. 新しいCancellationTokenSource()を作成する必要がありますか。タスクキャンセル後?
- 7. 新しいDB列を作成する必要がありますか?
- 8. EmptyStacksの新しいRunTimeExceptionを作成する必要があります
- 9. リストの新しいインスタンスを作成する必要はありますか?
- 10. 新しいVertexBuffer3D&IndexBuffer3Dを使用する各Program3Dに対して作成する必要がありますか?
- 11. google cromeのアップデートがあるたびに新しいポップアップを作成する必要がありますか?
- 12. AsyncCallbackを新しいオブジェクトとして作成し、EndInvokeをオプションにする必要がありますか?
- 13. XmlReader - 要素を編集して新しい要素を作成する必要があります。
- 14. IntPtrバッファから画像を作成した後に画像を反転する必要があります
- 15. テストファイルにヘルパーメソッドを作成する必要がありますか?
- 16. すべてのメソッドで新しいUnitOfWorkを作成するか、クラスインスタンスを作成する必要がありますか?
- 17. 接続を保持する必要がありますか、毎回新しい接続を作成する必要がありますか?
- 18. エンティティのインタフェースを作成する必要がありますか?
- 19. 作成時にバッファにメモリを割り当てる必要があるのはなぜですか?
- 20. 新しいアプリケーションIDを作成する場合、プロビジョニングプロファイルを再作成する必要があります
- 21. 私が作成するすべてのNSManagedObjectContextからNSManagedObjectContextDidSaveNotificationを監視する必要がありますか?
- 22. いつプロキシサービスを作成する必要がありますか?いつRest APIを作成する必要がありますか?
- 23. 新しいWebサイトを作成するか、Visual Studioで新しいプロジェクトを作成するかを選択する必要がありますか?
- 24. MOSS 2007 - カスタムワークフローを作成する必要がありますか?
- 25. サブクラスNSManagedObjectを作成する必要がありますか?
- 26. DateRangeオブジェクトを作成する必要がありますか?
- 27. なぜデータベースラッパーを作成する必要がありますか?
- 28. 更新後にノーマルモードで行を作成する必要があります
- 29. JSONPで通話するたびに新しいSCRIPTタグを作成する必要がありますか?
- 30. Scalaの特性に混在させる新しいオブジェクトを作成する必要がありますか?