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

Reply via email to