summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChad Versace <[email protected]>2016-10-18 09:39:49 -0700
committerChad Versace <[email protected]>2016-10-18 11:12:22 -0700
commit52a6483e8a016f3dec7db8634a85b9fa62e86693 (patch)
treeafad610aa002bf384e9a0cd0316ec55ea024d8bd
parent21af69e7531536ff1564df6f960c51667bffb7ef (diff)
egl/surfaceless: Fix segfault in eglSwapBuffers
Since commit 63c5d5c6c46c8472ee7a8241a0f80f13d79cb8cd, the surfaceless platform has allowed creation of pbuffer surfaces. But the vtable entry for eglSwapBuffers has remained NULL. Discovered by running a little pbuffer test. Cc: Gurchetan Singh <[email protected]> Reviewed-by: Anuj Phogat <[email protected]>
-rw-r--r--src/egl/drivers/dri2/platform_surfaceless.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/egl/drivers/dri2/platform_surfaceless.c b/src/egl/drivers/dri2/platform_surfaceless.c
index c81eacafdac..025aaa25506 100644
--- a/src/egl/drivers/dri2/platform_surfaceless.c
+++ b/src/egl/drivers/dri2/platform_surfaceless.c
@@ -178,6 +178,17 @@ dri2_surfaceless_create_pbuffer_surface(_EGLDriver *drv, _EGLDisplay *disp,
}
static EGLBoolean
+surfaceless_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf)
+{
+ assert(!surf || surf->Type == EGL_PBUFFER_BIT);
+
+ /* From the EGL 1.5 spec:
+ * If surface is a [...] pbuffer surface, eglSwapBuffers has no effect.
+ */
+ return EGL_TRUE;
+}
+
+static EGLBoolean
surfaceless_add_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *dpy)
{
struct dri2_egl_display *dri2_dpy = dri2_egl_display(dpy);
@@ -223,6 +234,7 @@ static struct dri2_egl_display_vtbl dri2_surfaceless_display_vtbl = {
.destroy_surface = surfaceless_destroy_surface,
.create_image = dri2_create_image_khr,
.swap_interval = dri2_fallback_swap_interval,
+ .swap_buffers = surfaceless_swap_buffers,
.swap_buffers_with_damage = dri2_fallback_swap_buffers_with_damage,
.swap_buffers_region = dri2_fallback_swap_buffers_region,
.post_sub_buffer = dri2_fallback_post_sub_buffer,