st/egl: flush resources before presentation
authorGrigori Goronzy <greg@chown.ath.cx>
Tue, 1 Oct 2013 18:02:10 +0000 (20:02 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Tue, 1 Oct 2013 19:42:02 +0000 (21:42 +0200)
Fixes regression on r600g due to fast clear introduced by commit
edbbfac6.

Signed-off-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/state_trackers/egl/x11/native_dri2.c

index 3aa7c17dbc51f0b974ec871bd1c11c8700bd2e67..3c58979e29549213bf5157c79c2db40ded274168 100644 (file)
@@ -290,6 +290,12 @@ 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)
@@ -313,9 +319,14 @@ dri2_surface_swap_buffers(struct native_surface *nsurf, int num_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,