/// <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; }
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);
/// <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(); } }