[Mesa-dev] dri3 flipping to fake front?
Thomas Hellstrom
thellstrom at vmware.com
Tue Jun 20 13:31:10 UTC 2017
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);
More information about the mesa-dev
mailing list