[Mesa-dev] [PATCH 3/5] gallium/st: Add a method to flush outstanding swapbuffers
Marek Olšák
maraeo at gmail.com
Mon Jun 26 19:39:35 UTC 2017
If there are no objections to other patches, patches 3-4 are:
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Marek
On Thu, Jun 22, 2017 at 12:42 PM, Thomas Hellstrom
<thellstrom at vmware.com> wrote:
> Add a state tracker interface method to flush outstanding swapbuffers, and
> add a call to it from the mesa state tracker during glFinish().
> This doesn't strictly mean the outstanding swapbuffers have actually finished
> executing but is sufficient for glFinish()
> to be able to be used as a replacement for glXWaitGL().
>
> Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>
> ---
> src/gallium/include/state_tracker/st_api.h | 2 ++
> src/mesa/state_tracker/st_cb_flush.c | 2 ++
> src/mesa/state_tracker/st_manager.c | 22 ++++++++++++++++++++++
> src/mesa/state_tracker/st_manager.h | 3 +++
> 4 files changed, 29 insertions(+)
>
> diff --git a/src/gallium/include/state_tracker/st_api.h b/src/gallium/include/state_tracker/st_api.h
> index e566b19..a7b2bba 100644
> --- a/src/gallium/include/state_tracker/st_api.h
> +++ b/src/gallium/include/state_tracker/st_api.h
> @@ -365,6 +365,8 @@ struct st_framebuffer_iface
> const enum st_attachment_type *statts,
> unsigned count,
> struct pipe_resource **out);
> + boolean (*flush_swapbuffers) (struct st_context_iface *stctx,
> + struct st_framebuffer_iface *stfbi);
> };
>
> /**
> diff --git a/src/mesa/state_tracker/st_cb_flush.c b/src/mesa/state_tracker/st_cb_flush.c
> index 6442fc9..e8c6672 100644
> --- a/src/mesa/state_tracker/st_cb_flush.c
> +++ b/src/mesa/state_tracker/st_cb_flush.c
> @@ -102,6 +102,8 @@ void st_finish( struct st_context *st )
> PIPE_TIMEOUT_INFINITE);
> st->pipe->screen->fence_reference(st->pipe->screen, &fence, NULL);
> }
> +
> + st_manager_flush_swapbuffers();
> }
>
>
> diff --git a/src/mesa/state_tracker/st_manager.c b/src/mesa/state_tracker/st_manager.c
> index cc781f4..9978e3f 100644
> --- a/src/mesa/state_tracker/st_manager.c
> +++ b/src/mesa/state_tracker/st_manager.c
> @@ -863,6 +863,28 @@ st_manager_validate_framebuffers(struct st_context *st)
> st_context_validate(st, stdraw, stread);
> }
>
> +
> +/**
> + * Flush any outstanding swapbuffers on the current draw framebuffer.
> + */
> +void
> +st_manager_flush_swapbuffers(void)
> +{
> + GET_CURRENT_CONTEXT(ctx);
> + struct st_context *st = (ctx) ? ctx->st : NULL;
> + struct st_framebuffer *stfb;
> +
> + if (!st)
> + return;
> +
> + stfb = st_ws_framebuffer(ctx->DrawBuffer);
> + if (!stfb || !stfb->iface->flush_swapbuffers)
> + return;
> +
> + stfb->iface->flush_swapbuffers(&st->iface, stfb->iface);
> +}
> +
> +
> /**
> * Add a color renderbuffer on demand. The FBO must correspond to a window,
> * not a user-created FBO.
> diff --git a/src/mesa/state_tracker/st_manager.h b/src/mesa/state_tracker/st_manager.h
> index 65874b0..b363f74 100644
> --- a/src/mesa/state_tracker/st_manager.h
> +++ b/src/mesa/state_tracker/st_manager.h
> @@ -44,4 +44,7 @@ boolean
> st_manager_add_color_renderbuffer(struct st_context *st, struct gl_framebuffer *fb,
> gl_buffer_index idx);
>
> +void
> +st_manager_flush_swapbuffers(void);
> +
> #endif /* ST_MANAGER_H */
> --
> 2.7.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list