/// <summary> /// /// </summary> /// <param name="extendedHandle"> /// The Queue handle to extend. /// </param> public static unsafe SharpVk.NVidia.CheckpointData[] GetCheckpointData(this SharpVk.Queue extendedHandle) { try { SharpVk.NVidia.CheckpointData[] result = default(SharpVk.NVidia.CheckpointData[]); uint marshalledCheckpointDataCount = default(uint); CommandCache commandCache = default(CommandCache); SharpVk.Interop.NVidia.CheckpointData *marshalledCheckpointData = default(SharpVk.Interop.NVidia.CheckpointData *); commandCache = extendedHandle.commandCache; SharpVk.Interop.NVidia.VkQueueGetCheckpointDataDelegate commandDelegate = commandCache.Cache.vkGetQueueCheckpointDataNV; commandDelegate(extendedHandle.handle, &marshalledCheckpointDataCount, marshalledCheckpointData); marshalledCheckpointData = (SharpVk.Interop.NVidia.CheckpointData *)(Interop.HeapUtil.Allocate <SharpVk.Interop.NVidia.CheckpointData>((uint)(marshalledCheckpointDataCount))); commandDelegate(extendedHandle.handle, &marshalledCheckpointDataCount, marshalledCheckpointData); if (marshalledCheckpointData != null) { var fieldPointer = new SharpVk.NVidia.CheckpointData[(uint)(marshalledCheckpointDataCount)]; for (int index = 0; index < (uint)(marshalledCheckpointDataCount); index++) { fieldPointer[index] = SharpVk.NVidia.CheckpointData.MarshalFrom(&marshalledCheckpointData[index]); } result = fieldPointer; } else { result = null; } return(result); } finally { Interop.HeapUtil.FreeAll(); } }
/// <summary> /// /// </summary> internal static unsafe CheckpointData MarshalFrom(SharpVk.Interop.NVidia.CheckpointData *pointer) { CheckpointData result = default(CheckpointData); result.Stage = pointer->Stage; result.CheckpointMarker = new IntPtr(pointer->CheckpointMarker); return(result); }