On Thu, May 23, 2002 at 08:10:09AM +0100, Keith Whitwell wrote: > Michael wrote: > >I've been trying to track down one of the hangs on the radeon at the mo. > > > >Tuxkart draws, amongst other things, a course map with 2 GL_LINE_LOOPS > >and a quad for each racer. > > > >If I either (a) remove the function to draw that from tuxkart > > > >or (b) force tcl_render_line_loop_verts to use the > >tcl_render_line_strip_verts path at the bottom of that function (which > >uses EMIT_PRIM() rather than ALLOC_ELTS et al), it doesn't hang. i.e I > >put "if (0 && (flags & PRIM_END)) {" at line 215 in t_dd_dmatmp2.h > > > >The only thing that looks odd is that the call to radeonEmitAOS it uses > >in this path is the one that's part of ALLOC_ELTS that always uses 0 as > >an offset, so you see the 4: value below is the same for all 3 > >primitives - I wondered if that was it? > > > >Here's a short extract running it in debug. > > > >basically it's flush_prims radeon_vtxfmt.c > > -> tcl_render_line_loop_verts > > -> emit_contiguous_verts (x2) > > ALLOC_ELTS (which does radeonEmitAOS, and > > AllocEltsOpenEnded) > > etc > > > >The hang does always trigger, sometimes it's a couple of seconds into > >the level, sometimes you can get 1/2-way around the track but I've > >played for significantly longer without a prob, with the kludge above. > > Wow, good work... How did you track this down? It looks like it would > have taken ages...
Actually I think I'm getting closer but the kludge above seems to avoid the problem rather than it having anything specificially to do with LINE_LOOPS per se. If you look at the verbose output you get 0: 5 (cmd packet type five) blah.. 5: 1201 (various state packets, at minimum the ZBS state for the hang I assume was caused by a 6 packet immed following a 5 packet?) xx: 6 (cmd packet3, clip) ...and so on.. My kludge above changes this pattern, because it emits some of the primitives differently and I think that's all it did. What I have seen (and I went to bed, just got up so I need to carry on from where I left off but with a bit of luck this might be tuxracer's problem too...) This is the packet I saw just before the hang. 0: lots of 5 packet, state, 6 packet sequences... ... etc etc 8000: 6 packet .... 8132 0d000d - last elt of 6 packet flushes etc 0: 1301 (state??? Which confuses me, because I was expecting to see a 5 here) pageflip - hangs Almost as though the 5 packet was lost at the end of a buffer - or perhaps just a red herring, but I'm sure this is getting closer and explains why it hangs at a seemingly random place rather than the emit bogus state fix, which hangs q3 at exactly the same frame - the first one where there are no state changes to emit this one - if I'm not up another blind alley it needs a specific sequence at the point where a buffer is full to trigger) As you surmise, it takes hours, more so now, because I'm pouring through DEBUG_VERBOSE output. (I've noticed a couple of places where the packet type isn't 6 because there's no cmd[0].i = 0, I don't think they cause problems because the drm module would ignore the bogus values, that had me confused for a bit) -- Michael. _______________________________________________________________ Don't miss the 2002 Sprint PCS Application Developer's Conference August 25-28 in Las Vegas -- http://devcon.sprintpcs.com/adp/index.cfm _______________________________________________ Dri-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/dri-devel