On Mon, 2009-03-09 at 03:41 -0700, Maciej Cencora wrote:
> On poniedziaĆek, 9 marca 2009 10:57:30 Keith Whitwell wrote:
> > On Fri, 2009-03-06 at 15:17 -0800, Maciej Cencora wrote:
> > > Hi,
> > >
> > > f9ce417aaf14c00e72e92307b910de5dbed1bb6d causes regression in some 3d
> > > apps on my rs690 (non tcl hw).
> > >
> > > glxgears: vbo/vbo_exec_api.c:751: vbo_exec_BeginVertices: Assertion
> > > `exec-
> > >
> > > >ctx->Driver.NeedFlush == 0' failed.
> > >
> > > texfilt: vbo/vbo_exec_api.c:788: vbo_exec_FlushVertices: Assertion
> > > `exec->ctx-
> > >
> > > >Driver.NeedFlush & 0x2' failed.
> > >
> > > Reverting this patch fixes the problem.
> > >
> > > Maciej
> >
> > Hi Maciej,
> >
> > I'll try and reproduce this here with swrast, but in case I can't, are
> > you able to provide a stack trace for each of these cases? I may have a
> > patch which turns on some debug as well, but in the meantime a stack
> > trace may provide some clues.
> >
> > Keith
>
> texfilt:
>
> Breakpoint 1, 0xb7cfc646 in __assert_fail () from /lib/tls/i686/cmov/libc.so.6
> (gdb) bt full
> #0 0xb7cfc646 in __assert_fail () from /lib/tls/i686/cmov/libc.so.6
> No symbol table info available.
> #1 0xb78bba3e in vbo_exec_FlushVertices (ctx=0x97e6360, flags=1) at
> vbo/vbo_exec_api.c:788
> exec = (struct vbo_exec_context *) 0x9821078
> __FUNCTION__ = "vbo_exec_FlushVertices"
> __PRETTY_FUNCTION__ = "vbo_exec_FlushVertices"
> #2 0xb7820cc1 in _mesa_Flush () at main/context.c:1513
> ctx = (GLcontext *) 0x97e6360
> #3 0xb7f5c4b0 in glutSwapBuffers () from /usr/lib/libglut.so.3
> No symbol table info available.
> #4 0x08049089 in Display () at texfilt.c:77
> No locals.
> #5 0xb7f644cb in ?? () from /usr/lib/libglut.so.3
> No symbol table info available.
> #6 0xb7f67d93 in fgEnumWindows () from /usr/lib/libglut.so.3
> No symbol table info available.
> #7 0xb7f64e70 in glutMainLoopEvent () from /usr/lib/libglut.so.3
> No symbol table info available.
> #8 0xb7f652cd in glutMainLoop () from /usr/lib/libglut.so.3
> No symbol table info available.
> #9 0x08049fd5 in main (argc=162269192, argv=0x0) at texfilt.c:396
> No locals.
>
> glxgears:
>
> Breakpoint 1, 0xb7d07646 in __assert_fail () from /lib/tls/i686/cmov/libc.so.6
> (gdb) bt full
> #0 0xb7d07646 in __assert_fail () from /lib/tls/i686/cmov/libc.so.6
> No symbol table info available.
> #1 0xb79c4920 in vbo_exec_BeginVertices (ctx=0x8c16120) at
> vbo/vbo_exec_api.c:751
> exec = (struct vbo_exec_context *) 0x8c50e78
> __FUNCTION__ = "vbo_exec_BeginVertices"
> __PRETTY_FUNCTION__ = "vbo_exec_BeginVertices"
> #2 0xb79b9133 in neutral_VertexAttrib3fvNV (index=2, v=0x8eecf14) at
> main/vtxfmt_tmp.h:391
> ctx = (GLcontext *) 0x8c16120
> tnl = (struct gl_tnl_module * const) 0x8c29b50
> tmp_offset = 693
> #3 0xb7940044 in execute_list (ctx=0x8c16120, list=1) at main/dlist.c:6540
> opcode = OPCODE_ATTR_3F_NV
> i = -17
> dlist = (struct gl_display_list *) 0x8eece70
> n = (Node *) 0x8eecf0c
> done = 0 '\0'
> #4 0xb7940c76 in _mesa_CallList (list=1) at main/dlist.c:6852
> save_compile_flag = 0 '\0'
> ctx = (GLcontext *) 0x8c16120
> #5 0xb79b7fcf in neutral_CallList (i=1) at main/vtxfmt_tmp.h:298
> No locals.
> #6 0x08049d09 in ?? ()
> No symbol table info available.
> #7 0x0804a5b6 in ?? ()
> No symbol table info available.
> #8 0xb7cf9685 in __libc_start_main () from /lib/tls/i686/cmov/libc.so.6
> No symbol table info available.
> #9 0x08049011 in ?? ()
> No symbol table info available.
OK, I suspect that this is being caused by the code in r300_swtcl.c
which tweaks the "Driver->NeedFlush" value under some circumstances.
I'm attaching a patch that makes the vbo code a bit more resilient to
that, and if that isn't sufficient we can tweak it a bit further.
Let me know.
Keith
diff --git a/src/mesa/vbo/vbo_exec_api.c b/src/mesa/vbo/vbo_exec_api.c
index a1e66ae..6402745 100644
--- a/src/mesa/vbo/vbo_exec_api.c
+++ b/src/mesa/vbo/vbo_exec_api.c
@@ -748,7 +748,7 @@ void vbo_exec_BeginVertices( GLcontext *ctx )
if (0) _mesa_printf("%s\n", __FUNCTION__);
vbo_exec_vtx_map( exec );
- assert(exec->ctx->Driver.NeedFlush == 0);
+ assert((exec->ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT) == 0);
exec->ctx->Driver.NeedFlush = FLUSH_UPDATE_CURRENT;
}
@@ -783,10 +783,12 @@ void vbo_exec_FlushVertices( GLcontext *ctx, GLuint flags )
/* Need to do this to ensure BeginVertices gets called again:
*/
- _mesa_restore_exec_vtxfmt( ctx );
+ if (flags & FLUSH_UPDATE_CURRENT) {
+ assert(exec->ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT);
+ _mesa_restore_exec_vtxfmt( ctx );
+ }
- assert(exec->ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT);
- exec->ctx->Driver.NeedFlush = 0;
+ exec->ctx->Driver.NeedFlush &= ~flags;
}
------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev