<html>
<head>
<base href="https://bugs.freedesktop.org/">
</head>
<body>
<p>
<div>
<b><a class="bz_bug_link
bz_status_NEW "
title="NEW - Redraw lag on Ivy Bridge since 1f6dfc9df678"
href="https://bugs.freedesktop.org/show_bug.cgi?id=97914#c19">Comment # 19</a>
on <a class="bz_bug_link
bz_status_NEW "
title="NEW - Redraw lag on Ivy Bridge since 1f6dfc9df678"
href="https://bugs.freedesktop.org/show_bug.cgi?id=97914">bug 97914</a>
from <span class="vcard"><a class="email" href="mailto:chris@chris-wilson.co.uk" title="Chris Wilson <chris@chris-wilson.co.uk>"> <span class="fn">Chris Wilson</span></a>
</span></b>
<pre>So to make DRI3 do the equivalent serialisation to DRI2 takes something like:
diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c
index d192edf..f370c87 100644
--- a/src/loader/loader_dri3_helper.c
+++ b/src/loader/loader_dri3_helper.c
@@ -1430,6 +1430,15 @@ loader_dri3_get_buffers(__DRIdrawable *driDrawable,
if (!front)
return false;
+
+ if (draw->is_pixmap && draw->sync_fence) {
+ xshmfence_reset(draw->shm_fence);
+
+ xcb_sync_trigger_fence(draw->conn, draw->sync_fence);
+ xcb_flush(draw->conn);
+
+ xshmfence_await(draw->shm_fence);
+ }
} else {
dri3_free_buffers(driDrawable, loader_dri3_buffer_front, draw);
draw->have_fake_front = 0;
diff --git a/src/mesa/drivers/dri/i965/intel_tex_image.c
b/src/mesa/drivers/dri/i965/intel_tex_image.c
index 8bcdba3..7d0c69e 100644
--- a/src/mesa/drivers/dri/i965/intel_tex_image.c
+++ b/src/mesa/drivers/dri/i965/intel_tex_image.c
@@ -280,6 +280,7 @@ intelSetTexBuffer2(__DRIcontext *pDRICtx, GLint target,
{
struct gl_framebuffer *fb = dPriv->driverPrivate;
struct brw_context *brw = pDRICtx->driverPrivate;
+ __DRIscreen *dri_screen = pDRICtx->driScreenPriv;
struct gl_context *ctx = &brw->ctx;
struct intel_renderbuffer *rb;
struct gl_texture_object *texObj;
@@ -294,7 +295,8 @@ intelSetTexBuffer2(__DRIcontext *pDRICtx, GLint target,
return;
intel_update_renderbuffers(pDRICtx, dPriv,
- !pDRICtx->driScreenPriv->dri2.useInvalidate);
+ !dri_screen->dri2.useInvalidate ||
+ dri_screen->loaderPrivate);
rb = intel_get_renderbuffer(fb, BUFFER_FRONT_LEFT);
/* If the miptree isn't set, then intel_update_renderbuffers was unable
(on top of the earlier patch)</pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are the QA Contact for the bug.</li>
</ul>
</body>
</html>