Bug 30632 - [softpipe] state_tracker/st_manager.c:489: st_context_notify_invalid_framebuffer: Assertion `stfb && stfb->iface == stfbi' failed.
[softpipe] state_tracker/st_manager.c:489: st_context_notify_invalid_framebuf...
Product: Mesa
Classification: Unclassified
Component: Other
x86 (IA32) Linux (All)
: medium critical
Assigned To: Keith Whitwell
Depends on:
  Show dependency treegraph
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:


Note You need to log in before you can comment on or make changes to this bug.
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