An image has more than pixels
A VkImage describes dimensions, format, mip levels, layers, samples, tiling, and usages. Memory backs it. An image view chooses how a subresource range is interpreted. A sampler describes filtering and addressing. Keeping these separate lets one image have several views, but also means a valid image handle alone does not establish a valid sampled binding. Check format support for the actual intended usages and tiling rather than assuming every format can be both a color attachment and storage image.
Upload a tiny checker petal texture first. A staging copy writes the destination subresource in an appropriate transfer layout; a later dependency transitions it to a layout suitable for shader sampling and makes the writes visible to the fragment shader. Layout transitions are part of synchronization, not cosmetic metadata. Track aspect, mip, and layer ranges, and do not transition untouched subresources as though they held initialized data.
Choose color encoding deliberately. An sRGB sampled color texture is decoded for linear shading, while normals and scalar data need linear formats. Present through a supported surface format with an understood output conversion. A bright image is not proof that color management is correct: use a gray ramp and a known blend to isolate the path.
