static void dri2SwapBuffer(VADriverContextP ctx, struct dri_drawable *dri_drawable) { struct dri2_drawable *dri2_drawable = (struct dri2_drawable *)dri_drawable; XRectangle xrect; XserverRegion region; if (dri2_drawable->has_backbuffer) { if (gsDRI2SwapAvailable) { CARD64 ret; VA_DRI2SwapBuffers(ctx->native_dpy, dri_drawable->x_drawable, 0, 0, 0, &ret); } else { xrect.x = 0; xrect.y = 0; xrect.width = dri2_drawable->width; xrect.height = dri2_drawable->height; region = XFixesCreateRegion(ctx->native_dpy, &xrect, 1); VA_DRI2CopyRegion(ctx->native_dpy, dri_drawable->x_drawable, region, DRI2BufferFrontLeft, DRI2BufferBackLeft); XFixesDestroyRegion(ctx->native_dpy, region); } } }
LOCAL void dri_state_swap_buffer(dri_state_t *state, dri_drawable_t *dri_drwble) { dri2_drawable_t *dri2_drwble = (dri2_drawable_t*)dri_drwble; XRectangle xrect; XserverRegion region; if (dri2_drwble->has_backbuffer) { xrect.x = 0; xrect.y = 0; xrect.width = dri2_drwble->width; xrect.height = dri2_drwble->height; region = XFixesCreateRegion(state->x11_dpy, &xrect, 1); VA_DRI2CopyRegion(state->x11_dpy, dri_drwble->x_drawable, region, DRI2BufferFrontLeft, DRI2BufferBackLeft); XFixesDestroyRegion(state->x11_dpy, region); } }