vo_gpu_next: call start_frame in vulkan/context.c

In practice, this is for wayland. vo_gpu_next doesn't check the
check_visible parameter since it didn't descend into the
vulkan/context.c file when starting a frame. To make this happen, just
call the start_frame function pointer but pass NULL as the ra_fbo. In
there, we can do the visibility checks and after that bail out of the
start_frame function if ra_fbo is NULL.
This commit is contained in:
Dudemanguy 2021-11-04 10:01:24 -05:00
parent acde63f05a
commit 662c793a55
2 changed files with 12 additions and 2 deletions

View File

@ -577,6 +577,12 @@ static void draw_frame(struct vo *vo, struct vo_frame *frame)
p->last_id = id;
}
// Doesn't draw anything. Only checks for visibility.
struct ra_swapchain *sw = p->ra_ctx->swapchain;
bool should_draw = sw->fns->start_frame(sw, NULL);
if (!should_draw)
return;
struct pl_swapchain_frame swframe;
if (!pl_swapchain_start_frame(p->sw, &swframe))
return;

View File

@ -239,11 +239,15 @@ static bool start_frame(struct ra_swapchain *sw, struct ra_fbo *out_fbo)
{
struct priv *p = sw->priv;
struct pl_swapchain_frame frame;
bool visible = true;
if (p->params.check_visible)
visible = p->params.check_visible(sw->ctx);
if (!visible)
return false;
// If out_fbo is NULL, this was called from vo_gpu_next. Bail out.
if (out_fbo == NULL || !visible)
return visible;
if (!pl_swapchain_start_frame(p->vk->swapchain, &frame))
return false;
if (!mppl_wrap_tex(sw->ctx->ra, frame.fbo, &p->proxy_tex))