diff options
authorThomas Hellstrom <>2017-06-01 12:04:05 +0200
committerThomas Hellstrom <>2017-06-07 11:23:56 +0200
commit1253d58983b2b6ba4ed16444a344327e8117f333 (patch)
parent09c3a00f10861269f2187b5033f754b770a09b16 (diff)
dri3/GLX: Fix drawable invalidation v2
A number of internal VMware apitrace traces image comparisons fail with dri3 because the viewport transformation becomes incorrect after an X drawable resize. The incorrect viewport transformation sometimes persist until the second draw-call after a swapBuffer. Comparing with the dri2 glx code there are a couple of places where dri2 invalidates the drawable in the absence of server-triggered invalidation, where dri3 doesn't do that. When these invalidation points are added to dri3, the image comparisons become correct. v2: Addressed review comment by Michel Dänzer. Cc: <> Signed-off-by: Thomas Hellstrom <> Reviewed-and-tested-by: Michel Dänzer <>
1 files changed, 6 insertions, 0 deletions
diff --git a/src/glx/dri3_glx.c b/src/glx/dri3_glx.c
index d07968e3c5e..63474d0dca2 100644
--- a/src/glx/dri3_glx.c
+++ b/src/glx/dri3_glx.c
@@ -235,6 +235,11 @@ dri3_bind_context(struct glx_context *context, struct glx_context *old,
if (!(*psc->core->bindContext) (pcp->driContext, dri_draw, dri_read))
return GLXBadContext;
+ if (dri_draw)
+ (*psc->f->invalidate)(dri_draw);
+ if (dri_read && dri_read != dri_draw)
+ (*psc->f->invalidate)(dri_read);
return Success;
@@ -493,6 +498,7 @@ dri3_flush_front_buffer(__DRIdrawable *driDrawable, void *loaderPrivate)
loader_dri3_flush(draw, __DRI2_FLUSH_DRAWABLE, __DRI2_THROTTLE_FLUSHFRONT);
+ (*psc->f->invalidate)(driDrawable);