<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">
<blockquote type="cite">Also note that in this pipeline, HW
decoding is done with nouveau driver and rendering is done with
intel. dmabuf in between.<br>
</blockquote>
Yeah, I already thought that somebody is using it like this. I'm
not sure if this is actually supposed to work because we don't
have proper synchronization between kernel drivers with DMA-buf
jet.<br>
<br>
<blockquote type="cite">Maybe the idea of the patch is good but
something is still wrong.</blockquote>
While it is not the proper solution I would say let's keep the
pipeline draining during exporting the handle for now if that's
really necessary for your use case. Please test the attached
patch.<br>
<br>
Coding the patch I've just noticed that there wasn't a
pipe->flush() before exporting the handle. Does it work as well
if you just flush the pipeline without waiting for the commands to
be finished?<br>
<br>
Regards,<br>
Christian.<br>
<br>
On 14.12.2015 10:14, Julien Isorce wrote:<br>
</div>
<blockquote
cite="mid:CAHWPjbWsQbqv4cLTHpOy9e8sG4+hHGyb2jcuo32pgruTjJ+z8g@mail.gmail.com"
type="cite">
<div dir="ltr">
<div>
<div>
<div>
<div>Hi Christian,<br>
<br>
</div>
I have tested this patch but then the displayed video is
garbage (mostly white and sometimes just garbage). It also
stall the nouveau driver which requires to reboot but I
guess this is another issue.<br>
I tested with:<br>
GST_GL_WINDOW=x11 GST_GL_PLATFORM=egl GST_GL_API=gles2
GST_DEBUG=2 LIBVA_DRIVER_NAME=gallium gst-launch-1.0
filesrc location=simpson.mp4 ! qtdemux ! vaapidecodebin !
glimagesink<br>
<br>
</div>
(to test that you need my gstreamer-vaapi and gstgl branches
on my github but I would not waste time to try them since
they should be merged upstream at some point)<br>
<br>
</div>
Also note that in this pipeline, HW decoding is done with
nouveau driver and rendering is done with intel. dmabuf in
between.<br>
<br>
</div>
Maybe the idea of the patch is good but something is still
wrong.<br>
<div>
<div>
<div>
<div>
<div>I can test any update if it helps.<br>
<br>
</div>
<div>Cheers<br>
</div>
<div>Julien<br>
</div>
<div><br>
<br>
<br>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On 11 December 2015 at 12:33, Christian
König <span dir="ltr"><<a moz-do-not-send="true"
href="mailto:deathsimple@vodafone.de" target="_blank">deathsimple@vodafone.de</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">From:
Christian König <<a moz-do-not-send="true"
href="mailto:christian.koenig@amd.com">christian.koenig@amd.com</a>><br>
<br>
It's nonsense to drain the pipeline like this.<br>
<br>
Signed-off-by: Christian König <<a moz-do-not-send="true"
href="mailto:christian.koenig@amd.com">christian.koenig@amd.com</a>><br>
---<br>
src/gallium/state_trackers/va/buffer.c | 5 -----<br>
src/gallium/state_trackers/va/image.c | 1 -<br>
src/gallium/state_trackers/va/postproc.c | 6 ------<br>
src/gallium/state_trackers/va/surface.c | 10 +---------<br>
src/gallium/state_trackers/va/va_private.h | 2 --<br>
5 files changed, 1 insertion(+), 23 deletions(-)<br>
<br>
diff --git a/src/gallium/state_trackers/va/buffer.c
b/src/gallium/state_trackers/va/buffer.c<br>
index 769305e..2ec187c 100644<br>
--- a/src/gallium/state_trackers/va/buffer.c<br>
+++ b/src/gallium/state_trackers/va/buffer.c<br>
@@ -257,11 +257,6 @@
vlVaAcquireBufferHandle(VADriverContextP ctx, VABufferID
buf_id,<br>
<br>
screen = VL_VA_PSCREEN(ctx);<br>
<br>
- if (buf->derived_surface.fence) {<br>
- screen->fence_finish(screen,
buf->derived_surface.fence, PIPE_TIMEOUT_INFINITE);<br>
- screen->fence_reference(screen,
&buf->derived_surface.fence, NULL);<br>
- }<br>
-<br>
if (buf->export_refcount > 0) {<br>
if (buf->export_state.mem_type != mem_type)<br>
return VA_STATUS_ERROR_INVALID_PARAMETER;<br>
diff --git a/src/gallium/state_trackers/va/image.c
b/src/gallium/state_trackers/va/image.c<br>
index ae07da8..58c9ff7 100644<br>
--- a/src/gallium/state_trackers/va/image.c<br>
+++ b/src/gallium/state_trackers/va/image.c<br>
@@ -266,7 +266,6 @@ vlVaDeriveImage(VADriverContextP ctx,
VASurfaceID surface, VAImage *image)<br>
img_buf->type = VAImageBufferType;<br>
img_buf->size = image->data_size;<br>
img_buf->num_elements = 1;<br>
- img_buf->derived_surface.fence = surf->fence;<br>
<br>
pipe_resource_reference(&img_buf->derived_surface.resource,
surfaces[0]->texture);<br>
<br>
diff --git a/src/gallium/state_trackers/va/postproc.c
b/src/gallium/state_trackers/va/postproc.c<br>
index 105f251..1ee3587 100644<br>
--- a/src/gallium/state_trackers/va/postproc.c<br>
+++ b/src/gallium/state_trackers/va/postproc.c<br>
@@ -54,7 +54,6 @@
vlVaHandleVAProcPipelineParameterBufferType(vlVaDriver *drv,
vlVaContext *contex<br>
vlVaSurface *src_surface;<br>
VAProcPipelineParameterBuffer *pipeline_param;<br>
struct pipe_surface **surfaces;<br>
- struct pipe_screen *screen;<br>
struct pipe_surface *psurf;<br>
<br>
if (!drv || !context)<br>
@@ -77,8 +76,6 @@
vlVaHandleVAProcPipelineParameterBufferType(vlVaDriver *drv,
vlVaContext *contex<br>
if (!surfaces || !surfaces[0])<br>
return VA_STATUS_ERROR_INVALID_SURFACE;<br>
<br>
- screen = drv->pipe->screen;<br>
-<br>
psurf = surfaces[0];<br>
<br>
src_region =
vlVaRegionDefault(pipeline_param->surface_region,
src_surface->buffer, &def_src_region);<br>
@@ -99,9 +96,6 @@
vlVaHandleVAProcPipelineParameterBufferType(vlVaDriver *drv,
vlVaContext *contex<br>
vl_compositor_set_layer_dst_area(&drv->cstate, 0,
&dst_rect);<br>
vl_compositor_render(&drv->cstate,
&drv->compositor, psurf, NULL, false);<br>
<br>
- screen->fence_reference(screen,
&src_surface->fence, NULL);<br>
- drv->pipe->flush(drv->pipe,
&src_surface->fence, 0);<br>
-<br>
return VA_STATUS_SUCCESS;<br>
}<br>
<br>
diff --git a/src/gallium/state_trackers/va/surface.c
b/src/gallium/state_trackers/va/surface.c<br>
index 4a18a6f..5ddaf04 100644<br>
--- a/src/gallium/state_trackers/va/surface.c<br>
+++ b/src/gallium/state_trackers/va/surface.c<br>
@@ -72,8 +72,6 @@ vlVaDestroySurfaces(VADriverContextP ctx,
VASurfaceID *surface_list, int num_sur<br>
vlVaSurface *surf = handle_table_get(drv->htab,
surface_list[i]);<br>
if (surf->buffer)<br>
surf->buffer->destroy(surf->buffer);<br>
- if(surf->fence)<br>
-
drv->pipe->screen->fence_reference(drv->pipe->screen,
&surf->fence, NULL);<br>
util_dynarray_fini(&surf->subpics);<br>
FREE(surf);<br>
handle_table_remove(drv->htab, surface_list[i]);<br>
@@ -245,11 +243,6 @@ vlVaPutSurface(VADriverContextP ctx,
VASurfaceID surface_id, void* draw, short s<br>
screen = drv->pipe->screen;<br>
vscreen = drv->vscreen;<br>
<br>
- if(surf->fence) {<br>
- screen->fence_finish(screen, surf->fence,
PIPE_TIMEOUT_INFINITE);<br>
- screen->fence_reference(screen,
&surf->fence, NULL);<br>
- }<br>
-<br>
tex = vscreen->texture_from_drawable(vscreen, draw);<br>
if (!tex)<br>
return VA_STATUS_ERROR_INVALID_DISPLAY;<br>
@@ -281,8 +274,7 @@ vlVaPutSurface(VADriverContextP ctx,
VASurfaceID surface_id, void* draw, short s<br>
screen->flush_frontbuffer(screen, tex, 0, 0,<br>
vscreen->get_private(vscreen), NULL);<br>
<br>
- screen->fence_reference(screen, &surf->fence,
NULL);<br>
- drv->pipe->flush(drv->pipe,
&surf->fence, 0);<br>
+ drv->pipe->flush(drv->pipe, NULL, 0);<br>
<br>
pipe_resource_reference(&tex, NULL);<br>
pipe_surface_reference(&surf_draw, NULL);<br>
diff --git a/src/gallium/state_trackers/va/va_private.h
b/src/gallium/state_trackers/va/va_private.h<br>
index 6739efc..fa6e0fb 100644<br>
--- a/src/gallium/state_trackers/va/va_private.h<br>
+++ b/src/gallium/state_trackers/va/va_private.h<br>
@@ -244,7 +244,6 @@ typedef struct {<br>
struct {<br>
struct pipe_resource *resource;<br>
struct pipe_transfer *transfer;<br>
- struct pipe_fence_handle *fence;<br>
} derived_surface;<br>
unsigned int export_refcount;<br>
VABufferInfo export_state;<br>
@@ -252,7 +251,6 @@ typedef struct {<br>
<br>
typedef struct {<br>
struct pipe_video_buffer templat, *buffer;<br>
- struct pipe_fence_handle *fence;<br>
struct util_dynarray subpics; /* vlVaSubpicture */<br>
} vlVaSurface;<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
2.5.0<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a moz-do-not-send="true"
href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a moz-do-not-send="true"
href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev"
rel="noreferrer" target="_blank">http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote>
</div>
<br>
</div>
</blockquote>
<br>
</body>
</html>