public void CmdCopyBuffer(IMgBuffer srcBuffer, IMgBuffer dstBuffer, MgBufferCopy[] pRegions) { var bBuffer_src = (VkBuffer)srcBuffer; Debug.Assert(bBuffer_src != null); var bBuffer_dst = (VkBuffer)dstBuffer; Debug.Assert(bBuffer_dst != null); var handle = GCHandle.Alloc(pRegions, GCHandleType.Pinned); try { unsafe { var regionCount = (uint)pRegions.Length; var region = handle.AddrOfPinnedObject(); MgBufferCopy *regions = (MgBufferCopy *)region.ToPointer(); Interops.vkCmdCopyBuffer(this.Handle, bBuffer_src.Handle, bBuffer_dst.Handle, regionCount, regions); } } finally { handle.Free(); } }