Michel, Eric, others

Do you know what's stopping dri3 from flipping to the fake front instead of copying? Like below?

The fake front will of course be "busy" until the server completes the present, but that doesn't really stop us from front rendering to it or reading from it if so desired?

/Thomas


diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c
index 493a7f5..1ea8d3c 100644
--- a/src/loader/loader_dri3_helper.c
+++ b/src/loader/loader_dri3_helper.c
@@ -650,14 +650,14 @@ loader_dri3_swap_buffers_msc(struct loader_dri3_drawable *draw,
                                   back->height,
                                   0, 0, back->width,
                                   back->height, __BLIT_FLAG_FLUSH);
-      /* Update the fake front */
-      if (draw->have_fake_front)
- draw->ext->image->blitImage(dri_context,
- draw->buffers[LOADER_DRI3_FRONT_ID]->image,
-                                     back->image,
-                                     0, 0, draw->width, draw->height,
-                                     0, 0, draw->width, draw->height,
-                                     __BLIT_FLAG_FLUSH);
+   }
+
+   if (draw->have_fake_front) {
+      struct loader_dri3_buffer *tmp;
+
+      tmp = draw->buffers[LOADER_DRI3_FRONT_ID];
+      draw->buffers[LOADER_DRI3_FRONT_ID] = back;
+ draw->buffers[LOADER_DRI3_BACK_ID(draw->cur_back)] = tmp;
    }

    dri3_flush_present_events(draw);
@@ -725,16 +725,6 @@ loader_dri3_swap_buffers_msc(struct loader_dri3_drawable *draw,
        * to reset the fence and make future users block until
        * the X server is done copying the bits
        */
-      if (draw->have_fake_front && !draw->is_different_gpu) {
-         dri3_fence_reset(draw->conn, draw->buffers[LOADER_DRI3_FRONT_ID]);
-         dri3_copy_area(draw->conn,
-                        back->pixmap,
- draw->buffers[LOADER_DRI3_FRONT_ID]->pixmap,
-                        dri3_drawable_gc(draw),
-                        0, 0, 0, 0,
-                        draw->width, draw->height);
- dri3_fence_trigger(draw->conn, draw->buffers[LOADER_DRI3_FRONT_ID]);
-      }
       xcb_flush(draw->conn);
       if (draw->stamp)
          ++(*draw->stamp);

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to