mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-27 19:10:14 +01:00
gallium/st: Add a method to flush outstanding swapbuffers
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@vmware.com> Reviewed-by: Marek Olšák <marek.olsak@amd.com> Reviewed-by: Brian Paul <brianp@vmware.com> Reviewed-by: Sinclair Yeh <syeh@vmware.com>
This commit is contained in:
parent
ad5136ac82
commit
91c93dec98
4 changed files with 29 additions and 0 deletions
|
|
@ -366,6 +366,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);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -73,6 +73,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();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1064,6 +1064,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.
|
||||
|
|
|
|||
|
|
@ -53,4 +53,7 @@ st_framebuffer_reference(struct st_framebuffer **ptr,
|
|||
void
|
||||
st_framebuffer_interface_destroy(struct st_framebuffer_interface *stfbi);
|
||||
|
||||
void
|
||||
st_manager_flush_swapbuffers(void);
|
||||
|
||||
#endif /* ST_MANAGER_H */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue