drisw: hook up EXT_buffer_age
drisw only has a single drawable, which means the buffer age is always 1 Acked-by: Daniel Stone <daniels@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27554>
This commit is contained in:

committed by
Marge Bot

parent
9eb4b86e76
commit
81ecb21d50
@@ -913,7 +913,7 @@ struct __DRIframebufferRec {
|
||||
* extension. Version 1 is required by the X server, and version 3 is used.
|
||||
*/
|
||||
#define __DRI_SWRAST "DRI_SWRast"
|
||||
#define __DRI_SWRAST_VERSION 4
|
||||
#define __DRI_SWRAST_VERSION 5
|
||||
|
||||
struct __DRIswrastExtensionRec {
|
||||
__DRIextension base;
|
||||
@@ -960,6 +960,10 @@ struct __DRIswrastExtensionRec {
|
||||
const __DRIextension **driver_extensions,
|
||||
const __DRIconfig ***driver_configs,
|
||||
void *loaderPrivate);
|
||||
/**
|
||||
* \since version 5
|
||||
*/
|
||||
int (*queryBufferAge)(__DRIdrawable *drawable);
|
||||
|
||||
};
|
||||
|
||||
|
@@ -2636,6 +2636,16 @@ dri2_wl_swrast_swap_buffers(_EGLDisplay *disp, _EGLSurface *draw)
|
||||
return EGL_TRUE;
|
||||
}
|
||||
|
||||
static EGLint
|
||||
dri2_wl_swrast_query_buffer_age(_EGLDisplay *disp, _EGLSurface *surface)
|
||||
{
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||
struct dri2_egl_surface *dri2_surf = dri2_egl_surface(surface);
|
||||
|
||||
assert(dri2_dpy->swrast);
|
||||
return dri2_dpy->swrast->queryBufferAge(dri2_surf->dri_drawable);
|
||||
}
|
||||
|
||||
static void
|
||||
shm_handle_format(void *data, struct wl_shm *shm, uint32_t format)
|
||||
{
|
||||
@@ -2692,6 +2702,7 @@ static const struct dri2_egl_display_vtbl dri2_wl_swrast_display_vtbl = {
|
||||
.create_image = dri2_create_image_khr,
|
||||
.swap_buffers = dri2_wl_swrast_swap_buffers,
|
||||
.get_dri_drawable = dri2_surface_get_dri_drawable,
|
||||
.query_buffer_age = dri2_wl_swrast_query_buffer_age,
|
||||
};
|
||||
|
||||
static const __DRIswrastLoaderExtension swrast_loader_extension = {
|
||||
@@ -2812,6 +2823,7 @@ dri2_initialize_wayland_swrast(_EGLDisplay *disp)
|
||||
if (disp->Options.Zink && dri2_dpy->fd_render_gpu >= 0 &&
|
||||
(dri2_dpy->wl_dmabuf || dri2_dpy->wl_drm))
|
||||
dri2_set_WL_bind_wayland_display(disp);
|
||||
disp->Extensions.EXT_buffer_age = EGL_TRUE;
|
||||
disp->Extensions.EXT_swap_buffers_with_damage = EGL_TRUE;
|
||||
disp->Extensions.EXT_present_opaque = EGL_TRUE;
|
||||
|
||||
|
@@ -1321,6 +1321,16 @@ dri2_kopper_query_buffer_age(_EGLDisplay *disp, _EGLSurface *surf)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static EGLint
|
||||
dri2_swrast_query_buffer_age(_EGLDisplay *disp, _EGLSurface *surf)
|
||||
{
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||
struct dri2_egl_surface *dri2_surf = dri2_egl_surface(surf);
|
||||
|
||||
assert(dri2_dpy->swrast);
|
||||
return dri2_dpy->swrast->queryBufferAge(dri2_surf->dri_drawable);
|
||||
}
|
||||
|
||||
static const struct dri2_egl_display_vtbl dri2_x11_swrast_display_vtbl = {
|
||||
.authenticate = NULL,
|
||||
.create_window_surface = dri2_x11_create_window_surface,
|
||||
@@ -1332,6 +1342,7 @@ static const struct dri2_egl_display_vtbl dri2_x11_swrast_display_vtbl = {
|
||||
.swap_buffers_region = dri2_x11_swap_buffers_region,
|
||||
.post_sub_buffer = dri2_x11_post_sub_buffer,
|
||||
.copy_buffers = dri2_x11_copy_buffers,
|
||||
.query_buffer_age = dri2_swrast_query_buffer_age,
|
||||
/* XXX: should really implement this since X11 has pixmaps */
|
||||
.query_surface = dri2_query_surface,
|
||||
.get_msc_rate = dri2_x11_get_msc_rate,
|
||||
@@ -1549,12 +1560,12 @@ dri2_initialize_x11_swrast(_EGLDisplay *disp)
|
||||
disp->Extensions.KHR_image_pixmap = EGL_TRUE;
|
||||
disp->Extensions.NOK_texture_from_pixmap = EGL_TRUE;
|
||||
disp->Extensions.CHROMIUM_sync_control = EGL_TRUE;
|
||||
disp->Extensions.EXT_buffer_age = EGL_TRUE;
|
||||
disp->Extensions.EXT_swap_buffers_with_damage = EGL_TRUE;
|
||||
|
||||
if (dri2_dpy->multibuffers_available)
|
||||
dri2_set_WL_bind_wayland_display(disp);
|
||||
}
|
||||
disp->Extensions.EXT_buffer_age = EGL_TRUE;
|
||||
disp->Extensions.ANGLE_sync_control_rate = EGL_TRUE;
|
||||
|
||||
if (!dri2_x11_add_configs_for_visuals(dri2_dpy, disp, !disp->Options.Zink))
|
||||
|
@@ -84,6 +84,9 @@ struct dri_drawable
|
||||
unsigned int lastStamp;
|
||||
int w, h;
|
||||
|
||||
/* generic for swrast */
|
||||
unsigned buffer_age;
|
||||
|
||||
/* kopper */
|
||||
struct kopper_loader_info info;
|
||||
__DRIimage *image; //texture_from_pixmap
|
||||
|
@@ -751,6 +751,7 @@ driCreateNewDrawable(__DRIscreen *psp,
|
||||
struct dri_screen *screen = dri_screen(psp);
|
||||
struct dri_drawable *drawable =
|
||||
screen->create_drawable(screen, &config->modes, GL_FALSE, data);
|
||||
drawable->buffer_age = 0;
|
||||
|
||||
return opaque_dri_drawable(drawable);
|
||||
}
|
||||
@@ -855,6 +856,13 @@ driSwapBuffers(__DRIdrawable *pdp)
|
||||
drawable->swap_buffers(drawable);
|
||||
}
|
||||
|
||||
static int
|
||||
driSWRastQueryBufferAge(__DRIdrawable *pdp)
|
||||
{
|
||||
struct dri_drawable *drawable = dri_drawable(pdp);
|
||||
return drawable->buffer_age;
|
||||
}
|
||||
|
||||
/** Core interface */
|
||||
const __DRIcoreExtension driCoreExtension = {
|
||||
.base = { __DRI_CORE, 2 },
|
||||
@@ -915,6 +923,7 @@ const __DRIswrastExtension driSWRastExtension = {
|
||||
.createNewContextForAPI = driCreateNewContextForAPI,
|
||||
.createContextAttribs = driCreateContextAttribs,
|
||||
.createNewScreen2 = driSWRastCreateNewScreen2,
|
||||
.queryBufferAge = driSWRastQueryBufferAge,
|
||||
};
|
||||
|
||||
const __DRI2configQueryExtension dri2ConfigQueryExtension = {
|
||||
|
@@ -256,6 +256,7 @@ drisw_swap_buffers(struct dri_drawable *drawable)
|
||||
fence, OS_TIMEOUT_INFINITE);
|
||||
screen->base.screen->fence_reference(screen->base.screen, &fence, NULL);
|
||||
drisw_copy_to_front(ctx->st->pipe, drawable, ptex);
|
||||
drawable->buffer_age = 1;
|
||||
|
||||
/* TODO: remove this if the framebuffer state doesn't change. */
|
||||
st_context_invalidate_state(ctx->st, ST_INVALIDATE_FB_STATE);
|
||||
@@ -370,6 +371,7 @@ drisw_allocate_textures(struct dri_context *stctx,
|
||||
pipe_resource_reference(&drawable->textures[i], NULL);
|
||||
pipe_resource_reference(&drawable->msaa_textures[i], NULL);
|
||||
}
|
||||
drawable->buffer_age = 0;
|
||||
}
|
||||
|
||||
memset(&templ, 0, sizeof(templ));
|
||||
|
Reference in New Issue
Block a user