protected override void SetFramebufferCore(Framebuffer fb) { if (_activeRenderPass.Handle != VkRenderPass.Null) { EndCurrentRenderPass(); } else if (!_currentFramebufferEverActive && _currentFramebuffer != null) { // This forces any queued up texture clears to be emitted. BeginCurrentRenderPass(); EndCurrentRenderPass(); } if (_currentFramebuffer != null) { _currentFramebuffer.TransitionToFinalLayout(_cb); } VkFramebufferBase vkFB = Util.AssertSubtype <Framebuffer, VkFramebufferBase>(fb); _currentFramebuffer = vkFB; _currentFramebufferEverActive = false; _newFramebuffer = true; Util.EnsureArrayMinimumSize(ref _scissorRects, Math.Max(1, (uint)vkFB.ColorTargets.Count)); uint clearValueCount = (uint)vkFB.ColorTargets.Count; Util.EnsureArrayMinimumSize(ref _clearValues, clearValueCount + 1); // Leave an extra space for the depth value (tracked separately). Util.ClearArray(_validColorClearValues); Util.EnsureArrayMinimumSize(ref _validColorClearValues, clearValueCount); }
public override void Begin() { if (_commandBufferBegun) { throw new VeldridException( "CommandList must be in its initial state, or End() must have been called, for Begin() to be valid to call."); } if (_commandBufferEnded) { _commandBufferEnded = false; _cb = GetNextCommandBuffer(); if (_currentStagingInfo != null) { RecycleStagingInfo(_currentStagingInfo); } } _currentStagingInfo = GetStagingResourceInfo(); VkCommandBufferBeginInfo beginInfo = VkCommandBufferBeginInfo.New(); beginInfo.flags = VkCommandBufferUsageFlags.OneTimeSubmit; vkBeginCommandBuffer(_cb, ref beginInfo); _commandBufferBegun = true; ClearCachedState(); _currentFramebuffer = null; _currentGraphicsPipeline = null; Util.ClearArray(_currentGraphicsResourceSets); Util.ClearArray(_scissorRects); _currentComputePipeline = null; Util.ClearArray(_currentComputeResourceSets); }
protected override void SetFramebufferCore(Framebuffer fb) { if (_activeRenderPass.Handle != VkRenderPass.Null) { EndCurrentRenderPass(); // Place a barrier between RenderPasses, so that color / depth outputs // can be read in subsequent passes. vkCmdPipelineBarrier( _cb, VkPipelineStageFlags.ColorAttachmentOutput, VkPipelineStageFlags.TopOfPipe, VkDependencyFlags.ByRegion, 0, null, 0, null, 0, null); } VkFramebufferBase vkFB = Util.AssertSubtype <Framebuffer, VkFramebufferBase>(fb); _currentFramebuffer = vkFB; _currentFramebufferEverActive = false; Util.EnsureArrayMinimumSize(ref _scissorRects, Math.Max(1, (uint)vkFB.ColorTargets.Count)); uint clearValueCount = (uint)vkFB.ColorTargets.Count; Util.EnsureArrayMinimumSize(ref _clearValues, clearValueCount + 1); // Leave an extra space for the depth value (tracked separately). Util.ClearArray(_validColorClearValues); Util.EnsureArrayMinimumSize(ref _validColorClearValues, clearValueCount); _referencedResources.Add(vkFB); }
public override void SetFramebuffer(Framebuffer fb) { if (_activeRenderPass.Handle != VkRenderPass.Null) { EndCurrentRenderPass(); } VkFramebufferBase vkFB = Util.AssertSubtype <Framebuffer, VkFramebufferBase>(fb); _currentFramebuffer = vkFB; BeginCurrentRenderPass(); }
protected override void SetFramebufferCore(Framebuffer fb) { if (_activeRenderPass.Handle != VkRenderPass.Null) { EndCurrentRenderPass(); } VkFramebufferBase vkFB = Util.AssertSubtype <Framebuffer, VkFramebufferBase>(fb); _currentFramebuffer = vkFB; _currentFramebufferEverActive = false; Util.EnsureArrayMinimumSize(ref _scissorRects, Math.Max(1, (uint)vkFB.ColorTargets.Count)); uint clearValueCount = (uint)vkFB.ColorTargets.Count; Util.EnsureArrayMinimumSize(ref _clearValues, clearValueCount + 1); // Leave an extra space for the depth value (tracked separately). Util.ClearArray(_validColorClearValues); Util.EnsureArrayMinimumSize(ref _validColorClearValues, clearValueCount); }
public override void Begin() { if (_commandBufferBegun) { throw new VeldridException( "CommandList must be in its initial state, or End() must have been called, for Begin() to be valid to call."); } if (_commandBufferEnded) { _commandBufferEnded = false; vkResetCommandPool(_gd.Device, _pool, VkCommandPoolResetFlags.None); } VkCommandBufferBeginInfo beginInfo = VkCommandBufferBeginInfo.New(); vkBeginCommandBuffer(_cb, ref beginInfo); _commandBufferBegun = true; ClearCachedState(); _currentFramebuffer = null; _currentGraphicsPipeline = null; Util.ClearArray(_currentGraphicsResourceSets); Util.ClearArray(_scissorRects); _currentComputePipeline = null; Util.ClearArray(_currentComputeResourceSets); _referencedResources.Clear(); foreach (VkBuffer vkBuffer in _usedStagingBuffers) { _availableStagingBuffers.Add(vkBuffer); } _usedStagingBuffers.Clear(); }