10

リソース遷移の場合、リソースの「前」と「後」を知る必要がありますVkImageLayout(たとえば、 にVkImageMemoryBarrier渡されvkCmdPipelineBarrierます)。Vulkan は、API ドキュメント (この回答から) に明示的に記載されていない限り、コマンド バッファーの実行順序を保証しません。ただし、vkCmdPipelineBarrier呼び出しの前後に、コマンド バッファー内のコマンド間に依存関係が作成されることを明示的に示しています。そのため、単一のコマンド バッファー内で画像が遷移する場合、いつでも画像のレイアウトを「知る」ことができます。

ただし、vkQueueSumbitコマンド バッファーの実行順序は強制されません。2 つのコマンド バッファーがあり、それぞれがvkCmdPipelineBarrier同じイメージを異なるレイアウトに遷移させる呼び出しを伴う場合、これら 2 つの操作の間に何らかの依存関係がありますか?または、この状況で明示的な同期が必要ですか?

4

1 に答える 1

8

セクション 2.2.1 は次のように述べています。

コマンド バッファー境界は、同じまたは異なるバッチまたはサブミッションのプライマリ コマンド バッファー間、およびプライマリ コマンド バッファーとセカンダリ コマンド バッファー間の両方で、暗黙的な順序制約を導入しません。つまり、セマフォ操作またはフェンス操作の間にコマンド バッファーのセット (セカンダリ コマンド バッファーの実行を含むことができる) を送信すると、記録されたコマンドがすべて単一のプライマリ コマンド バッファーに記録されたかのように再生されます。各境界でリセットします。

セクション 6.4 では、同期用のコマンドのペアには次のものが含まれると記載されています。

最初のセット: パイプライン バリアの前のコマンド。

2 番目のセット: 同じキュー内のそのパイプライン バリアの後のコマンド (同じサブパス内に制限される可能性があります)。

「同じコマンドバッファ内」ではなく、「同じキュー内」と表示されていることに注意してください。

これらのステートメントはどちらも、パイプライン バリアがキューのコマンドの実行に影響を与えることを明確に示しています。実行の依存関係は、単一のコマンド バッファーのコマンドに限定されません。

于 2016-04-13T15:08:56.577 に答える