Re: [Mesa-dev] [PATCH 1/2] loader/dri3: Process event after each fence wait

2017-09-06 Thread Michel Dänzer
On 05/09/17 05:15 PM, Thomas Hellstrom wrote:
> This tries to mimic dri2 behaviour where events are typically processed
> while waiting for X replies. Since, during steady-state dri3 rendering, we
> seldom wait for xcb replies, and haven't enabled any automatic event
> processing, instead check for events after a fence wait.
> 
> Signed-off-by: Thomas Hellstrom 

Both patches are

Reviewed-by: Michel Dänzer 


-- 
Earthling Michel Dänzer   |   http://www.amd.com
Libre software enthusiast | Mesa and X developer
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 1/2] loader/dri3: Process event after each fence wait

2017-09-05 Thread Thomas Hellstrom
This tries to mimic dri2 behaviour where events are typically processed
while waiting for X replies. Since, during steady-state dri3 rendering, we
seldom wait for xcb replies, and haven't enabled any automatic event
processing, instead check for events after a fence wait.

Signed-off-by: Thomas Hellstrom 
---
 src/loader/loader_dri3_helper.c | 17 ++---
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c
index c0a6e0d..51e4e97 100644
--- a/src/loader/loader_dri3_helper.c
+++ b/src/loader/loader_dri3_helper.c
@@ -181,10 +181,13 @@ dri3_fence_trigger(xcb_connection_t *c, struct 
loader_dri3_buffer *buffer)
 }
 
 static inline void
-dri3_fence_await(xcb_connection_t *c, struct loader_dri3_buffer *buffer)
+dri3_fence_await(xcb_connection_t *c, struct loader_dri3_drawable *draw,
+ struct loader_dri3_buffer *buffer)
 {
xcb_flush(c);
xshmfence_await(buffer->shm_fence);
+   if (draw)
+  dri3_flush_present_events(draw);
 }
 
 static void
@@ -662,9 +665,9 @@ loader_dri3_copy_sub_buffer(struct loader_dri3_drawable 
*draw,
  dri3_drawable_gc(draw),
  x, y, x, y, width, height);
   dri3_fence_trigger(draw->conn, dri3_fake_front_buffer(draw));
-  dri3_fence_await(draw->conn, dri3_fake_front_buffer(draw));
+  dri3_fence_await(draw->conn, NULL, dri3_fake_front_buffer(draw));
}
-   dri3_fence_await(draw->conn, back);
+   dri3_fence_await(draw->conn, draw, back);
 }
 
 void
@@ -680,7 +683,7 @@ loader_dri3_copy_drawable(struct loader_dri3_drawable *draw,
   dri3_drawable_gc(draw),
   0, 0, 0, 0, draw->width, draw->height);
dri3_fence_trigger(draw->conn, dri3_fake_front_buffer(draw));
-   dri3_fence_await(draw->conn, dri3_fake_front_buffer(draw));
+   dri3_fence_await(draw->conn, draw, dri3_fake_front_buffer(draw));
 }
 
 void
@@ -1374,7 +1377,7 @@ dri3_get_buffer(__DRIdrawable *driDrawable,
  if (buffer) {
 if (!buffer->linear_buffer) {
dri3_fence_reset(draw->conn, new_buffer);
-   dri3_fence_await(draw->conn, buffer);
+   dri3_fence_await(draw->conn, draw, buffer);
dri3_copy_area(draw->conn,
   buffer->pixmap,
   new_buffer->pixmap,
@@ -1405,7 +1408,7 @@ dri3_get_buffer(__DRIdrawable *driDrawable,
 
  if (new_buffer->linear_buffer &&
  draw->vtable->in_current_context(draw)) {
-dri3_fence_await(draw->conn, new_buffer);
+dri3_fence_await(draw->conn, draw, new_buffer);
 (void) loader_dri3_blit_image(draw,
   new_buffer->image,
   new_buffer->linear_buffer,
@@ -1417,7 +1420,7 @@ dri3_get_buffer(__DRIdrawable *driDrawable,
   buffer = new_buffer;
   draw->buffers[buf_id] = buffer;
}
-   dri3_fence_await(draw->conn, buffer);
+   dri3_fence_await(draw->conn, draw, buffer);
 
/*
 * Do we need to preserve the content of a previous buffer?
-- 
2.7.4

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