Reputation: 898
I am trying to use vkCreateImage
with a 3-component image (rgb
).
But all the the rgb
formats give:
vkCreateImage format parameter (VK_FORMAT_R8G8B8_xxxx) is an unsupported format
Does this mean that I have to reshape the data in memory? So add an empty byte after each 3, and then load it as RGBA
?
I also noticed R8
and R8G8
formats do work, so I would guess the only reason RGB
is not supported because 3 is not a power of two.
Before I actually do this reshaping of the data I'd like to know for sure that this is the only way, because it is not very good for performance and maybe there is some offset or padding value somewhere that will help loading the RGB
data into an RGBA
format. So can somebody confirm the reshaping into RGBA
is a necessary step to load RGB
formats (albeit with 33% overhead)?
Thanks in advance.
Upvotes: 4
Views: 1608
Reputation: 473447
First, you're supposed to check to see what is supported before you try to create an image. You shouldn't rely on validation layers to stop you; that's just a debugging aid to catch something when you forgot to check. What is and is not supported is dynamic, not static. It's based on your implementation. So you have to ask every time your application starts whether the formats you intend to use are available.
And if they are not, then you must plan accordingly.
Second, yes, if your implementation does not support 3-channel formats, then you'll need to emulate them with a 4-channel format. You will have to re-adjust your data to fit your new format.
If you don't like doing that, I'm sure there are image editors you can use to load your image, add an opaque alpha of 1.0, and save it again.
Upvotes: 3