/// <summary> /// /// </summary> public SubpassDependency(uint sourceSubpass, uint destinationSubpass, SharpVk.PipelineStageFlags sourceStageMask, SharpVk.PipelineStageFlags destinationStageMask, SharpVk.AccessFlags sourceAccessMask, SharpVk.AccessFlags destinationAccessMask, SharpVk.DependencyFlags dependencyFlags) { this.SourceSubpass = sourceSubpass; this.DestinationSubpass = destinationSubpass; this.SourceStageMask = sourceStageMask; this.DestinationStageMask = destinationStageMask; this.SourceAccessMask = sourceAccessMask; this.DestinationAccessMask = destinationAccessMask; this.DependencyFlags = dependencyFlags; }
/// <summary> /// /// </summary> public unsafe void ResetEvent(SharpVk.Event @event, SharpVk.PipelineStageFlags stageMask) { try { Interop.Commands.vkCmdResetEvent(this.handle, @event?.handle ?? default(SharpVk.Interop.Event), stageMask); } finally { Interop.HeapUtil.FreeAll(); } }
/// <summary> /// /// </summary> public unsafe void WriteTimestamp(SharpVk.PipelineStageFlags pipelineStage, SharpVk.QueryPool queryPool, uint query) { try { Interop.Commands.vkCmdWriteTimestamp(this.handle, pipelineStage, queryPool?.handle ?? default(SharpVk.Interop.QueryPool), query); } finally { Interop.HeapUtil.FreeAll(); } }
/// <summary> /// Execute a pipelined write of a marker value into a buffer. /// </summary> /// <param name="extendedHandle"> /// The CommandBuffer handle to extend. /// </param> /// <param name="pipelineStage"> /// One of the PipelineStageFlags values, specifying the pipeline stage /// whose completion triggers the marker write. /// </param> /// <param name="destinationBuffer"> /// The buffer where the marker will be written to. /// </param> /// <param name="destinationOffset"> /// The byte offset into the buffer where the marker will be written /// to. /// </param> /// <param name="marker"> /// The 32-bit value of the marker. /// </param> public static unsafe void WriteBufferMarker(this SharpVk.CommandBuffer extendedHandle, SharpVk.PipelineStageFlags pipelineStage, SharpVk.Buffer destinationBuffer, ulong destinationOffset, uint marker) { try { CommandCache commandCache = default(CommandCache); commandCache = extendedHandle.commandCache; SharpVk.Interop.Amd.VkCommandBufferWriteBufferMarkerDelegate commandDelegate = commandCache.Cache.vkCmdWriteBufferMarkerAMD; commandDelegate(extendedHandle.handle, pipelineStage, destinationBuffer?.handle ?? default(SharpVk.Interop.Buffer), destinationOffset, marker); } finally { Interop.HeapUtil.FreeAll(); } }
public static extern void vkCmdWriteTimestamp(SharpVk.Interop.CommandBuffer commandBuffer, SharpVk.PipelineStageFlags pipelineStage, SharpVk.Interop.QueryPool queryPool, uint query);
public static extern void vkCmdPipelineBarrier(SharpVk.Interop.CommandBuffer commandBuffer, SharpVk.PipelineStageFlags sourceStageMask, SharpVk.PipelineStageFlags destinationStageMask, SharpVk.DependencyFlags dependencyFlags, uint memoryBarrierCount, SharpVk.Interop.MemoryBarrier *memoryBarriers, uint bufferMemoryBarrierCount, SharpVk.Interop.BufferMemoryBarrier *bufferMemoryBarriers, uint imageMemoryBarrierCount, SharpVk.Interop.ImageMemoryBarrier *imageMemoryBarriers);
public static extern void vkCmdWaitEvents(SharpVk.Interop.CommandBuffer commandBuffer, uint eventCount, SharpVk.Interop.Event *events, SharpVk.PipelineStageFlags sourceStageMask, SharpVk.PipelineStageFlags destinationStageMask, uint memoryBarrierCount, SharpVk.Interop.MemoryBarrier *memoryBarriers, uint bufferMemoryBarrierCount, SharpVk.Interop.BufferMemoryBarrier *bufferMemoryBarriers, uint imageMemoryBarrierCount, SharpVk.Interop.ImageMemoryBarrier *imageMemoryBarriers);
public static extern void vkCmdResetEvent(SharpVk.Interop.CommandBuffer commandBuffer, SharpVk.Interop.Event @event, SharpVk.PipelineStageFlags stageMask);
/// <summary> /// /// </summary> public unsafe void PipelineBarrier(SharpVk.PipelineStageFlags sourceStageMask, SharpVk.PipelineStageFlags destinationStageMask, SharpVk.MemoryBarrier[] memoryBarriers, SharpVk.BufferMemoryBarrier[] bufferMemoryBarriers, SharpVk.ImageMemoryBarrier[] imageMemoryBarriers, SharpVk.DependencyFlags?dependencyFlags = default(SharpVk.DependencyFlags?)) { try { SharpVk.DependencyFlags marshalledDependencyFlags = default(SharpVk.DependencyFlags); SharpVk.Interop.MemoryBarrier * marshalledMemoryBarriers = default(SharpVk.Interop.MemoryBarrier *); SharpVk.Interop.BufferMemoryBarrier *marshalledBufferMemoryBarriers = default(SharpVk.Interop.BufferMemoryBarrier *); SharpVk.Interop.ImageMemoryBarrier * marshalledImageMemoryBarriers = default(SharpVk.Interop.ImageMemoryBarrier *); if (dependencyFlags != null) { marshalledDependencyFlags = dependencyFlags.Value; } else { marshalledDependencyFlags = default(SharpVk.DependencyFlags); } if (memoryBarriers != null) { var fieldPointer = (SharpVk.Interop.MemoryBarrier *)(Interop.HeapUtil.AllocateAndClear <SharpVk.Interop.MemoryBarrier>(memoryBarriers.Length).ToPointer()); for (int index = 0; index < (uint)(memoryBarriers.Length); index++) { memoryBarriers[index].MarshalTo(&fieldPointer[index]); } marshalledMemoryBarriers = fieldPointer; } else { marshalledMemoryBarriers = null; } if (bufferMemoryBarriers != null) { var fieldPointer = (SharpVk.Interop.BufferMemoryBarrier *)(Interop.HeapUtil.AllocateAndClear <SharpVk.Interop.BufferMemoryBarrier>(bufferMemoryBarriers.Length).ToPointer()); for (int index = 0; index < (uint)(bufferMemoryBarriers.Length); index++) { bufferMemoryBarriers[index].MarshalTo(&fieldPointer[index]); } marshalledBufferMemoryBarriers = fieldPointer; } else { marshalledBufferMemoryBarriers = null; } if (imageMemoryBarriers != null) { var fieldPointer = (SharpVk.Interop.ImageMemoryBarrier *)(Interop.HeapUtil.AllocateAndClear <SharpVk.Interop.ImageMemoryBarrier>(imageMemoryBarriers.Length).ToPointer()); for (int index = 0; index < (uint)(imageMemoryBarriers.Length); index++) { imageMemoryBarriers[index].MarshalTo(&fieldPointer[index]); } marshalledImageMemoryBarriers = fieldPointer; } else { marshalledImageMemoryBarriers = null; } Interop.Commands.vkCmdPipelineBarrier(this.handle, sourceStageMask, destinationStageMask, marshalledDependencyFlags, (uint)(memoryBarriers?.Length ?? 0), marshalledMemoryBarriers, (uint)(bufferMemoryBarriers?.Length ?? 0), marshalledBufferMemoryBarriers, (uint)(imageMemoryBarriers?.Length ?? 0), marshalledImageMemoryBarriers); } finally { Interop.HeapUtil.FreeAll(); } }
/// <summary> /// /// </summary> public unsafe void WaitEvents(SharpVk.Event[] events, SharpVk.PipelineStageFlags sourceStageMask, SharpVk.PipelineStageFlags destinationStageMask, SharpVk.MemoryBarrier[] memoryBarriers, SharpVk.BufferMemoryBarrier[] bufferMemoryBarriers, SharpVk.ImageMemoryBarrier[] imageMemoryBarriers) { try { SharpVk.Interop.Event * marshalledEvents = default(SharpVk.Interop.Event *); SharpVk.Interop.MemoryBarrier * marshalledMemoryBarriers = default(SharpVk.Interop.MemoryBarrier *); SharpVk.Interop.BufferMemoryBarrier *marshalledBufferMemoryBarriers = default(SharpVk.Interop.BufferMemoryBarrier *); SharpVk.Interop.ImageMemoryBarrier * marshalledImageMemoryBarriers = default(SharpVk.Interop.ImageMemoryBarrier *); if (events != null) { var fieldPointer = (SharpVk.Interop.Event *)(Interop.HeapUtil.AllocateAndClear <SharpVk.Interop.Event>(events.Length).ToPointer()); for (int index = 0; index < (uint)(events.Length); index++) { fieldPointer[index] = events[index]?.handle ?? default(SharpVk.Interop.Event); } marshalledEvents = fieldPointer; } else { marshalledEvents = null; } if (memoryBarriers != null) { var fieldPointer = (SharpVk.Interop.MemoryBarrier *)(Interop.HeapUtil.AllocateAndClear <SharpVk.Interop.MemoryBarrier>(memoryBarriers.Length).ToPointer()); for (int index = 0; index < (uint)(memoryBarriers.Length); index++) { memoryBarriers[index].MarshalTo(&fieldPointer[index]); } marshalledMemoryBarriers = fieldPointer; } else { marshalledMemoryBarriers = null; } if (bufferMemoryBarriers != null) { var fieldPointer = (SharpVk.Interop.BufferMemoryBarrier *)(Interop.HeapUtil.AllocateAndClear <SharpVk.Interop.BufferMemoryBarrier>(bufferMemoryBarriers.Length).ToPointer()); for (int index = 0; index < (uint)(bufferMemoryBarriers.Length); index++) { bufferMemoryBarriers[index].MarshalTo(&fieldPointer[index]); } marshalledBufferMemoryBarriers = fieldPointer; } else { marshalledBufferMemoryBarriers = null; } if (imageMemoryBarriers != null) { var fieldPointer = (SharpVk.Interop.ImageMemoryBarrier *)(Interop.HeapUtil.AllocateAndClear <SharpVk.Interop.ImageMemoryBarrier>(imageMemoryBarriers.Length).ToPointer()); for (int index = 0; index < (uint)(imageMemoryBarriers.Length); index++) { imageMemoryBarriers[index].MarshalTo(&fieldPointer[index]); } marshalledImageMemoryBarriers = fieldPointer; } else { marshalledImageMemoryBarriers = null; } Interop.Commands.vkCmdWaitEvents(this.handle, (uint)(events?.Length ?? 0), marshalledEvents, sourceStageMask, destinationStageMask, (uint)(memoryBarriers?.Length ?? 0), marshalledMemoryBarriers, (uint)(bufferMemoryBarriers?.Length ?? 0), marshalledBufferMemoryBarriers, (uint)(imageMemoryBarriers?.Length ?? 0), marshalledImageMemoryBarriers); } finally { Interop.HeapUtil.FreeAll(); } }