glthread: sync in glFlush for multiple contexts
authorMarek Olšák <marek.olsak@amd.com>
Mon, 8 Jun 2020 12:46:10 +0000 (08:46 -0400)
committerMarge Bot <eric+marge@anholt.net>
Tue, 9 Jun 2020 05:07:01 +0000 (05:07 +0000)
See the code comment.

Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5382>

src/mapi/glapi/gen/gl_API.xml

index b3511665280d4cc80d42c12a271454722143b5f6..0e164b495d934b14aeab74b1693ce90c622f5c24 100644 (file)
         <glx sop="108" handcode="true"/>
     </function>
 
+    <!-- Shared contexts have to wait for glthread to finish execution after glFlush,
+         so that other contexts can see the effect of previous GL calls when glFlush returns.
+         This is harmless if the contexts run on different threads, because we only stall
+         1 thread that's asynchronous anyway. It's worse when the contexts run on the same
+         thread, but that's not a good use of multiple contexts.
+    -->
     <function name="Flush" es1="1.0" es2="2.0"
-              marshal_call_after="_mesa_glthread_flush_batch(ctx);">
+              marshal_call_after="_mesa_glthread_flush_batch(ctx); if (ctx->Shared->RefCount > 1) _mesa_glthread_finish(ctx);">
         <glx sop="142" handcode="true"/>
     </function>