Bug 30632 - [softpipe] state_tracker/st_manager.c:489: st_context_notify_invalid_framebuffer: Assertion `stfb && stfb->iface == stfbi' failed.
Summary: [softpipe] state_tracker/st_manager.c:489: st_context_notify_invalid_framebuf...
Alias: None
Product: Mesa
Classification: Unclassified
Component: Other (show other bugs)
Version: git
Hardware: x86 (IA32) Linux (All)
: medium critical
Assignee: Keith Whitwell
QA Contact:
Depends on:
Reported: 2010-10-05 11:51 UTC by Vinson Lee
Modified: 2010-10-06 07:42 UTC (History)
2 users (show)

See Also:
i915 platform:
i915 features:


Description Vinson Lee 2010-10-05 11:51:03 UTC
mesa: b2e52cdf83662e5d81de2a476a7d53dc82271eb4 (master) - fail
mesa: 2b4a05e74a3378dc924e50103ed280412fb0c94b (7.9) - fail
mesa: 3af43c0b4c29f7cb82df72d0b65bcd190053f57c (7.8) - pass

Run piglit glx-make-current on softpipe.

$ ./bin/glx-make-current -auto

(gdb) bt
#0  0x00aa6416 in __kernel_vsyscall ()
#1  0x00910941 in raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#2  0x00913e42 in abort () at abort.c:92
#3  0x009098e8 in __assert_fail (assertion=0x614726 "stfb && stfb->iface == stfbi", file=0x6146d0 "state_tracker/st_manager.c", line=489, 
    function=0x6147c0 "st_context_notify_invalid_framebuffer") at assert.c:81
#4  0x003ab125 in st_context_notify_invalid_framebuffer (stctxi=0x8d70158, stfbi=0x8d60958) at state_tracker/st_manager.c:489
#5  0x0038ebac in xmesa_notify_invalid_buffer (b=0x8d83c60) at xm_api.c:1098
#6  0x0038ec09 in xmesa_check_buffer_size (b=0x8d83c60) at xm_api.c:1112
#7  0x0038f769 in xmesa_st_framebuffer_validate (stfbi=0x8d60958, statts=0x8d8406c, count=1, out=0xbfb57014) at xm_st.c:222
#8  0x003aa64a in st_framebuffer_validate (stfb=0x8d83d08, st=0x8d70158) at state_tracker/st_manager.c:156
#9  0x003ab75b in st_api_make_current (stapi=0x6ea820, stctxi=0x8d70158, stdrawi=0x8d60958, streadi=0x8d60958) at state_tracker/st_manager.c:712
#10 0x0038ed02 in XMesaMakeCurrent2 (c=0x8c89e48, drawBuffer=0x8d83c60, readBuffer=0x8d83c60) at xm_api.c:1147
#11 0x0039174b in glXMakeContextCurrent (dpy=0x8c7ed88, draw=58720260, read=58720260, ctx=0x8c89e28) at glx_api.c:1144
#12 0x00391832 in glXMakeCurrent (dpy=0x8c7ed88, drawable=58720260, ctx=0x8c89e28) at glx_api.c:1178
#13 0x0804a08f in draw (dpy=0x8c7ed88) at piglit/tests/glx/glx-make-current.c:56
#14 0x0804c4ba in piglit_glx_event_loop (dpy=0x8c7ed88, draw=0x8049fe4 <draw>) at piglit/tests/util/piglit-glx-util.c:131
#15 0x0804a2cc in main (argc=2, argv=0xbfb572f4) at piglit/tests/glx/glx-make-current.c:101
(gdb) frame 4
#4  0x003ab125 in st_context_notify_invalid_framebuffer (stctxi=0x8d70158, stfbi=0x8d60958) at state_tracker/st_manager.c:489
489	   assert(stfb && stfb->iface == stfbi);
(gdb) print stfb
$7 = (struct st_framebuffer *) 0x8d9a6d0
(gdb) print stfb->iface
$8 = (struct st_framebuffer_iface *) 0x8d62be8
(gdb) print stfbi
$9 = (struct st_framebuffer_iface *) 0x8d60958
Comment 1 Vinson Lee 2010-10-05 12:32:03 UTC
piglit glx-make-current passes on linux-x86 build and asserts on linux-x86-debug build.
Comment 2 Vinson Lee 2010-10-05 13:05:10 UTC
42719df0b866a00ea4a7739e82e1639c9943fcfd is the first bad commit
commit 42719df0b866a00ea4a7739e82e1639c9943fcfd
Author: Keith Whitwell <keithw@vmware.com>
Date:   Sun Aug 22 14:14:55 2010 +0100

    glx/xlib: configurable strict/non-strict buffer size invalidate
    Introduce a new configuration option XMESA_STRICT_INVALIDATE to switch
    between swapbuffers-based and glViewport-based buffer invalidation.
    Default strict invalidate to false, ie glViewport-based invalidation,
    This means we will not call XGetGeometry after every swapbuffers,
    which allows swapbuffers to remain asynchronous.  For apps running at
    100fps with synchronous swapping, a 10% boost is typical.  For gears,
    I see closer to 20% speedup.
    Note that the work of copying data on swapbuffers doesn't disappear -
    this change just allows the X server to execute the PutImage
    asynchronously without us effectively blocked until its completion.
    This applies even to llvmpipe's threaded rasterization as the
    swapbuffers operation was a large part of the serial component of an
    llvmpipe frame.
    The downside of this is correctness - applications which don't call
    glViewport on window resizes will get incorrect rendering, unless
    The ultimate solution would be to have per-frame but asynchronous
    invalidation.  Xcb almost looks as if it could provide this, but the
    API doesn't seem to quite be there.

:040000 040000 c252970f9b71af088aa1a466f1cc0abe36fa1660 a024a9242fb8039240612478a89dc3b56ed7f212 M	src
bisect run success
Comment 3 Vinson Lee 2010-10-05 13:07:14 UTC
glx-make-current passes on a softpipe linux-x86-debug build with XMESA_STRICT_INVALIDATE=1.
Comment 4 Brian Paul 2010-10-05 13:34:30 UTC
Fixed with Mesa commit 3d6eec0a87ee5549e817cdabb4b6424960678189
Comment 5 Vinson Lee 2010-10-05 17:36:36 UTC
mesa: 9528fc2107d4cae39bc932c1943ffc57ebc92499 (master)

Verified fixed on master.
Comment 6 Brian Paul 2010-10-06 07:42:47 UTC
Cherry-picked to 7.9 too.  Commit 0a060c8fb0594807f59bde5c77b518c0ebc99bec

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.