Mesa (master): gallium: wire up server_wait_sync

Rob Clark robclark at kemper.freedesktop.org
Fri Dec 2 01:25:26 UTC 2016


Module: Mesa
Branch: master
Commit: 72cc1ca58d12495cc5a72fb9b9c316db94eb66cd
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=72cc1ca58d12495cc5a72fb9b9c316db94eb66cd

Author: Rob Clark <robclark at freedesktop.org>
Date:   Fri Apr  1 15:47:44 2016 -0400

gallium: wire up server_wait_sync

This will be needed for explicit synchronization with devices outside
the gpu, ie. EGL_ANDROID_native_fence_sync.

Signed-off-by: Rob Clark <robclark at freedesktop.org>
Reviewed-by: Marek Olšák <marek.olsak at amd.com>

---

 src/gallium/include/pipe/p_context.h  | 6 ++++++
 src/gallium/state_trackers/dri/dri2.c | 6 +++++-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/gallium/include/pipe/p_context.h b/src/gallium/include/pipe/p_context.h
index b97aad5..ee8a511 100644
--- a/src/gallium/include/pipe/p_context.h
+++ b/src/gallium/include/pipe/p_context.h
@@ -475,6 +475,12 @@ struct pipe_context {
                  unsigned flags);
 
    /**
+    * Insert commands to have GPU wait for fence to be signaled.
+    */
+   void (*fence_server_sync)(struct pipe_context *pipe,
+                             struct pipe_fence_handle *fence);
+
+   /**
     * Create a view on a texture to be used by a shader stage.
     */
    struct pipe_sampler_view * (*create_sampler_view)(struct pipe_context *ctx,
diff --git a/src/gallium/state_trackers/dri/dri2.c b/src/gallium/state_trackers/dri/dri2.c
index 9ec069b..1a44bcb 100644
--- a/src/gallium/state_trackers/dri/dri2.c
+++ b/src/gallium/state_trackers/dri/dri2.c
@@ -1548,7 +1548,11 @@ dri2_client_wait_sync(__DRIcontext *_ctx, void *_fence, unsigned flags,
 static void
 dri2_server_wait_sync(__DRIcontext *_ctx, void *_fence, unsigned flags)
 {
-   /* AFAIK, no driver currently supports parallel context execution. */
+   struct pipe_context *ctx = dri_context(_ctx)->st->pipe;
+   struct dri2_fence *fence = (struct dri2_fence*)_fence;
+
+   if (ctx->fence_server_sync)
+      ctx->fence_server_sync(ctx, fence->pipe_fence);
 }
 
 static __DRI2fenceExtension dri2FenceExtension = {




More information about the mesa-commit mailing list