Quick answer: Vulkan validation reporting copy region out of bounds when copying with mip levels? Per-mip extent calculation; mip N has extent / 2^N.

Copy mip 3 of a 512x512 texture; specify extent 512x512; validation: out of bounds (mip 3 is 64x64).

Compute per-mip extent

uint32_t mipW = std::max(1u, srcW >> mipLevel);

Per-level extent. Copy size matches the mip.

Or use VkImageCopy with correct extent

Each region's extent explicit. Validation passes; data correct.

Build helper

CopyAllMips helper that loops and computes per-mip. Reusable.

“Mip extent is per-level. Coarse mips have coarser extent.”

Build a mip-aware copy helper. Manual extent calc surfaces this bug class repeatedly.

Related reading