mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 00:58:05 +02:00
egl/dri3: implement query surface hook
This is a DRI3 version of a change made for DRI2 (4d6d4f939e, "egl/dri2: implement query surface hook"), that fixed failures in dEQP-EGL.functional.resize.surface_size.grow and dEQP-EGL.functional.resize.surface_size.shrink. Cc: Tapani Pälli <tapani.palli@intel.com> Cc: Mark Janes <mark.a.janes@intel.com> Cc: Chad Versace <chadversary@chromium.org> Signed-off-by: Brendan King <Brendan.King@imgtec.com> Reviewed-by: Tapani Pälli <tapani.palli@intel.com> Cc: "17.0" <mesa-stable@lists.freedesktop.org> (cherry picked from commit884f65e185)
This commit is contained in:
parent
2e46d4121e
commit
5aa38832f0
3 changed files with 45 additions and 0 deletions
|
|
@ -419,6 +419,25 @@ dri3_query_buffer_age(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf)
|
|||
return loader_dri3_query_buffer_age(&dri3_surf->loader_drawable);
|
||||
}
|
||||
|
||||
static EGLBoolean
|
||||
dri3_query_surface(_EGLDriver *drv, _EGLDisplay *dpy,
|
||||
_EGLSurface *surf, EGLint attribute,
|
||||
EGLint *value)
|
||||
{
|
||||
struct dri3_egl_surface *dri3_surf = dri3_egl_surface(surf);
|
||||
|
||||
switch (attribute) {
|
||||
case EGL_WIDTH:
|
||||
case EGL_HEIGHT:
|
||||
loader_dri3_update_drawable_geometry(&dri3_surf->loader_drawable);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return _eglQuerySurface(drv, dpy, surf, attribute, value);
|
||||
}
|
||||
|
||||
static __DRIdrawable *
|
||||
dri3_get_dri_drawable(_EGLSurface *surf)
|
||||
{
|
||||
|
|
@ -441,6 +460,7 @@ struct dri2_egl_display_vtbl dri3_x11_display_vtbl = {
|
|||
.post_sub_buffer = dri2_fallback_post_sub_buffer,
|
||||
.copy_buffers = dri3_copy_buffers,
|
||||
.query_buffer_age = dri3_query_buffer_age,
|
||||
.query_surface = dri3_query_surface,
|
||||
.create_wayland_buffer_from_image = dri2_fallback_create_wayland_buffer_from_image,
|
||||
.get_sync_values = dri3_get_sync_values,
|
||||
.get_dri_drawable = dri3_get_dri_drawable,
|
||||
|
|
|
|||
|
|
@ -1408,3 +1408,26 @@ loader_dri3_get_buffers(__DRIdrawable *driDrawable,
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
/** loader_dri3_update_drawable_geometry
|
||||
*
|
||||
* Get the current drawable geometry.
|
||||
*/
|
||||
void
|
||||
loader_dri3_update_drawable_geometry(struct loader_dri3_drawable *draw)
|
||||
{
|
||||
xcb_get_geometry_cookie_t geom_cookie;
|
||||
xcb_get_geometry_reply_t *geom_reply;
|
||||
|
||||
geom_cookie = xcb_get_geometry(draw->conn, draw->drawable);
|
||||
|
||||
geom_reply = xcb_get_geometry_reply(draw->conn, geom_cookie, NULL);
|
||||
|
||||
if (geom_reply) {
|
||||
draw->width = geom_reply->width;
|
||||
draw->height = geom_reply->height;
|
||||
draw->vtable->set_drawable_size(draw, draw->width, draw->height);
|
||||
|
||||
free(geom_reply);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -239,4 +239,6 @@ loader_dri3_get_buffers(__DRIdrawable *driDrawable,
|
|||
uint32_t buffer_mask,
|
||||
struct __DRIimageList *buffers);
|
||||
|
||||
void
|
||||
loader_dri3_update_drawable_geometry(struct loader_dri3_drawable *draw);
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue