2016-06-15 8 views
2

メモリ要件を照会してテクスチャを作成していますが、これは私が期待していたものではありません。ここでImageCreateInfo構造だ:MemoryRequirementsのサイズは、私が期待しているものではありません

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

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

+3

はR8G8B8_UNORM形式ですか? 3バイト形式はサポートする必要はありません。あなたはvkGetPhysicalDeviceFormatPropertiesで確認することができます –

+0

ああ、本当に、私はそれをチェックしていない... –

答えて

3

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

検証レイヤーを有効にすると、画像検証レイヤーbtwからエラーが返されます。

少なくとも私は現在、GPLではタイリングモードやバッファフォーマットとしてサポートされていません。しかし、例えば。 R8G8B8A8またはR8G8が使用可能で、正しい割り当てサイズが返されます。

実際にGPUでR8G8B8を使用できる場合は、完全なVkImageCreateInfo構造を投稿できますか?

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

+0

はい、私は実際にフォーマットの可用性をチェックしていませんでした。 VulkanInfoを素早くチェックし、あなたが言っているように、それはどのタイリングモードでも使用できません。 –

+0

補足として、私は常にすべてのバリデーションレイヤを有効にして開発していますが、これはスローしません(SDK 1.0.8)。 –

+0

それで、私はいつも現在のソースからバリデーションレイヤーをコンパイルするのです。あなたは実際にはSDKを必要としません;)。あなたの場合、画像検証レイヤーは、要求された画像フォーマットがサポートされていないというエラーを投げます。 –

関連する問題