From 7351415ebf8d4fb8a049717030d1151b5eebdad7 Mon Sep 17 00:00:00 2001 From: Anish Bhobe Date: Wed, 7 May 2025 18:27:13 +0200 Subject: [PATCH] Consolidate Present as a special submit. --- aster/include/aster/systems/device.h | 5 +---- aster/src/aster/systems/device.cpp | 20 ++++++-------------- samples/01_triangle/triangle.cpp | 4 +--- 3 files changed, 8 insertions(+), 21 deletions(-) diff --git a/aster/include/aster/systems/device.h b/aster/include/aster/systems/device.h index 1cebc2e..b12a190 100644 --- a/aster/include/aster/systems/device.h +++ b/aster/include/aster/systems/device.h @@ -581,10 +581,7 @@ class Device final return {m_Swapchain.m_Extent.width, m_Swapchain.m_Extent.height}; } - using Receipt = u32; - Receipt Submit(Frame &frame, GraphicsContext &graphicsContext); - - void Present(Frame &frame); + void Present(Frame &frame, GraphicsContext &graphicsContext); friend Context; friend GraphicsContext; diff --git a/aster/src/aster/systems/device.cpp b/aster/src/aster/systems/device.cpp index 8ffa063..1adeeaa 100644 --- a/aster/src/aster/systems/device.cpp +++ b/aster/src/aster/systems/device.cpp @@ -980,13 +980,11 @@ systems::Device::GetNextFrame() return currentFrame; } -systems::Device::Receipt -systems::Device::Submit(Frame &frame, GraphicsContext &graphicsContext) +void +systems::Device::Present(Frame &frame, GraphicsContext &graphicsContext) { - // TODO Consider a semaphore pool that you can 'pick' a semaphore from and use for submits. - // This can be used as a wait-semaphore for the next submit if you say 'depends on'. vk::PipelineStageFlags waitDstStage = vk::PipelineStageFlagBits::eColorAttachmentOutput; - vk::SubmitInfo submitInfo = { + const vk::SubmitInfo submitInfo = { .waitSemaphoreCount = 1, .pWaitSemaphores = &frame.m_ImageAcquireSem, .pWaitDstStageMask = &waitDstStage, @@ -995,17 +993,11 @@ systems::Device::Submit(Frame &frame, GraphicsContext &graphicsContext) .signalSemaphoreCount = 1, .pSignalSemaphores = &frame.m_RenderFinishSem, }; - auto result = m_GraphicsQueue.submit(1, &submitInfo, frame.m_FrameAvailableFence); + vk::Result result = m_GraphicsQueue.submit(1, &submitInfo, frame.m_FrameAvailableFence); ERROR_IF(Failed(result), "Command queue submit failed. Cause: {}", result) THEN_ABORT(result); - return 0; -} - -void -systems::Device::Present(Frame &frame) -{ - vk::PresentInfoKHR presentInfo = { + const vk::PresentInfoKHR presentInfo = { .waitSemaphoreCount = 1, .pWaitSemaphores = &frame.m_RenderFinishSem, .swapchainCount = 1, @@ -1013,7 +1005,7 @@ systems::Device::Present(Frame &frame) .pImageIndices = &frame.m_ImageIdx, .pResults = nullptr, }; - switch (auto result = m_GraphicsQueue.presentKHR(&presentInfo)) + switch (result = m_GraphicsQueue.presentKHR(&presentInfo)) { case vk::Result::eSuccess: break; diff --git a/samples/01_triangle/triangle.cpp b/samples/01_triangle/triangle.cpp index 55ceb94..07dd4fb 100644 --- a/samples/01_triangle/triangle.cpp +++ b/samples/01_triangle/triangle.cpp @@ -184,9 +184,7 @@ main(int, char **) context.End(); - device.Submit(currentFrame, context); - - device.Present(currentFrame); + device.Present(currentFrame, context); } device.WaitIdle();