st/dri2 Plumb the flush_swapbuffer functionality through to dri3
Implement the state tracker manager drawable interface flush_swapbuffer method by plumbing it through to dri3 if available. 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
91c93dec98
commit
d5ba75f888
|
@ -861,6 +861,21 @@ dri2_flush_frontbuffer(struct dri_context *ctx,
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The struct dri_drawable flush_swapbuffers callback
|
||||
*/
|
||||
static void
|
||||
dri2_flush_swapbuffers(struct dri_context *ctx,
|
||||
struct dri_drawable *drawable)
|
||||
{
|
||||
__DRIdrawable *dri_drawable = drawable->dPriv;
|
||||
const __DRIimageLoaderExtension *image = drawable->sPriv->image.loader;
|
||||
|
||||
if (image && image->base.version >= 3 && image->flushSwapBuffers) {
|
||||
image->flushSwapBuffers(dri_drawable, dri_drawable->loaderPrivate);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
dri2_update_tex_buffer(struct dri_drawable *drawable,
|
||||
struct dri_context *ctx,
|
||||
|
@ -2218,6 +2233,7 @@ dri2_create_buffer(__DRIscreen * sPriv,
|
|||
drawable->allocate_textures = dri2_allocate_textures;
|
||||
drawable->flush_frontbuffer = dri2_flush_frontbuffer;
|
||||
drawable->update_tex_buffer = dri2_update_tex_buffer;
|
||||
drawable->flush_swapbuffers = dri2_flush_swapbuffers;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -122,6 +122,23 @@ dri_st_framebuffer_flush_front(struct st_context_iface *stctx,
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* The state tracker framebuffer interface flush_swapbuffers callback
|
||||
*/
|
||||
static boolean
|
||||
dri_st_framebuffer_flush_swapbuffers(struct st_context_iface *stctx,
|
||||
struct st_framebuffer_iface *stfbi)
|
||||
{
|
||||
struct dri_context *ctx = (struct dri_context *)stctx->st_manager_private;
|
||||
struct dri_drawable *drawable =
|
||||
(struct dri_drawable *) stfbi->st_manager_private;
|
||||
|
||||
if (drawable->flush_swapbuffers)
|
||||
drawable->flush_swapbuffers(ctx, drawable);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is called when we need to set up GL rendering to a new X window.
|
||||
*/
|
||||
|
@ -146,6 +163,7 @@ dri_create_buffer(__DRIscreen * sPriv,
|
|||
drawable->base.visual = &drawable->stvis;
|
||||
drawable->base.flush_front = dri_st_framebuffer_flush_front;
|
||||
drawable->base.validate = dri_st_framebuffer_validate;
|
||||
drawable->base.flush_swapbuffers = dri_st_framebuffer_flush_swapbuffers;
|
||||
drawable->base.st_manager_private = (void *) drawable;
|
||||
|
||||
drawable->screen = screen;
|
||||
|
|
|
@ -85,6 +85,8 @@ struct dri_drawable
|
|||
void (*update_tex_buffer)(struct dri_drawable *drawable,
|
||||
struct dri_context *ctx,
|
||||
struct pipe_resource *res);
|
||||
void (*flush_swapbuffers)(struct dri_context *ctx,
|
||||
struct dri_drawable *drawable);
|
||||
};
|
||||
|
||||
static inline struct dri_drawable *
|
||||
|
|
Loading…
Reference in New Issue