mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-31 22:50:08 +01:00
st/dri: update dri2 drawables when viewport is changed
Fixes gnome-shell on nouveau, as well as window resize with various other applications. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
e88294328c
commit
116a02be22
5 changed files with 19 additions and 2 deletions
|
|
@ -266,6 +266,11 @@ struct pipe_screen {
|
|||
|
||||
void (*video_surface_destroy)( struct pipe_video_surface *vsfc );
|
||||
|
||||
/**
|
||||
* Do any special operations to ensure buffer size is correct
|
||||
*/
|
||||
void (*update_buffer)( struct pipe_screen *ws,
|
||||
void *context_private );
|
||||
|
||||
/**
|
||||
* Do any special operations to ensure frontbuffer contents are
|
||||
|
|
|
|||
|
|
@ -271,6 +271,14 @@ void dri2_set_tex_buffer(__DRIcontext *pDRICtx, GLint target,
|
|||
dri2_set_tex_buffer2(pDRICtx, target, GLX_TEXTURE_FORMAT_RGBA_EXT, dPriv);
|
||||
}
|
||||
|
||||
void
|
||||
dri_update_buffer(struct pipe_screen *screen, void *context_private)
|
||||
{
|
||||
struct dri_context *ctx = (struct dri_context *)context_private;
|
||||
|
||||
dri_get_buffers(ctx->dPriv);
|
||||
}
|
||||
|
||||
void
|
||||
dri_flush_frontbuffer(struct pipe_screen *screen,
|
||||
struct pipe_surface *surf, void *context_private)
|
||||
|
|
|
|||
|
|
@ -80,6 +80,9 @@ dri_create_buffer(__DRIscreenPrivate * sPriv,
|
|||
__DRIdrawablePrivate * dPriv,
|
||||
const __GLcontextModes * visual, boolean isPixmap);
|
||||
|
||||
void
|
||||
dri_update_buffer(struct pipe_screen *screen, void *context_private);
|
||||
|
||||
void
|
||||
dri_flush_frontbuffer(struct pipe_screen *screen,
|
||||
struct pipe_surface *surf, void *context_private);
|
||||
|
|
|
|||
|
|
@ -310,6 +310,7 @@ dri_init_screen2(__DRIscreenPrivate * sPriv)
|
|||
}
|
||||
|
||||
/* We need to hook in here */
|
||||
screen->pipe_screen->update_buffer = dri_update_buffer;
|
||||
screen->pipe_screen->flush_frontbuffer = dri_flush_frontbuffer;
|
||||
|
||||
driParseOptionInfo(&screen->optionCache,
|
||||
|
|
|
|||
|
|
@ -40,8 +40,8 @@ static void st_viewport(GLcontext * ctx, GLint x, GLint y,
|
|||
{
|
||||
struct st_context *st = ctx->st;
|
||||
|
||||
if (st->pipe->winsys && st->pipe->winsys->update_buffer)
|
||||
st->pipe->winsys->update_buffer( st->pipe->winsys,
|
||||
if (st->pipe->screen && st->pipe->screen->update_buffer)
|
||||
st->pipe->screen->update_buffer( st->pipe->screen,
|
||||
st->pipe->priv );
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue