At eglSwapBuffer time, we blindly assume we have a back buffer, but the
back buffer only gets allocated when somebody tries to render something.
NOTE: This is a candidate for the 9.0 and 9.1 branches.
https://bugs.freedesktop.org/show_bug.cgi?id=60086
{
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
struct dri2_egl_surface *dri2_surf = dri2_egl_surface(draw);
+ __DRIbuffer buffer;
int i, ret = 0;
while (dri2_surf->frame_callback && ret != -1)
if (dri2_surf->color_buffers[i].age > 0)
dri2_surf->color_buffers[i].age++;
+ /* Make sure we have a back buffer in case we're swapping without ever
+ * rendering. */
+ if (get_back_bo(dri2_surf, &buffer) < 0) {
+ _eglError(EGL_BAD_ALLOC, "dri2_swap_buffers");
+ return EGL_FALSE;
+ }
+
dri2_surf->back->age = 1;
dri2_surf->current = dri2_surf->back;
dri2_surf->back = NULL;