Michael wrote: > > On Sat, Feb 09, 2002 at 05:03:31AM +0000, Keith Whitwell wrote: > > Thanks for your reply. > > > My solution to this would be to always produce Clip coordinates from Model > > coordinates using the ModelProject matrix .... > > Ok. Done. > > > Secondly, we need to investigate the software path - is unwanted additional > > precision somehow sneaking in? It's often appealing to allow GLdouble > > I've been looking through _mesa_transform_tab[] et al since I posted I > can't see anything that doesn't use GLfloat in the MESA_NO_ASM=1 path > (and the generated asm didn't show anything obvious at a glance) > similary in the X86 path (dunno about 3DNOW as I've no idea what the > instructions mean) > > > I think some investigation of the demo is required to see if it is expecting > > something unreasonable or not. > > Ok, I think I've glanced at this 'open gl invariance' thing on a web > site, I'll grab the docs and read it in more detail....probably look at > why RTCW has problems and see if that's really somewhere else. > > Can I change this thread to get your wisdom on another problem? > > (chess.c exhibits this) > > Scenario : Application is generating a display list firing a lot of > vertices in a loop something like :- > > glBegin(QUAD_STRIP or similar) > for (...) { > Normal > Vertex3f(...) > .. > .. > Vertex3f(....) > } > glEnd() > > Ok, if the last Vertex() of the loop forces a _tnl_flush_immediate > because the IM is full the first slot of the next Immediate will get the > _END. > > Problem : When you later execute the list the code considers the last n > vertices of IM 1 should be copied forward and since slot 3 of IM > 2 has the first VERT_END, it then tries to render just those n vertices. > > Thing is, the emit() loops have unsigned counters, so a check like j< > count - 3) becomes j < 2^32-1 (also nr+= nr - count is > zero) (when count = 2 for example)
I've just hit exactly the same problem on the mesa-4-0-branch with the t_dd_dmatmp.h file (included in radeon_render.c). I fixed it after saying 'doh' by making the tests into things like 'j+3 < count', etc. > I figure these vertices ideally wouldn't be copied, unless it > happened in the middle of the for loop, since the next call is glEnd() > The real problem is not knowing the glEnd() is coming next in advance. It's hard in general to predict the future. > This gives a few possible solutions : > > a) Fix the j, nr loops. Sounds like fixing the symptom - unless there > are valid scenarios where the infinite loop may hit. > > b) Change the logic in fixup_compiled_primitives (or perhaps earlier in > _tnl_copy_immediate_vertices) to throw away these vertices if IM slot 3 > is an end, they'll have already been rendered afaict. > > c) change the front end api so things like _tnl_Vertex/VERTEXn instead of being > count = IM->Count++ > store vertex[count] > check if IM is full > flush_immediate > it checks and flushes first > check if full > flush_immediate > > store vertex[IM->Count++] This is actually an interesting idea. I don't like the 'stranded end' immediates, but there are a bunch of other similar oddities that I've felt just have to be coped with. > I haven't completely thought this one through, but I'm assuming that as > 216 is a nice multiple of 2,3, 4 and 6 that currently the chances of an > IM being flushed exactly before a glEnd() call is high, whereas if there > is another vertex when IM->Count==216, we really are in the middle of > something - hmm, but it needs a mechanism to get that IM and > things that stick in the current slot, like Normal()s could be messy > (well they'd need to flush). > > d) something completely different? ... My feeling has just been to build it robust enough to cope with flushes *anywhere*. In the radeon tcl driver, there's a real benefit to being able to flush before & after material calls, for instance. Ultimately the whole struct immediate should be taken as 1) a storage mechanism for display lists and 2) a fallback for immediate mode rendering. The fact that it is also the normal mechanism for immediate mode rendering in the existing drivers is more of an accident than anything else - there have been 2 or 3 efforts to put in a proper, tight, fast immediate mode engine which have floundered for various reasons. I'm working on a tcl-specific one at the moment... It's very simple so hopefully it won't suffer the same fate. Keith _______________________________________________ Dri-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/dri-devel