<div dir="ltr"><div>Reviewed-by: Marek Olšák <<a href="mailto:marek.olsak@amd.com">marek.olsak@amd.com</a>></div><div><br></div><div>Marek<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Apr 3, 2019 at 7:08 AM Guido Günther <<a href="mailto:agx@sigxcpu.org">agx@sigxcpu.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Without that `GALLIUM_DDEBUG=always kmscube -A` would segfault like<br>
<br>
  #0  0x0000000000000000 in  ()<br>
  #1  0x0000ffffa72a3c54 in dri2_get_fence_fd (_screen=0xaaaaed4f2090, _fence=0xaaaaed9ef880) at ../src/gallium/state_trackers/dri/dri_helpers.c:140<br>
  #2  0x0000ffffa8744824 in dri2_dup_native_fence_fd (drv=0xaaaaed5010c0, disp=0xaaaaed5029a0, sync=0xaaaaed9ef7c0) at ../src/egl/drivers/dri2/egl_dri2.c:3050<br>
  #3  0x0000ffffa87339b8 in eglDupNativeFenceFDANDROID (dpy=0xaaaaed5029a0, sync=0xaaaaed9ef7c0) at ../src/egl/main/eglapi.c:2107<br>
  #4  0x0000aaaabd29ca90 in  ()<br>
  #5  0x0000aaaabd401000 in  ()<br>
<br>
Signed-off-by: Guido Günther <<a href="mailto:agx@sigxcpu.org" target="_blank">agx@sigxcpu.org</a>><br>
<br>
---<br>
Changes from v1:<br>
- Drop duplicate dd_context_flush() as noticed by Lucas Stach<br>
---<br>
 .../auxiliary/driver_ddebug/dd_context.c      | 27 +++++++++++++++++++<br>
 .../auxiliary/driver_ddebug/dd_screen.c       | 10 +++++++<br>
 2 files changed, 37 insertions(+)<br>
<br>
diff --git a/src/gallium/auxiliary/driver_ddebug/dd_context.c b/src/gallium/auxiliary/driver_ddebug/dd_context.c<br>
index 4ea0b16de6f..ab3043a8b87 100644<br>
--- a/src/gallium/auxiliary/driver_ddebug/dd_context.c<br>
+++ b/src/gallium/auxiliary/driver_ddebug/dd_context.c<br>
@@ -575,6 +575,31 @@ dd_context_set_stream_output_targets(struct pipe_context *_pipe,<br>
    pipe->set_stream_output_targets(pipe, num_targets, tgs, offsets);<br>
 }<br>
<br>
+<br>
+static void<br>
+dd_context_fence_server_sync(struct pipe_context *_pipe,<br>
+                             struct pipe_fence_handle *fence)<br>
+{<br>
+   struct dd_context *dctx = dd_context(_pipe);<br>
+   struct pipe_context *pipe = dctx->pipe;<br>
+<br>
+   pipe->fence_server_sync(pipe, fence);<br>
+}<br>
+<br>
+<br>
+static void<br>
+dd_context_create_fence_fd(struct pipe_context *_pipe,<br>
+                           struct pipe_fence_handle **fence,<br>
+                           int fd,<br>
+                           enum pipe_fd_type type)<br>
+{<br>
+   struct dd_context *dctx = dd_context(_pipe);<br>
+   struct pipe_context *pipe = dctx->pipe;<br>
+<br>
+   pipe->create_fence_fd(pipe, fence, fd, type);<br>
+}<br>
+<br>
+<br>
 void<br>
 dd_thread_join(struct dd_context *dctx)<br>
 {<br>
@@ -867,6 +892,8 @@ dd_context_create(struct dd_screen *dscreen, struct pipe_context *pipe)<br>
    CTX_INIT(create_stream_output_target);<br>
    CTX_INIT(stream_output_target_destroy);<br>
    CTX_INIT(set_stream_output_targets);<br>
+   CTX_INIT(create_fence_fd);<br>
+   CTX_INIT(fence_server_sync);<br>
    CTX_INIT(create_sampler_view);<br>
    CTX_INIT(sampler_view_destroy);<br>
    CTX_INIT(create_surface);<br>
diff --git a/src/gallium/auxiliary/driver_ddebug/dd_screen.c b/src/gallium/auxiliary/driver_ddebug/dd_screen.c<br>
index a89af8a8d62..b2108adfa32 100644<br>
--- a/src/gallium/auxiliary/driver_ddebug/dd_screen.c<br>
+++ b/src/gallium/auxiliary/driver_ddebug/dd_screen.c<br>
@@ -348,6 +348,15 @@ dd_screen_fence_finish(struct pipe_screen *_screen,<br>
    return screen->fence_finish(screen, ctx, fence, timeout);<br>
 }<br>
<br>
+static int<br>
+dd_screen_fence_get_fd(struct pipe_screen *_screen,<br>
+                       struct pipe_fence_handle *fence)<br>
+{<br>
+   struct pipe_screen *screen = dd_screen(_screen)->screen;<br>
+<br>
+   return screen->fence_get_fd(screen, fence);<br>
+}<br>
+<br>
 /********************************************************************<br>
  * memobj<br>
  */<br>
@@ -550,6 +559,7 @@ ddebug_screen_create(struct pipe_screen *screen)<br>
    SCR_INIT(flush_frontbuffer);<br>
    SCR_INIT(fence_reference);<br>
    SCR_INIT(fence_finish);<br>
+   SCR_INIT(fence_get_fd);<br>
    SCR_INIT(memobj_create_from_handle);<br>
    SCR_INIT(memobj_destroy);<br>
    SCR_INIT(get_driver_query_info);<br>
-- <br>
2.20.1<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org" target="_blank">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a></blockquote></div>