diff --git a/packages/ludic.render3d/gpu_vk_draw.ludic b/packages/ludic.render3d/gpu_vk_draw.ludic index fdb3bd3e..b56bd38d 100644 --- a/packages/ludic.render3d/gpu_vk_draw.ludic +++ b/packages/ludic.render3d/gpu_vk_draw.ludic @@ -1012,8 +1012,8 @@ function gvk_frame_cb(render3d_st: mut Render3dState) -> pointer { # the frame in flight uses the other half of the ring and the other pool, unless it has this slot if render3d_st.gvk_frame_pending and (render3d_st.gvk_frame_pending_no & 1) == (render3d_st.gvk_frame_no & 1) { gvk_frame_wait(render3d_st) } gvk_frame_reset(render3d_st) + gvk_prime_submit(render3d_st) render3d_st.gvk_cb = gvk_once_begin(render3d_st) - gvk_prime_flush(render3d_st, render3d_st.gvk_cb) } return render3d_st.gvk_cb } diff --git a/packages/ludic.render3d/gpu_vk_res.ludic b/packages/ludic.render3d/gpu_vk_res.ludic index bdcc6b3f..7eab6624 100644 --- a/packages/ludic.render3d/gpu_vk_res.ludic +++ b/packages/ludic.render3d/gpu_vk_res.ludic @@ -775,6 +775,14 @@ function gvk_prime(render3d_st: mut Render3dState, b: int, buf: long) -> void { render3d_st.gvk_prime_h[render3d_st.gvk_prime_n] = buf render3d_st.gvk_prime_n += 1 } +# In a command buffer of their own, submitted and waited for at once: recorded into the frame's, a +# buffer released later in that frame (a guest loading its models) was destroyed before the copy ran. +function gvk_prime_submit(render3d_st: mut Render3dState) -> void { + if render3d_st.gvk_prime_n == 0 { return } + let cb = gvk_once_begin(render3d_st) + gvk_prime_flush(render3d_st, cb) + gvk_once_end(render3d_st, cb) +} function gvk_prime_flush(render3d_st: mut Render3dState, cb: pointer) -> void { if render3d_st.gvk_prime_n == 0 { return } if render3d_st.gvk_prime_dst == 0 and not gvk_prime_target(render3d_st) {