2

テクスチャを作成し、メモリ要件を照会していますが、期待していたものではありません。ImageCreateInfo 構造は次のとおりです。

ImageCreateInfo()
    .X2D(1024, 1024)
    .Format(Format::R8G8B8_UNORM)
    .InitialLayout(ImageLayout::PREINITIALIZED)
    .Tiling(ImageTiling::LINEAR)
    .Usage(ImageUsageFlagBits::TRANSFER_SRC);

ここで、R、G、B のそれぞれに 1024 の幅と高さで 1 バイトを期待して、メモリ要件を3 * 1024 * 1024 = 3,145,728. しかし、代わりに、1,048,576完全に 1024 * 1024 である を返します。RGB の各チャネルの 1 バイトは気にしないようです。ここで何が欠けていますか?

4

1 に答える 1

3

これは 3,145,728 バイトを返す必要があるという点で正しいですが、R8G8B8_UNORM 形式は実装で実際に使用できますか? そうしないと、実際にはそのイメージを使用できないため、正しい割り当てサイズを取得できません。

検証レイヤーを有効にすると、画像検証レイヤーからエラーがスローされるはずです。

少なくとも私が現在使用している GPU では、どのタイル モードでも、バッファ フォーマットとしてもサポートされていません。ただし、たとえば R8G8B8A8 または R8G8 が使用可能であり、正しい割り当てサイズを返します。

R8G8B8 が GPU で実際に利用できる場合、ミップ数とレイヤー数を含む完全な VkImageCreateInfo 構造を投稿できますか?

そのため、要求した (そして割り当てたい) 画像形式が実際にユースケース (線形、最適、バッファー) でサポートされているかどうかを確認することをお勧めします。

于 2016-06-15T10:45:10.427 に答える