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.