On Wed, 2010-03-10 at 06:47 -0800, Corbin Simpson wrote: > I don't know the VBO code that well, so I'm asking you guys if this > has ever come up before. > > http://bugs.winehq.org/show_bug.cgi?id=22000 > > Gallium and indexed rendering are not very happy with each other. I get some > fairly solidly reliable segfaults with both a d3d9 DLL test (device.ok) and > Civ4 (Steam version). Hardware is a Radeon R580 (X1900), driver is r300g from > Mesa git. > > My current guess, based on the Mesa debug info I dumped, is that the indexed > rendering code is slightly baked and maybe trusting the underlying GL driver a > bit too much. > > get_arrays_bounds: Handling 2 attrs > attr 0: stride 16 size 12 start (nil) end 0xfffffffc > attr 1: stride 16 size 4 start 0xc end (nil) > buffer range: (nil) 0xfffffffc range -4 max index 4294967295 > > So right here (from device.ok) we have interleaved userspace VBO, that is > being > prepped inside core Mesa. Two delightful things here; the first attr seems way > off-base, it shouldn't dare be giving us bad pointers, and the second attr's > pointers don't even line up!
In VBO rendering, the pointers are really just offsets into the VBO, so should be interpreted as numbers. The first attribute has what looks like a small negative number. I don't know if that's legal or not in GL - I suspect it is probably not legal and should be rejected in the mesa validation code. I suspect what is happening is wine is passing in some negative values and we aren't properly rejecting them in mesa. > Compare to a sane program (Mesa's drawarrays): > > get_arrays_bounds: Handling 2 attrs > attr 0: stride 16 size 12 start 0x8087020 end 0x808705c > attr 1: stride 16 size 4 start 0x808702c end 0x8087060 > buffer range: 0x8087020 0x8087060 range 64 max index 3 This doesn't look like VBO rendering though. These are regular vertex arrays, meaning these values are proper pointers. > r300g doesn't really care. It shouldn't have to - the expectation in gallium is that inputs have been validated. > The kernel drops the rendering on the floor for a > variety of reasons, not least being the ridiculous max_index. > > But then it segfaults, and I have zero idea why. I'd guess it's something to > do > with tossing around NULL pointers like candy, but I'm honestly not sure and I > haven't really dug into the DLL code yet. It's great you found a bug, but why all the excitement? Just track it down and propose a fix. Mesa's pretty well debugged, but there are always going to be new issues. I'm not sure why it warrants this type of implicit criticism when you come across something new. Keith ------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev _______________________________________________ Mesa3d-dev mailing list Mesa3d-dev@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mesa3d-dev