Skip to content

Commit 515b68a

Browse files
committed
🐛 Present under mutex lock
Close #52 (can be reopened upon regression).
1 parent 6aab04c commit 515b68a

File tree

5 files changed

+8
-7
lines changed

5 files changed

+8
-7
lines changed

lib/render/src/renderer.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -239,10 +239,11 @@ bool Renderer::render() {
239239
// submit commands
240240
{
241241
auto lock = std::scoped_lock{m_impl->gfx.shared->mutex};
242-
frame.submit(m_impl->gfx.queue);
242+
frame.submit(lock, m_impl->gfx.queue);
243+
244+
// present image
245+
m_impl->swapchain.present(lock, m_impl->window.framebuffer_extent(), *frame.sync.present);
243246
}
244-
// present image
245-
m_impl->swapchain.present(m_impl->window.framebuffer_extent(), *frame.sync.present);
246247

247248
// rotate everything
248249
m_impl->pipes.rotate();

lib/vk/include/facade/vk/render_frame.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ struct RenderFrame {
2323

2424
Framebuffer refresh(vk::Device device, vk::RenderPass rp, RenderTarget const& rt);
2525

26-
void submit(vk::Queue queue) const;
26+
void submit(std::scoped_lock<std::mutex> const& q_lock, vk::Queue queue) const;
2727
};
2828

2929
template <std::size_t Size = buffering_v>

lib/vk/include/facade/vk/swapchain.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class Swapchain {
4747
vk::Result refresh(Spec const& spec);
4848

4949
[[nodiscard]] vk::Result acquire(glm::uvec2 extent, ImageView& out, vk::Semaphore semaphore, vk::Fence fence = {});
50-
vk::Result present(glm::uvec2 extent, vk::Semaphore wait);
50+
vk::Result present(std::scoped_lock<std::mutex> const& q_lock, glm::uvec2 extent, vk::Semaphore wait);
5151

5252
vk::SwapchainCreateInfoKHR info{};
5353

lib/vk/src/render_frame.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ Framebuffer RenderFrame::refresh(vk::Device device, vk::RenderPass rp, RenderTar
8484
return {rt.attachments(), *framebuffer, primary, secondary.span()};
8585
}
8686

87-
void RenderFrame::submit(vk::Queue queue) const {
87+
void RenderFrame::submit(std::scoped_lock<std::mutex> const&, vk::Queue queue) const {
8888
static constexpr vk::PipelineStageFlags wait = vk::PipelineStageFlagBits::eColorAttachmentOutput;
8989
auto si = vk::SubmitInfo{*sync.draw, wait, primary, *sync.present};
9090
queue.submit(si, *sync.drawn);

lib/vk/src/swapchain.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ vk::Result Swapchain::acquire(glm::uvec2 extent, ImageView& out, vk::Semaphore s
106106
return ret;
107107
}
108108

109-
vk::Result Swapchain::present(glm::uvec2 extent, vk::Semaphore wait) {
109+
vk::Result Swapchain::present(std::scoped_lock<std::mutex> const&, glm::uvec2 extent, vk::Semaphore wait) {
110110
if (!m_storage.acquired || is_zero(extent)) { return vk::Result::eNotReady; }
111111
auto pi = vk::PresentInfoKHR{};
112112
pi.swapchainCount = 1U;

0 commit comments

Comments
 (0)