Re: [Mesa-dev] [PATCH] gallium: ddebug: Add missing fence related wrappers
Hi, On Wed, Apr 03, 2019 at 12:43:05PM +0200, Lucas Stach wrote: > Hi Guido, > > Am Montag, den 01.04.2019, 14:19 +0200 schrieb Guido Günther: > > Without that `GALLIUM_DDEBUG=always kmscube -A` would segfault like > > > > #0 0x in () > > #1 0xa72a3c54 in dri2_get_fence_fd (_screen=0xed4f2090, > > _fence=0xed9ef880) at > > ../src/gallium/state_trackers/dri/dri_helpers.c:140 > > #2 0xa8744824 in dri2_dup_native_fence_fd (drv=0xed5010c0, > > disp=0xed5029a0, sync=0xed9ef7c0) at > > ../src/egl/drivers/dri2/egl_dri2.c:3050 > > #3 0xa87339b8 in eglDupNativeFenceFDANDROID (dpy=0xed5029a0, > > sync=0xed9ef7c0) at ../src/egl/main/eglapi.c:2107 > > #4 0xbd29ca90 in () > > #5 0xbd401000 in () > > > > > Signed-off-by: Guido Günther > > --- > > This is similar in spirit to the patches for GALLIUM_TRACE send out earlier. > > > > > > .../auxiliary/driver_ddebug/dd_context.c | 40 +++ > > .../auxiliary/driver_ddebug/dd_screen.c | 10 + > > 2 files changed, 50 insertions(+) > > > > diff --git a/src/gallium/auxiliary/driver_ddebug/dd_context.c > > b/src/gallium/auxiliary/driver_ddebug/dd_context.c > > index 4ea0b16de6f..3152c664630 100644 > > --- a/src/gallium/auxiliary/driver_ddebug/dd_context.c > > +++ b/src/gallium/auxiliary/driver_ddebug/dd_context.c > > @@ -575,6 +575,43 @@ dd_context_set_stream_output_targets(struct > > pipe_context *_pipe, > > pipe->set_stream_output_targets(pipe, num_targets, tgs, offsets); > > } > > > > + > > +static void > > +dd_context_flush(struct pipe_context *_pipe, > > + struct pipe_fence_handle **fence, > > + unsigned flags) > > +{ > > + struct dd_context *dctx = dd_context(_pipe); > > + struct pipe_context *pipe = dctx->pipe; > > + > > + pipe->flush(pipe, fence, flags); > > +} > > dd_context_flush() is already implemented in dd_draw.c You're right - only looked in dd_context. I've removed that part in v2. Cheers, -- Guido > > Regards, > Lucas > > > + > > + > > +static void > > +dd_context_fence_server_sync(struct pipe_context *_pipe, > > + struct pipe_fence_handle *fence) > > +{ > > + struct dd_context *dctx = dd_context(_pipe); > > + struct pipe_context *pipe = dctx->pipe; > > + > > + pipe->fence_server_sync(pipe, fence); > > +} > > + > > + > > +static void > > +dd_context_create_fence_fd(struct pipe_context *_pipe, > > + struct pipe_fence_handle **fence, > > + int fd, > > + enum pipe_fd_type type) > > +{ > > + struct dd_context *dctx = dd_context(_pipe); > > + struct pipe_context *pipe = dctx->pipe; > > + > > + pipe->create_fence_fd(pipe, fence, fd, type); > > +} > > + > > + > > void > > dd_thread_join(struct dd_context *dctx) > > { > > @@ -867,6 +904,9 @@ dd_context_create(struct dd_screen *dscreen, struct > > pipe_context *pipe) > > CTX_INIT(create_stream_output_target); > > CTX_INIT(stream_output_target_destroy); > > CTX_INIT(set_stream_output_targets); > > + CTX_INIT(flush); > > + CTX_INIT(create_fence_fd); > > + CTX_INIT(fence_server_sync); > > CTX_INIT(create_sampler_view); > > CTX_INIT(sampler_view_destroy); > > CTX_INIT(create_surface); > > diff --git a/src/gallium/auxiliary/driver_ddebug/dd_screen.c > > b/src/gallium/auxiliary/driver_ddebug/dd_screen.c > > index a89af8a8d62..b2108adfa32 100644 > > --- a/src/gallium/auxiliary/driver_ddebug/dd_screen.c > > +++ b/src/gallium/auxiliary/driver_ddebug/dd_screen.c > > @@ -348,6 +348,15 @@ dd_screen_fence_finish(struct pipe_screen *_screen, > > return screen->fence_finish(screen, ctx, fence, timeout); > > } > > > > +static int > > +dd_screen_fence_get_fd(struct pipe_screen *_screen, > > + struct pipe_fence_handle *fence) > > +{ > > + struct pipe_screen *screen = dd_screen(_screen)->screen; > > + > > + return screen->fence_get_fd(screen, fence); > > +} > > + > > / > > * memobj > > */ > > @@ -550,6 +559,7 @@ ddebug_screen_create(struct pipe_screen *screen) > > SCR_INIT(flush_frontbuffer); > > SCR_INIT(fence_reference); > > SCR_INIT(fence_finish); > > + SCR_INIT(fence_get_fd); > > SCR_INIT(memobj_create_from_handle); > > SCR_INIT(memobj_destroy); > > SCR_INIT(get_driver_query_info); > ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH] gallium: ddebug: Add missing fence related wrappers
Hi Guido, Am Montag, den 01.04.2019, 14:19 +0200 schrieb Guido Günther: > Without that `GALLIUM_DDEBUG=always kmscube -A` would segfault like > > #0 0x in () > #1 0xa72a3c54 in dri2_get_fence_fd (_screen=0xed4f2090, > _fence=0xed9ef880) at ../src/gallium/state_trackers/dri/dri_helpers.c:140 > #2 0xa8744824 in dri2_dup_native_fence_fd (drv=0xed5010c0, > disp=0xed5029a0, sync=0xed9ef7c0) at > ../src/egl/drivers/dri2/egl_dri2.c:3050 > #3 0xa87339b8 in eglDupNativeFenceFDANDROID (dpy=0xed5029a0, > sync=0xed9ef7c0) at ../src/egl/main/eglapi.c:2107 > #4 0xbd29ca90 in () > #5 0xbd401000 in () > > > Signed-off-by: Guido Günther > --- > This is similar in spirit to the patches for GALLIUM_TRACE send out earlier. > > > .../auxiliary/driver_ddebug/dd_context.c | 40 +++ > .../auxiliary/driver_ddebug/dd_screen.c | 10 + > 2 files changed, 50 insertions(+) > > diff --git a/src/gallium/auxiliary/driver_ddebug/dd_context.c > b/src/gallium/auxiliary/driver_ddebug/dd_context.c > index 4ea0b16de6f..3152c664630 100644 > --- a/src/gallium/auxiliary/driver_ddebug/dd_context.c > +++ b/src/gallium/auxiliary/driver_ddebug/dd_context.c > @@ -575,6 +575,43 @@ dd_context_set_stream_output_targets(struct pipe_context > *_pipe, > pipe->set_stream_output_targets(pipe, num_targets, tgs, offsets); > } > > + > +static void > +dd_context_flush(struct pipe_context *_pipe, > + struct pipe_fence_handle **fence, > + unsigned flags) > +{ > + struct dd_context *dctx = dd_context(_pipe); > + struct pipe_context *pipe = dctx->pipe; > + > + pipe->flush(pipe, fence, flags); > +} dd_context_flush() is already implemented in dd_draw.c Regards, Lucas > + > + > +static void > +dd_context_fence_server_sync(struct pipe_context *_pipe, > + struct pipe_fence_handle *fence) > +{ > + struct dd_context *dctx = dd_context(_pipe); > + struct pipe_context *pipe = dctx->pipe; > + > + pipe->fence_server_sync(pipe, fence); > +} > + > + > +static void > +dd_context_create_fence_fd(struct pipe_context *_pipe, > + struct pipe_fence_handle **fence, > + int fd, > + enum pipe_fd_type type) > +{ > + struct dd_context *dctx = dd_context(_pipe); > + struct pipe_context *pipe = dctx->pipe; > + > + pipe->create_fence_fd(pipe, fence, fd, type); > +} > + > + > void > dd_thread_join(struct dd_context *dctx) > { > @@ -867,6 +904,9 @@ dd_context_create(struct dd_screen *dscreen, struct > pipe_context *pipe) > CTX_INIT(create_stream_output_target); > CTX_INIT(stream_output_target_destroy); > CTX_INIT(set_stream_output_targets); > + CTX_INIT(flush); > + CTX_INIT(create_fence_fd); > + CTX_INIT(fence_server_sync); > CTX_INIT(create_sampler_view); > CTX_INIT(sampler_view_destroy); > CTX_INIT(create_surface); > diff --git a/src/gallium/auxiliary/driver_ddebug/dd_screen.c > b/src/gallium/auxiliary/driver_ddebug/dd_screen.c > index a89af8a8d62..b2108adfa32 100644 > --- a/src/gallium/auxiliary/driver_ddebug/dd_screen.c > +++ b/src/gallium/auxiliary/driver_ddebug/dd_screen.c > @@ -348,6 +348,15 @@ dd_screen_fence_finish(struct pipe_screen *_screen, > return screen->fence_finish(screen, ctx, fence, timeout); > } > > +static int > +dd_screen_fence_get_fd(struct pipe_screen *_screen, > + struct pipe_fence_handle *fence) > +{ > + struct pipe_screen *screen = dd_screen(_screen)->screen; > + > + return screen->fence_get_fd(screen, fence); > +} > + > / > * memobj > */ > @@ -550,6 +559,7 @@ ddebug_screen_create(struct pipe_screen *screen) > SCR_INIT(flush_frontbuffer); > SCR_INIT(fence_reference); > SCR_INIT(fence_finish); > + SCR_INIT(fence_get_fd); > SCR_INIT(memobj_create_from_handle); > SCR_INIT(memobj_destroy); > SCR_INIT(get_driver_query_info); ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH] gallium: ddebug: Add missing fence related wrappers
Without that `GALLIUM_DDEBUG=always kmscube -A` would segfault like #0 0x in () #1 0xa72a3c54 in dri2_get_fence_fd (_screen=0xed4f2090, _fence=0xed9ef880) at ../src/gallium/state_trackers/dri/dri_helpers.c:140 #2 0xa8744824 in dri2_dup_native_fence_fd (drv=0xed5010c0, disp=0xed5029a0, sync=0xed9ef7c0) at ../src/egl/drivers/dri2/egl_dri2.c:3050 #3 0xa87339b8 in eglDupNativeFenceFDANDROID (dpy=0xed5029a0, sync=0xed9ef7c0) at ../src/egl/main/eglapi.c:2107 #4 0xbd29ca90 in () #5 0xbd401000 in () Signed-off-by: Guido Günther --- This is similar in spirit to the patches for GALLIUM_TRACE send out earlier. .../auxiliary/driver_ddebug/dd_context.c | 40 +++ .../auxiliary/driver_ddebug/dd_screen.c | 10 + 2 files changed, 50 insertions(+) diff --git a/src/gallium/auxiliary/driver_ddebug/dd_context.c b/src/gallium/auxiliary/driver_ddebug/dd_context.c index 4ea0b16de6f..3152c664630 100644 --- a/src/gallium/auxiliary/driver_ddebug/dd_context.c +++ b/src/gallium/auxiliary/driver_ddebug/dd_context.c @@ -575,6 +575,43 @@ dd_context_set_stream_output_targets(struct pipe_context *_pipe, pipe->set_stream_output_targets(pipe, num_targets, tgs, offsets); } + +static void +dd_context_flush(struct pipe_context *_pipe, + struct pipe_fence_handle **fence, + unsigned flags) +{ + struct dd_context *dctx = dd_context(_pipe); + struct pipe_context *pipe = dctx->pipe; + + pipe->flush(pipe, fence, flags); +} + + +static void +dd_context_fence_server_sync(struct pipe_context *_pipe, + struct pipe_fence_handle *fence) +{ + struct dd_context *dctx = dd_context(_pipe); + struct pipe_context *pipe = dctx->pipe; + + pipe->fence_server_sync(pipe, fence); +} + + +static void +dd_context_create_fence_fd(struct pipe_context *_pipe, + struct pipe_fence_handle **fence, + int fd, + enum pipe_fd_type type) +{ + struct dd_context *dctx = dd_context(_pipe); + struct pipe_context *pipe = dctx->pipe; + + pipe->create_fence_fd(pipe, fence, fd, type); +} + + void dd_thread_join(struct dd_context *dctx) { @@ -867,6 +904,9 @@ dd_context_create(struct dd_screen *dscreen, struct pipe_context *pipe) CTX_INIT(create_stream_output_target); CTX_INIT(stream_output_target_destroy); CTX_INIT(set_stream_output_targets); + CTX_INIT(flush); + CTX_INIT(create_fence_fd); + CTX_INIT(fence_server_sync); CTX_INIT(create_sampler_view); CTX_INIT(sampler_view_destroy); CTX_INIT(create_surface); diff --git a/src/gallium/auxiliary/driver_ddebug/dd_screen.c b/src/gallium/auxiliary/driver_ddebug/dd_screen.c index a89af8a8d62..b2108adfa32 100644 --- a/src/gallium/auxiliary/driver_ddebug/dd_screen.c +++ b/src/gallium/auxiliary/driver_ddebug/dd_screen.c @@ -348,6 +348,15 @@ dd_screen_fence_finish(struct pipe_screen *_screen, return screen->fence_finish(screen, ctx, fence, timeout); } +static int +dd_screen_fence_get_fd(struct pipe_screen *_screen, + struct pipe_fence_handle *fence) +{ + struct pipe_screen *screen = dd_screen(_screen)->screen; + + return screen->fence_get_fd(screen, fence); +} + / * memobj */ @@ -550,6 +559,7 @@ ddebug_screen_create(struct pipe_screen *screen) SCR_INIT(flush_frontbuffer); SCR_INIT(fence_reference); SCR_INIT(fence_finish); + SCR_INIT(fence_get_fd); SCR_INIT(memobj_create_from_handle); SCR_INIT(memobj_destroy); SCR_INIT(get_driver_query_info); -- 2.20.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev