static boolean dri2_surface_flush_frontbuffer(struct native_surface *nsurf) { struct dri2_surface *dri2surf = dri2_surface(nsurf); struct dri2_display *dri2dpy = dri2surf->dri2dpy; struct native_display *ndpy = &dri2dpy->base; struct pipe_context *pipe = ndpy_get_copy_context(ndpy); /* flush buffer */ pipe->flush_resource(pipe, dri2surf->textures[NATIVE_ATTACHMENT_FRONT_LEFT]); pipe->flush(pipe, NULL, 0); /* copy to real front buffer */ if (dri2surf->have_fake) x11_drawable_copy_buffers(dri2dpy->xscr, dri2surf->drawable, 0, 0, dri2surf->width, dri2surf->height, DRI2BufferFakeFrontLeft, DRI2BufferFrontLeft); /* force buffers to be updated in next validation call */ if (!dri2_surface_receive_events(&dri2surf->base)) { dri2surf->server_stamp++; dri2dpy->event_handler->invalid_surface(&dri2dpy->base, &dri2surf->base, dri2surf->server_stamp); } return TRUE; }
static boolean dri2_surface_swap_buffers(struct native_surface *nsurf, int num_rects, const int *rects) { struct dri2_surface *dri2surf = dri2_surface(nsurf); struct dri2_display *dri2dpy = dri2surf->dri2dpy; struct native_display *ndpy = &dri2dpy->base; struct pipe_context *pipe = ndpy_get_copy_context(ndpy); /* copy to front buffer */ if (dri2surf->have_back) { pipe->flush_resource(pipe, dri2surf->textures[NATIVE_ATTACHMENT_BACK_LEFT]); pipe->flush(pipe, NULL, 0); if (num_rects > 0) x11_drawable_copy_buffers_region(dri2dpy->xscr, dri2surf->drawable, num_rects, rects, DRI2BufferBackLeft, DRI2BufferFrontLeft); else x11_drawable_copy_buffers(dri2dpy->xscr, dri2surf->drawable, 0, 0, dri2surf->width, dri2surf->height, DRI2BufferBackLeft, DRI2BufferFrontLeft); } /* and update fake front buffer */ if (dri2surf->have_fake) { if (num_rects > 0) x11_drawable_copy_buffers_region(dri2dpy->xscr, dri2surf->drawable, num_rects, rects, DRI2BufferFrontLeft, DRI2BufferFakeFrontLeft); else x11_drawable_copy_buffers(dri2dpy->xscr, dri2surf->drawable, 0, 0, dri2surf->width, dri2surf->height, DRI2BufferFrontLeft, DRI2BufferFakeFrontLeft); } /* force buffers to be updated in next validation call */ if (!dri2_surface_receive_events(&dri2surf->base)) { dri2surf->server_stamp++; dri2dpy->event_handler->invalid_surface(&dri2dpy->base, &dri2surf->base, dri2surf->server_stamp); } return TRUE; }
static boolean dri2_surface_flush_frontbuffer(struct native_surface *nsurf) { struct dri2_surface *dri2surf = dri2_surface(nsurf); struct dri2_display *dri2dpy = dri2surf->dri2dpy; /* copy to real front buffer */ if (dri2surf->have_fake) x11_drawable_copy_buffers(dri2dpy->xscr, dri2surf->drawable, 0, 0, dri2surf->width, dri2surf->height, DRI2BufferFakeFrontLeft, DRI2BufferFrontLeft); /* force buffers to be updated in next validation call */ if (!dri2_surface_receive_events(&dri2surf->base)) { dri2surf->server_stamp++; dri2dpy->event_handler->invalid_surface(&dri2dpy->base, &dri2surf->base, dri2surf->server_stamp); } return TRUE; }
static boolean dri2_surface_swap_buffers(struct native_surface *nsurf, int num_rects, const int *rects) { struct dri2_surface *dri2surf = dri2_surface(nsurf); struct dri2_display *dri2dpy = dri2surf->dri2dpy; /* copy to front buffer */ if (dri2surf->have_back) { if (num_rects > 0) x11_drawable_copy_buffers_region(dri2dpy->xscr, dri2surf->drawable, num_rects, rects, DRI2BufferBackLeft, DRI2BufferFrontLeft); else x11_drawable_copy_buffers(dri2dpy->xscr, dri2surf->drawable, 0, 0, dri2surf->width, dri2surf->height, DRI2BufferBackLeft, DRI2BufferFrontLeft); } /* and update fake front buffer */ if (dri2surf->have_fake) { if (num_rects > 0) x11_drawable_copy_buffers_region(dri2dpy->xscr, dri2surf->drawable, num_rects, rects, DRI2BufferFrontLeft, DRI2BufferFakeFrontLeft); else x11_drawable_copy_buffers(dri2dpy->xscr, dri2surf->drawable, 0, 0, dri2surf->width, dri2surf->height, DRI2BufferFrontLeft, DRI2BufferFakeFrontLeft); } /* force buffers to be updated in next validation call */ if (!dri2_surface_receive_events(&dri2surf->base)) { dri2surf->server_stamp++; dri2dpy->event_handler->invalid_surface(&dri2dpy->base, &dri2surf->base, dri2surf->server_stamp); } return TRUE; }