public void CmdCopyImageToBuffer(IMgImage srcImage, MgImageLayout srcImageLayout, IMgBuffer dstBuffer, MgBufferImageCopy[] pRegions) { var bSrcImage = (VkImage)srcImage; Debug.Assert(bSrcImage != null); var bDstBuffer = (VkBuffer)dstBuffer; Debug.Assert(bDstBuffer != null); var handle = GCHandle.Alloc(pRegions, GCHandleType.Pinned); try { unsafe { var regionCount = (uint)pRegions.Length; var regionAddress = handle.AddrOfPinnedObject(); var pinnedArray = (MgBufferImageCopy *)regionAddress.ToPointer(); Interops.vkCmdCopyImageToBuffer(this.Handle, bSrcImage.Handle, srcImageLayout, bDstBuffer.Handle, regionCount, pinnedArray); } } finally { handle.Free(); } }