Validation layer issue detected that we were trying to record the command buffer without calling vkCmdBegin(). It was mostly occurring during pause/resume actions.
Signed-off-by: adam.b <adam.b@samsung.com>
Change-Id: Iba6b7b506706ddc4b3a24046ac05bfa364e52f45
// Ensure there are enough command buffers for each render pass,
swapchain->AllocateCommandBuffers( mRenderPasses.size() );
std::vector<Vulkan::RefCountedCommandBuffer>& renderPassBuffers = swapchain->GetCommandBuffers();
-
uint32_t index = 0;
for( auto& renderPassData : mRenderPasses )
{
else
{
auto primaryCommandBuffer = swapchain->GetLastCommandBuffer();
+ primaryCommandBuffer->Begin( vk::CommandBufferUsageFlagBits::eOneTimeSubmit, nullptr );
primaryCommandBuffer->BeginRenderPass( vk::RenderPassBeginInfo{}
.setFramebuffer( swapchain->GetCurrentFramebuffer()->GetVkHandle() )
.setRenderPass(swapchain->GetCurrentFramebuffer()->GetRenderPass() )
.setPClearValues( swapchain->GetCurrentFramebuffer()->GetClearValues().data() )
.setClearValueCount( uint32_t(swapchain->GetCurrentFramebuffer()->GetClearValues().size()) ), vk::SubpassContents::eInline );
primaryCommandBuffer->EndRenderPass();
+ primaryCommandBuffer->End();
}
for( auto& future : mMemoryTransferFutures )
void ProcessRenderPassData( Vulkan::RefCountedCommandBuffer commandBuffer, const RenderPassData& renderPassData )
{
+ commandBuffer->Begin( vk::CommandBufferUsageFlagBits::eOneTimeSubmit, nullptr );
commandBuffer->BeginRenderPass( renderPassData.beginInfo, vk::SubpassContents::eInline );
// update descriptor sets
}
commandBuffer->EndRenderPass();
+ commandBuffer->End();
}
bool EnableDepthStencilBuffer( bool enableDepth, bool enableStencil )
}
}
- auto& swapBuffer = mSwapchainBuffers[mGraphics->GetCurrentBufferIndex()];
-
// First frames don't need waiting as they haven't been submitted
// yet. Note, that waiting on the fence without resetting it may
// cause a stall ( nvidia, ubuntu )
mGraphics->CollectGarbage();
}
- DALI_LOG_STREAM( gVulkanFilter, Debug::General, "Resetting " << swapBuffer->commandBuffers.size() << " command buffers" );
-
- for( auto& commandBuffer : swapBuffer->commandBuffers )
- {
- commandBuffer->Reset();
- commandBuffer->Begin( vk::CommandBufferUsageFlagBits::eOneTimeSubmit, nullptr );
- }
-
return mFramebuffers[mSwapchainImageIndex];
}
size_t index = 0;
for( auto& commandBuffer : swapBuffer->commandBuffers )
{
- commandBuffer->End();
-
// @todo Add semaphores between each render pass
if( index < count-1 )
{
{
// Create primary buffer for each render pass & begin recording
auto commandBuffer = mGraphics->CreateCommandBuffer(true);
- commandBuffer->Begin( vk::CommandBufferUsageFlagBits::eOneTimeSubmit, nullptr );
mSwapchainBuffers[mGraphics->GetCurrentBufferIndex()]->commandBuffers.emplace_back( commandBuffer );
}
}
}
-RefCountedCommandBuffer Swapchain::GetLastCommandBuffer() const
+RefCountedCommandBuffer Swapchain::GetLastCommandBuffer()
{
+ if( mSwapchainBuffers[mGraphics->GetCurrentBufferIndex()]->commandBuffers.empty() )
+ {
+ AllocateCommandBuffers( 1 );
+ }
return mSwapchainBuffers[mGraphics->GetCurrentBufferIndex()]->commandBuffers.back();
}
/**
* Return the primary command buffer associated with the swapchain
*/
- RefCountedCommandBuffer GetLastCommandBuffer() const;
+ RefCountedCommandBuffer GetLastCommandBuffer();
/**
* Returns the primary command buffers associated with each render pass