2017-10-19 7 views
1

複数のサブパスを含むVulkanを使用してレンダリングパスを作成しました。私たちはそれが2つのサブパス、すなわちサブパスAおよびBを有すると仮定することができる。サブパスAでは、結合画像サンプラーとしてサブパスBで使用したい画像にレンダリングする(すなわち、入力添付物としてではない)。私の質問は、VK_IMAGE_LAYOUT_COLOR_ATTACHMENTからVK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMALへの画像の遷移はどうすればよいですか?Vulkan APIのレンダリングパス内の画像レイアウトの遷移

私はサブパスBの画像を添付ファイルとして使用しないので、サブパスの依存性の仕組みはそれほど良くないと思います(入力、色、または保存のいずれかを使用するのは意味がないと思いますレンダリングパス内でイメージバリアが使用されると、新しいレイアウトフィールドと古いレイアウトフィールドが同じである必要があることを検証レイヤーが教えてくれたとき、私は驚きました。

このイメージレイアウトの遷移パターンは私にとっては自然なようですが、まだ解決策が見つかりませんでした。たぶん、私はサブパスとレンダーパスという概念を誤解しているでしょう。私はAとBに対して異なるレンダーパスを使うべきでしょうか? (その場合は2回のレンダーパスでGバッファを処理する必要がありますが、Vulkanの「入力添付機構」は使用できません)

答えて

3

レンダーパス(およびサブパス)は、サブパスBが後で読み取るときと同じ(x, y, layer)ピクセルを書き込む状況のために設計されている。画像からのランダムアクセスを目的としたものではありません。

お気づきのように、すべての種類の添付ファイルは、この方法でのみ画像にアクセスします。 次に、pPreserveAttachmentsがあります。そこにイメージを含めると、それに触れることは許されません。そうしないと、イメージは未定義になります。添付ファイルは、どこにも格納されていないもの(つまり、キャッシュメモリにのみ存在するもの)と考える方が良いかもしれません。この方法で使用できるようにするには、添付ファイルを非添付イメージにコピー/保存する必要があります。バルカン仕様から引用し

:添付ファイルとして使用

画像サブリソースはレンダーパスインスタンスの期間中、他の方法でアクセスしないでください。

は、添付ファイルがです。サブパスAのカラーアタッチメントとして使用しています(そうする必要があります)。

と言われていますが、@AntoineMorrierの示唆しているように、おそらく2つの別々のレンダーパスが必要です(可能な場合は入力添付機能を使用してください)。特に上記のように他の画像に最適化可能な依存関係がない場合。

+0

ありがとうございます。私が言ったように、私は入力添付ファイルでこの問題を解決することはできません(非常に便利で、レンダラで多く使用します)ので、少しパスを再設計します。 – Sandor

-1

レンダーパスとサブパスを作成するとき

typedef struct VkAttachmentReference { 
    uint32_t   attachment; 
    VkImageLayout layout; 
} VkAttachmentReference; 

この構造では、サブパスの先頭に指定されたレイアウトが存在すると言われています。

サブパス0でレイアウトCOLOR_ATTACHMENTを使用し、サブパス1でINPUT_ATTACHMENT(SHADER_READよりも優先)レイアウトを使用する場合は、各サブパス記述にレイアウトを指定するだけで、1つのサブパス依存性を宣言する必要があるとしますサブパス0とサブパス1との間にある。

+0

同じレンダリングパスの前のサブパスの色/奥行きの添付ファイルである画像から読み込みたい場合は、入力添付ファイルでのみ行うことができます。したがって、他のレイアウトよりもINPUT_ATTACHMENTレイアウトを優先することはできません。私たちはそれを使わなければなりません。しかしそれとは別に、私は同意します。 – Ekzuzy

関連する問題