loader/dri3: Don't wait for fence of old buffer when re-allocating it
[mesa.git] / src / loader / loader_dri3_helper.c
index 91bad86afd8479865aa20e9c20d0acfccb817294..f641a34e6d1e036de73dbaaa2c3aeec49a742851 100644 (file)
@@ -1427,8 +1427,7 @@ no_shm_fence:
  * track the geometry of the drawable
  */
 static int
-dri3_update_drawable(__DRIdrawable *driDrawable,
-                     struct loader_dri3_drawable *draw)
+dri3_update_drawable(struct loader_dri3_drawable *draw)
 {
    mtx_lock(&draw->mtx);
    if (draw->first_init) {
@@ -1778,7 +1777,6 @@ dri3_get_buffer(__DRIdrawable *driDrawable,
           && buffer) {
 
          /* Fill the new buffer with data from an old buffer */
-         dri3_fence_await(draw->conn, draw, buffer);
          if (!loader_dri3_blit_image(draw,
                                      new_buffer->image,
                                      buffer->image,
@@ -1819,7 +1817,9 @@ dri3_get_buffer(__DRIdrawable *driDrawable,
       buffer = new_buffer;
       draw->buffers[buf_id] = buffer;
    }
-   dri3_fence_await(draw->conn, draw, buffer);
+
+   if (buffer_type == loader_dri3_buffer_back)
+      dri3_fence_await(draw->conn, draw, buffer);
 
    /*
     * Do we need to preserve the content of a previous buffer?
@@ -1911,7 +1911,7 @@ loader_dri3_get_buffers(__DRIdrawable *driDrawable,
    front = NULL;
    back = NULL;
 
-   if (!dri3_update_drawable(driDrawable, draw))
+   if (!dri3_update_drawable(draw))
       return false;
 
    dri3_update_num_back(draw);
@@ -2066,7 +2066,7 @@ dri3_find_back_alloc(struct loader_dri3_drawable *draw)
    back = draw->buffers[id];
    /* Allocate a new back if we haven't got one */
    if (!back && draw->back_format != __DRI_IMAGE_FORMAT_NONE &&
-       dri3_update_drawable(draw->dri_drawable, draw))
+       dri3_update_drawable(draw))
       back = dri3_alloc_render_buffer(draw, draw->back_format,
                                       draw->width, draw->height, draw->depth);