On Thursday, 2017-08-03 19:29:32 +0100, Emil Velikov wrote: > From: Emil Velikov <[email protected]> > > The current two implementations - X11 and Wayland were identical, > barrind the upper limit. > > Instead of having same code twice - introduce a helper and pass the > limit as an argument. > > Thus as Android/DRM/others get support - they only need to call the > function ;-) > > Signed-off-by: Emil Velikov <[email protected]>
I still haven't really looked into that extension system, I don't understand it enough to review, so I'm skipping 1-3. 4-6, 9, 10 (with comments), 11 are Reviewed-by: Eric Engestrom <[email protected]> > --- > FWIW I choose to keep the local wrapper since I'm too lazy to copy the > same comments multiple times. Can fold it if people prefer. Nah, you'd have to duplicate `arbitrary_max_interval` too, which I find meh... > --- > src/egl/drivers/dri2/egl_dri2.c | 35 +++++++++++++++++++++++++++ > src/egl/drivers/dri2/egl_dri2.h | 3 +++ > src/egl/drivers/dri2/platform_wayland.c | 37 ++++------------------------- > src/egl/drivers/dri2/platform_x11.c | 42 > ++++----------------------------- > 4 files changed, 48 insertions(+), 69 deletions(-) > > diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c > index 733659d547f..936b7c5199e 100644 > --- a/src/egl/drivers/dri2/egl_dri2.c > +++ b/src/egl/drivers/dri2/egl_dri2.c > @@ -728,6 +728,41 @@ dri2_setup_screen(_EGLDisplay *disp) > } > } > > +void > +dri2_setup_swap_interval(_EGLDisplay *disp, int max_swap_interval) > +{ > + struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); > + GLint vblank_mode = DRI_CONF_VBLANK_DEF_INTERVAL_1; > + > + /* Allow driconf to override applications.*/ > + if (dri2_dpy->config) > + dri2_dpy->config->configQueryi(dri2_dpy->dri_screen, > + "vblank_mode", &vblank_mode); > + switch (vblank_mode) { > + case DRI_CONF_VBLANK_NEVER: > + dri2_dpy->min_swap_interval = 0; > + dri2_dpy->max_swap_interval = 0; > + dri2_dpy->default_swap_interval = 0; > + break; > + case DRI_CONF_VBLANK_ALWAYS_SYNC: > + dri2_dpy->min_swap_interval = 1; > + dri2_dpy->max_swap_interval = max_swap_interval; > + dri2_dpy->default_swap_interval = 1; > + break; > + case DRI_CONF_VBLANK_DEF_INTERVAL_0: > + dri2_dpy->min_swap_interval = 0; > + dri2_dpy->max_swap_interval = max_swap_interval; > + dri2_dpy->default_swap_interval = 0; > + break; > + default: > + case DRI_CONF_VBLANK_DEF_INTERVAL_1: > + dri2_dpy->min_swap_interval = 0; > + dri2_dpy->max_swap_interval = max_swap_interval; > + dri2_dpy->default_swap_interval = 1; > + break; > + } > +} > + > /* All platforms but DRM call this function to create the screen and populate > * the driver_configs. DRM inherits that information from its display - GBM. > */ > diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h > index 1144ce988e1..21bbc1fd966 100644 > --- a/src/egl/drivers/dri2/egl_dri2.h > +++ b/src/egl/drivers/dri2/egl_dri2.h > @@ -366,6 +366,9 @@ dri2_load_driver(_EGLDisplay *disp); > void > dri2_setup_screen(_EGLDisplay *disp); > > +void > +dri2_setup_swap_interval(_EGLDisplay *disp, int max_swap_interval); > + > EGLBoolean > dri2_load_driver_swrast(_EGLDisplay *disp); > > diff --git a/src/egl/drivers/dri2/platform_wayland.c > b/src/egl/drivers/dri2/platform_wayland.c > index 73966b7c504..38fdfe974fa 100644 > --- a/src/egl/drivers/dri2/platform_wayland.c > +++ b/src/egl/drivers/dri2/platform_wayland.c > @@ -925,7 +925,7 @@ dri2_wl_query_buffer_age(_EGLDriver *drv, > static EGLBoolean > dri2_wl_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw) > { > - return dri2_wl_swap_buffers_with_damage (drv, disp, draw, NULL, 0); > + return dri2_wl_swap_buffers_with_damage(drv, disp, draw, NULL, 0); > } > > static struct wl_buffer * > @@ -1140,41 +1140,14 @@ static const struct wl_registry_listener > registry_listener_drm = { > }; > > static void > -dri2_wl_setup_swap_interval(struct dri2_egl_display *dri2_dpy) > +dri2_wl_setup_swap_interval(_EGLDisplay *disp) > { > - GLint vblank_mode = DRI_CONF_VBLANK_DEF_INTERVAL_1; > - > /* We can't use values greater than 1 on Wayland because we are using the > * frame callback to synchronise the frame and the only way we be sure to > * get a frame callback is to attach a new buffer. Therefore we can't just > * sit drawing nothing to wait until the next ‘n’ frame callbacks */ > > - if (dri2_dpy->config) > - dri2_dpy->config->configQueryi(dri2_dpy->dri_screen, > - "vblank_mode", &vblank_mode); > - switch (vblank_mode) { > - case DRI_CONF_VBLANK_NEVER: > - dri2_dpy->min_swap_interval = 0; > - dri2_dpy->max_swap_interval = 0; > - dri2_dpy->default_swap_interval = 0; > - break; > - case DRI_CONF_VBLANK_ALWAYS_SYNC: > - dri2_dpy->min_swap_interval = 1; > - dri2_dpy->max_swap_interval = 1; > - dri2_dpy->default_swap_interval = 1; > - break; > - case DRI_CONF_VBLANK_DEF_INTERVAL_0: > - dri2_dpy->min_swap_interval = 0; > - dri2_dpy->max_swap_interval = 1; > - dri2_dpy->default_swap_interval = 0; > - break; > - default: > - case DRI_CONF_VBLANK_DEF_INTERVAL_1: > - dri2_dpy->min_swap_interval = 0; > - dri2_dpy->max_swap_interval = 1; > - dri2_dpy->default_swap_interval = 1; > - break; > - } > + dri2_setup_swap_interval(disp, 1); > } > > static const struct dri2_egl_display_vtbl dri2_wl_display_vtbl = { > @@ -1354,7 +1327,7 @@ dri2_initialize_wayland_drm(_EGLDriver *drv, > _EGLDisplay *disp) > > dri2_setup_screen(disp); > > - dri2_wl_setup_swap_interval(dri2_dpy); > + dri2_wl_setup_swap_interval(disp); > > /* To use Prime, we must have _DRI_IMAGE v7 at least. > * createImageFromFds support indicates that Prime export/import > @@ -1967,7 +1940,7 @@ dri2_initialize_wayland_swrast(_EGLDriver *drv, > _EGLDisplay *disp) > > dri2_setup_screen(disp); > > - dri2_wl_setup_swap_interval(dri2_dpy); > + dri2_wl_setup_swap_interval(disp); > > if (!dri2_wl_add_configs_for_visuals(drv, disp)) { > _eglError(EGL_NOT_INITIALIZED, "DRI2: failed to add configs"); > diff --git a/src/egl/drivers/dri2/platform_x11.c > b/src/egl/drivers/dri2/platform_x11.c > index bec8a277958..111c478b9de 100644 > --- a/src/egl/drivers/dri2/platform_x11.c > +++ b/src/egl/drivers/dri2/platform_x11.c > @@ -1259,46 +1259,14 @@ dri2_initialize_x11_swrast(_EGLDriver *drv, > _EGLDisplay *disp) > } > > static void > -dri2_x11_setup_swap_interval(struct dri2_egl_display *dri2_dpy) > +dri2_x11_setup_swap_interval(_EGLDisplay *disp) > { > - GLint vblank_mode = DRI_CONF_VBLANK_DEF_INTERVAL_1; > int arbitrary_max_interval = 1000; > > - /* default behavior for no SwapBuffers support: no vblank syncing > - * either. > - */ > - dri2_dpy->min_swap_interval = 0; > - dri2_dpy->max_swap_interval = 0; > - > /* If we do have swapbuffers, then we can support pretty much any swap > - * interval, but we allow driconf to override applications. > + * interval. > */ > - if (dri2_dpy->config) > - dri2_dpy->config->configQueryi(dri2_dpy->dri_screen, > - "vblank_mode", &vblank_mode); > - switch (vblank_mode) { > - case DRI_CONF_VBLANK_NEVER: > - dri2_dpy->min_swap_interval = 0; > - dri2_dpy->max_swap_interval = 0; > - dri2_dpy->default_swap_interval = 0; > - break; > - case DRI_CONF_VBLANK_ALWAYS_SYNC: > - dri2_dpy->min_swap_interval = 1; > - dri2_dpy->max_swap_interval = arbitrary_max_interval; > - dri2_dpy->default_swap_interval = 1; > - break; > - case DRI_CONF_VBLANK_DEF_INTERVAL_0: > - dri2_dpy->min_swap_interval = 0; > - dri2_dpy->max_swap_interval = arbitrary_max_interval; > - dri2_dpy->default_swap_interval = 0; > - break; > - default: > - case DRI_CONF_VBLANK_DEF_INTERVAL_1: > - dri2_dpy->min_swap_interval = 0; > - dri2_dpy->max_swap_interval = arbitrary_max_interval; > - dri2_dpy->default_swap_interval = 1; > - break; > - } > + dri2_setup_swap_interval(disp, arbitrary_max_interval); > } > > #ifdef HAVE_DRI3 > @@ -1340,7 +1308,7 @@ dri2_initialize_x11_dri3(_EGLDriver *drv, _EGLDisplay > *disp) > > dri2_setup_screen(disp); > > - dri2_x11_setup_swap_interval(dri2_dpy); > + dri2_x11_setup_swap_interval(disp); > > if (!dri2_dpy->is_different_gpu) > disp->Extensions.KHR_image_pixmap = EGL_TRUE; > @@ -1420,7 +1388,7 @@ dri2_initialize_x11_dri2(_EGLDriver *drv, _EGLDisplay > *disp) > > dri2_setup_screen(disp); > > - dri2_x11_setup_swap_interval(dri2_dpy); > + dri2_x11_setup_swap_interval(disp); > > disp->Extensions.KHR_image_pixmap = EGL_TRUE; > disp->Extensions.NOK_swap_region = EGL_TRUE; > -- > 2.13.3 > _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
