mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 04:58:05 +02: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 );
|
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
|
* 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);
|
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
|
void
|
||||||
dri_flush_frontbuffer(struct pipe_screen *screen,
|
dri_flush_frontbuffer(struct pipe_screen *screen,
|
||||||
struct pipe_surface *surf, void *context_private)
|
struct pipe_surface *surf, void *context_private)
|
||||||
|
|
|
||||||
|
|
@ -80,6 +80,9 @@ dri_create_buffer(__DRIscreenPrivate * sPriv,
|
||||||
__DRIdrawablePrivate * dPriv,
|
__DRIdrawablePrivate * dPriv,
|
||||||
const __GLcontextModes * visual, boolean isPixmap);
|
const __GLcontextModes * visual, boolean isPixmap);
|
||||||
|
|
||||||
|
void
|
||||||
|
dri_update_buffer(struct pipe_screen *screen, void *context_private);
|
||||||
|
|
||||||
void
|
void
|
||||||
dri_flush_frontbuffer(struct pipe_screen *screen,
|
dri_flush_frontbuffer(struct pipe_screen *screen,
|
||||||
struct pipe_surface *surf, void *context_private);
|
struct pipe_surface *surf, void *context_private);
|
||||||
|
|
|
||||||
|
|
@ -310,6 +310,7 @@ dri_init_screen2(__DRIscreenPrivate * sPriv)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We need to hook in here */
|
/* We need to hook in here */
|
||||||
|
screen->pipe_screen->update_buffer = dri_update_buffer;
|
||||||
screen->pipe_screen->flush_frontbuffer = dri_flush_frontbuffer;
|
screen->pipe_screen->flush_frontbuffer = dri_flush_frontbuffer;
|
||||||
|
|
||||||
driParseOptionInfo(&screen->optionCache,
|
driParseOptionInfo(&screen->optionCache,
|
||||||
|
|
|
||||||
|
|
@ -40,8 +40,8 @@ static void st_viewport(GLcontext * ctx, GLint x, GLint y,
|
||||||
{
|
{
|
||||||
struct st_context *st = ctx->st;
|
struct st_context *st = ctx->st;
|
||||||
|
|
||||||
if (st->pipe->winsys && st->pipe->winsys->update_buffer)
|
if (st->pipe->screen && st->pipe->screen->update_buffer)
|
||||||
st->pipe->winsys->update_buffer( st->pipe->winsys,
|
st->pipe->screen->update_buffer( st->pipe->screen,
|
||||||
st->pipe->priv );
|
st->pipe->priv );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue