Bug 94334

Summary: vdpau_PutSurface does not return
Product: libva Reporter: Vasilis LIaskovitis <vliaskovitis>
Component: vdpauAssignee: Gwenole Beauchesne <gb.devel>
Status: NEW --- QA Contact:
Severity: normal    
Priority: medium    
Version: unspecified   
Hardware: Other   
OS: All   
Whiteboard:
i915 platform: i915 features:

Description Vasilis LIaskovitis 2016-02-29 14:31:04 UTC
Hi,

I have an application that renders by binding libva/vdpau surfaces onto GLX pixmaps.Playback works ok for a while, but than the application displays black frames after a few minutes of operation (always reproducible within 1-15 minutes usually).
 
When this happens, gdb backtrace shows that the current call to vdpau_PutSurface (done from the application) never returns. Are there any obvious reasons that would lead to vaPutSurface never returning (e.g. some deadlock in libva/vdpau?)

Using vdpau driver on radeon.
vainfo
libva info: VA-API version 0.38.1
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so
libva info: Found init function __vaDriverInit_0_38
libva info: va_openDriver() returns 0
vainfo: VA-API version: 0.38 (libva 1.6.2)
vainfo: Driver version: Splitted-Desktop Systems VDPAU backend for VA-API - 0.7.5.pre1
(also tried with VDPAU backend for VA-API versions 0.7.4 and 0.7.3)

Backtrace of thread waiting in vaPutSurface():
 
Thread 8 (Thread 0x7fca1f778700 (LWP 3580)):
#0  0x00007fca55a3e12d in poll () at ../sysdeps/unix/syscall-template.S:81
#1  0x00007fca5316b262 in poll (__timeout=-1, __nfds=1, __fds=0x7fca1f776a20) at
    /usr/include/x86_64-linux-gnu/bits/poll2.h:46
#2  _xcb_conn_wait (c=c@entry=0x2885500, cond=cond@entry=0x7fca1f776b40,
        vector=vector@entry=0x0, count=count@entry=0x0) at xcb_conn.c:459
#3  0x00007fca5316cadf in wait_for_reply (c=c@entry=0x2885500, request=31161,
        e=e@entry=0x0) at xcb_in.c:491
#4  0x00007fca5316cbf2 in xcb_wait_for_reply (c=0x2885500, request=31161, e=0x0)
at xcb_in.c:521
#5  0x00007fca419b8004 in vl_dri2_get_flush_reply (scrn=0x2653600) at
../../../../../src/gallium/auxiliary/vl/vl_winsys_dri.c:110
#6  0x00007fca419b8101 in vl_dri2_destroy_drawable (scrn=0x2653600) at
../../../../../src/gallium/auxiliary/vl/vl_winsys_dri.c:153
#7  0x00007fca419b8185 in vl_dri2_set_drawable (scrn=0x2653600,
        drawable=71303307) at
../../../../../src/gallium/auxiliary/vl/vl_winsys_dri.c:176
#8  0x00007fca419b82c8 in vl_dri2_screen_texture_from_drawable
(vscreen=0x2653600, drawable=0x440008b) at
../../../../../src/gallium/auxiliary/vl/vl_winsys_dri.c:193
#9  0x00007fca419b61ab in vlVdpPresentationQueueDisplay
(presentation_queue=<optimized out>, surface=5, clip_width=1280,
 clip_height=720, earliest_presentation_time=0)
        at ../../../../../../src/gallium/state_trackers/vdpau/presentation.c:234
#10 0x00007fca423ca6a3 in flip_surface_unlocked
        (driver_data=driver_data@entry=0x2650c90,
         obj_output=obj_output@entry=0x291a2b0) at vdpau_video_x11.c:583
#11 0x00007fca423cb2e1 in queue_surface_unlocked (obj_surface=<optimized out>,
        obj_output=0x291a2b0, driver_data=0x2650c90) at vdpau_video_x11.c:610
#12 put_surface_unlocked (flags=32, target_rect=0x7fca1f776f90,
        source_rect=0x7fca1f776f80, obj_output=0x291a2b0, obj_surface=0x2919bf0,
        driver_data=0x2650c90) at vdpau_video_x11.c:689
#13 put_surface (driver_data=driver_data@entry=0x2650c90,
        surface=surface@entry=50331655, drawable=drawable@entry=71303307,
        drawable_width=<optimized out>, drawable_height=720,
            source_rect=source_rect@entry=0x7fca1f776f80,
            target_rect=target_rect@entry=0x7fca1f776f90, flags=flags@entry=32)
at vdpau_video_x11.c:755
#14 0x00007fca423cb59c in vdpau_PutSurface (ctx=<optimized out>,
        surface=50331655, draw=0x440008b, srcx=<optimized out>, srcy=<optimized
        out>, srcw=<optimized out>, srch=720, destx=0, desty=0,
            destw=1280, desth=720, cliprects=0x0, number_cliprects=0, flags=32)
at vdpau_video_x11.c:808
#15 0x000000000040eed2 in on_client_draw (glsink=<optimized out>, buf=<optimized
        out>, data=0x626d40 <video>) at video.c:619


Full backtrace at:http://pastebin.com/RZqmUkMY

Using vdpau driver on radeon and:

libX11 1.6.2
libxcb 1.11 or 1.10
mesa 11.0
Comment 1 Vasilis LIaskovitis 2016-02-29 14:34:27 UTC
Perhaps it  would be good to reproduce this with a small testcase, e.g. a loop of the putsurface libva test. However, the libva/tests/putsurface testcase does not work for me at the moment. E.g.

./putsurface 
EXECUTE
Create window0 for thread0
libva info: VA-API version 0.38.1
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so
libva info: Found init function __vaDriverInit_0_38
libva info: va_openDriver() returns 0
upload_surface:vaDeriveImage (240) failed,exit

./putsurface -1 NV12 -2 YV12 
EXECUTE -1 NV12 -2 YV12
Create window0 for thread0
libva info: VA-API version 0.38.1
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so
libva info: Found init function __vaDriverInit_0_38
libva info: va_openDriver() returns 0
ensure_surface_attribs:vaCreateConfig() (208) failed,exit

Are there specific arguments needed for the test to work?

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.