[Mesa-stable] [Mesa-dev] [PATCH 1/2] st/mesa: don't cast the incomplete framebufer to st_framebuffer
Michel Dänzer
michel at daenzer.net
Thu May 11 09:38:53 UTC 2017
On 25/04/17 06:23 PM, Nicolai Hähnle wrote:
> From: Nicolai Hähnle <nicolai.haehnle at amd.com>
>
> The incomplete framebuffer is set for a surfaceless context. This leads to
> the following error in piglit spec at egl_khr_surfaceless_context@viewport:
[...]
> diff --git a/src/mesa/state_tracker/st_manager.c b/src/mesa/state_tracker/st_manager.c
> index 86a82c2..2ba7de6 100644
> --- a/src/mesa/state_tracker/st_manager.c
> +++ b/src/mesa/state_tracker/st_manager.c
> @@ -837,27 +837,28 @@ st_api_destroy(struct st_api *stapi)
>
> /**
> * Flush the front buffer if the current context renders to the front buffer.
> */
> void
> st_manager_flush_frontbuffer(struct st_context *st)
> {
> struct st_framebuffer *stfb = st_ws_framebuffer(st->ctx->DrawBuffer);
> struct st_renderbuffer *strb = NULL;
>
> + assert(st->ctx->DrawBuffer != _mesa_get_incomplete_framebuffer());
This assertion sometimes fails in Xorg (with GLX indirect rendering
enabled) during a piglit run, see example backtrace below. I found a
way to reproduce it quickly: Run
( while .../piglit/bin/glx-get-current-display-ext -auto >/dev/null; do done )&
in the background, then start a piglit gpu run.
../../../src/mesa/state_tracker/st_manager.c:840:st_manager_flush_frontbuffer: Assertion `st->ctx->DrawBuffer != _mesa_get_incomplete_framebuffer()' failed.
Thread 1 "Xorg" received signal SIGTRAP, Trace/breakpoint trap.
0x00007f97c3a39b76 in _debug_assert_fail (expr=expr at entry=0x7f97c3e85e68 "st->ctx->DrawBuffer != _mesa_get_incomplete_framebuffer()", file=file at entry=0x7f97c3e85e38 "../../../src/mesa/state_tracker/st_manager.c", line=line at entry=840,
function=function at entry=0x7f97c3e86930 <__func__.43856> "st_manager_flush_frontbuffer") at ../../../../src/gallium/auxiliary/util/u_debug.c:321
321 os_abort();
(gdb) bt
#0 0x00007f97c3a39b76 in _debug_assert_fail (expr=expr at entry=0x7f97c3e85e68 "st->ctx->DrawBuffer != _mesa_get_incomplete_framebuffer()", file=file at entry=0x7f97c3e85e38 "../../../src/mesa/state_tracker/st_manager.c", line=line at entry=840,
function=function at entry=0x7f97c3e86930 <__func__.43856> "st_manager_flush_frontbuffer") at ../../../../src/gallium/auxiliary/util/u_debug.c:321
#1 0x00007f97c37cb928 in st_manager_flush_frontbuffer (st=0x55d1c5cd1080) at ../../../src/mesa/state_tracker/st_manager.c:840
#2 st_context_flush (stctxi=0x55d1c5cd1080, flags=<optimized out>, fence=<optimized out>) at ../../../src/mesa/state_tracker/st_manager.c:506
#3 0x00007f97c39772b2 in dri_make_current (cPriv=<optimized out>, driDrawPriv=0x55d1c6aa5df0, driReadPriv=0x55d1c6aa5df0) at ../../../../../src/gallium/state_trackers/dri/dri_context.c:240
#4 0x00007f97c3975cf4 in driBindContext (pcp=<optimized out>, pdp=<optimized out>, prp=<optimized out>) at ../../../../../../src/mesa/drivers/dri/common/dri_util.c:555
#5 0x00007f97c7bad635 in DoMakeCurrent (cl=0x55d1c6a64318, drawId=<optimized out>, readId=16777220, contextId=<optimized out>, tag=<optimized out>) at ../../glx/glxcmds.c:663
#6 0x000055d1c43ae059 in Dispatch () at ../../dix/dispatch.c:478
#7 0x000055d1c43b21a5 in dix_main (argc=3, argv=0x7ffc12f6f2a8, envp=<optimized out>) at ../../dix/main.c:276
#8 0x00007f97c97132b1 in __libc_start_main (main=0x55d1c439c8b0 <main>, argc=3, argv=0x7ffc12f6f2a8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffc12f6f298) at ../csu/libc-start.c:291
#9 0x000055d1c439c8ea in _start ()
--
Earthling Michel Dänzer | http://www.amd.com
Libre software enthusiast | Mesa and X developer
More information about the mesa-stable
mailing list