On Sun, 7 Mar 2004 02:12:54 +0100 Felix Kühling <[EMAIL PROTECTED]> wrote:
> On Sat, 06 Mar 2004 20:16:38 +0100 > Michel Dänzer <[EMAIL PROTECTED]> wrote: > > > On Sat, 2004-03-06 at 17:08, Sérgio Monteiro Basto wrote: > [snip] > > > > [...] > > > > > Program received signal SIGSEGV, Segmentation fault. > > > 0x40757507 in generic_interp (ctx=0x0, t=0.918080449, edst=96, > > > eout=21, ein=22, force_boundary=0 '\0') > > > at t_vertex.c:736 > > > 736 a[0].insert[4-1]( &a[0], vdst, pos ); > > > > This may be enough for the savage developers, but a backtrace might > > still be good. > > This is in Keith's new vertex code. I'm not too familiar with the > internals. I'd really need more info in order to find the cause of > trouble. Maybe Keith would be the better person to fix this. > > First thing I noticed is that ctx is 0x0, which is probably a debugger > problem because it would have crashed earlier if ctx was really 0. It > would be helpful to see the values of all the symbols in the offending > line. > > I'm downloading foobillard 2.9 now. Maybe I can reproduce the problem > here and get all the info needed. Found it. I had already fixed this problem yesterday, but not committed it yet, because it didn't fix the problem I was actually hunting. ;-) I've committed it now. A patch is attached for your convenience. Apply it in mesa/src/mesa/drivers/dri/savage. Regards, Felix
--- ./savagetris.c.~1.5.~ 2004-03-03 00:46:07.000000000 +0100 +++ ./savagetris.c 2004-03-07 02:27:46.000000000 +0100 @@ -760,7 +760,7 @@ /* EMIT_ATTR's must be in order as they tell t_vertex.c how to * build up a hardware vertex. */ - if (index & _TNL_BITS_TEX_ANY) { + if ((index & _TNL_BITS_TEX_ANY) || !(ctx->_TriangleCaps & DD_FLATSHADE)) { EMIT_ATTR( _TNL_ATTRIB_POS, EMIT_4F_VIEWPORT, SAVAGE_HW_NO_W ); } else { @@ -797,9 +797,12 @@ } /* Only need to change the vertex emit code if there has been a - * statechange to a new hardware vertex format: + * statechange to a new hardware vertex format and also when the + * vertex format is set for the first time. This is indicated by + * imesa->vertex_size == 0. */ - if (drawCmd != (imesa->DrawPrimitiveCmd & SAVAGE_HW_SKIPFLAGS)) { + if (drawCmd != (imesa->DrawPrimitiveCmd & SAVAGE_HW_SKIPFLAGS) || + imesa->vertex_size == 0) { imesa->vertex_size = _tnl_install_attrs( ctx, imesa->vertex_attrs, --- ./savage_xmesa.c.~1.5.~ 2004-03-03 02:02:56.000000000 +0100 +++ ./savage_xmesa.c 2004-03-05 21:31:12.000000000 +0100 @@ -408,6 +408,11 @@ imesa->depth_scale = (imesa->savageScreen->zpp == 2) ? (1.0F/0x10000):(1.0F/0x1000000); + /* Uninitialized vertex format. Force setting the vertex state in + * savageRenderStart. + */ + imesa->vertex_size = 0; + /* Utah stuff */ imesa->new_state = ~0;