Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
0
static void
dri2_surface_wait(struct native_surface *nsurf)
{
   struct dri2_surface *dri2surf = dri2_surface(nsurf);
   struct dri2_display *dri2dpy = dri2surf->dri2dpy;

   if (dri2surf->have_fake) {
      x11_drawable_copy_buffers(dri2dpy->xscr, dri2surf->drawable,
            0, 0, dri2surf->width, dri2surf->height,
            DRI2BufferFrontLeft, DRI2BufferFakeFrontLeft);
   }
}
Пример #4
0
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;
}
Пример #5
0
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;
}