public void CmdCopyImage( [FromProperty("this")] GenCommandBuffer commandBuffer, GenImage srcImage, VkImageLayout srcImageLayout, GenImage dstImage, VkImageLayout dstImageLayout, [CountFor("regions")] int regionCount, [IsArray] VkImageCopy *pRegions) { }
internal void copy_image(Image dst, Image src) { VkImageCopy *regions = stackalloc VkImageCopy[32]; int levels = src.Description.MipLevels; for (uint i = 0; i < levels; i++) { regions[i] = new() { extent = new(src.Width, src.Height, src.Depth), dstSubresource = new() { mipLevel = i, aspectMask = VulkanConvert.format_to_aspect_mask(dst.Format), layerCount = dst.layers, }, srcSubresource = new() { mipLevel = i, aspectMask = VulkanConvert.format_to_aspect_mask(src.Format), layerCount = src.layers, } }; if (regions[i].srcSubresource.aspectMask == regions[i].dstSubresource.aspectMask) { // TODO: copy_image - Assert } } vkCmdCopyImage(handle, src.handle, src.get_layout(VkImageLayout.TransferSrcOptimal), dst.handle, dst.get_layout(VkImageLayout.TransferDstOptimal), (uint)levels, regions); }