Esempio n. 1
0
 public void CmdCopyImage(
     [FromProperty("this")] GenCommandBuffer commandBuffer,
     GenImage srcImage,
     VkImageLayout srcImageLayout,
     GenImage dstImage,
     VkImageLayout dstImageLayout,
     [CountFor("regions")] int regionCount,
     [IsArray] VkImageCopy *pRegions)
 {
 }
Esempio n. 2
0
        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);
        }