| Summary: | [softpipe] state_tracker/st_manager.c:489: st_context_notify_invalid_framebuffer: Assertion `stfb && stfb->iface == stfbi' failed. | ||
|---|---|---|---|
| Product: | Mesa | Reporter: | Vinson Lee <vlee> |
| Component: | Other | Assignee: | Keith Whitwell <keithw> |
| Status: | CLOSED FIXED | QA Contact: | |
| Severity: | critical | ||
| Priority: | medium | CC: | brianp, wallbraker |
| Version: | git | ||
| Hardware: | x86 (IA32) | ||
| OS: | Linux (All) | ||
| Whiteboard: | |||
| i915 platform: | i915 features: | ||
piglit glx-make-current passes on linux-x86 build and asserts on linux-x86-debug build. 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, aka ST_MANAGER_BROKEN_INVALIDATE. 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 XMESA_STRICT_INVALIDATE is set. 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 glx-make-current passes on a softpipe linux-x86-debug build with XMESA_STRICT_INVALIDATE=1. Fixed with Mesa commit 3d6eec0a87ee5549e817cdabb4b6424960678189 mesa: 9528fc2107d4cae39bc932c1943ffc57ebc92499 (master) Verified fixed on master. 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.
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