On Tue, 2009-09-29 at 20:31 +0100, Peter Clifton wrote: > On Tue, 2009-09-29 at 11:29 -0600, tom fogal wrote: > > Peter Clifton <pc...@cam.ac.uk> writes: > > > With the latest mesa code (sorry - no idea when it regressed), > > > > You mentioned not having a lot of time, but FWIW check out git-bisect, > > > > http://www.kernel.org/pub/software/scm/git/docs/git-bisect.html > > > > -tom > > Took quite a bit of time.. but not as much as I had feared. I knew about > git bisect, but didn't know quite how easy it was to test a new mesa > version. (I had feared the kernel + 2D driver bits might need to be > changed in sync). > > > After a bit of a false lead, I finally tracked the behaviour change to: > > 50d8b295f6c950da3b8783ff6e1803bdfbb5c7cc is first bad commit > commit 50d8b295f6c950da3b8783ff6e1803bdfbb5c7cc > Author: Brian Paul <bri...@vmware.com> > Date: Tue Sep 1 12:05:41 2009 -0600 > > intel: use _mesa_meta_clear(), it's a bit faster > > :040000 040000 81f24fd1186fda701bd343d7e3c4428c10494477 > 40f6ebb2f756d7054fb2ea940183bc8ad5154ed0 M src > > > Hope this helps!
Reverting the change from the old meta-ops code fixes the issue on master, but I can't determine any real differences between the old / new code. One clue I managed to find though.. If you look at: src/mesa/drivers/common/meta.c, and in: _mesa_meta_Clear(GLcontext *ctx, GLbitfield buffers) { } Around line 1227, where there is: if (clear->ArrayObj == 0) { /* one-time setup */ /* create vertex array object */ _mesa_GenVertexArrays(1, &clear->ArrayObj); _mesa_BindVertexArray(clear->ArrayObj); /* create vertex array buffer */ _mesa_GenBuffersARB(1, &clear->VBO); _mesa_BindBufferARB(GL_ARRAY_BUFFER_ARB, clear->VBO); _mesa_BufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(verts), NULL, GL_DYNAMIC_DRAW_ARB); /* setup vertex arrays */ _mesa_VertexPointer(3, GL_FLOAT, sizeof(struct vertex), OFFSET(x)); _mesa_ColorPointer(4, GL_FLOAT, sizeof(struct vertex), OFFSET(r)); _mesa_EnableClientState(GL_VERTEX_ARRAY); _mesa_EnableClientState(GL_COLOR_ARRAY); } else { _mesa_BindVertexArray(clear->ArrayObj); _mesa_BindBufferARB(GL_ARRAY_BUFFER_ARB, clear->VBO); } If I scrap the "one-time-setup" part, and just execute the first clause every time.. ie.. change the above to: /* create vertex array object */ _mesa_GenVertexArrays(1, &clear->ArrayObj); _mesa_BindVertexArray(clear->ArrayObj); /* create vertex array buffer */ _mesa_GenBuffersARB(1, &clear->VBO); _mesa_BindBufferARB(GL_ARRAY_BUFFER_ARB, clear->VBO); _mesa_BufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(verts), NULL, GL_DYNAMIC_DRAW_ARB); /* setup vertex arrays */ _mesa_VertexPointer(3, GL_FLOAT, sizeof(struct vertex), OFFSET(x)); _mesa_ColorPointer(4, GL_FLOAT, sizeof(struct vertex), OFFSET(r)); _mesa_EnableClientState(GL_VERTEX_ARRAY); _mesa_EnableClientState(GL_COLOR_ARRAY); Then the problem goes away. (And no doubt leaks loads of resources etc..). This seems to imply that the vertex array object / buffer / array setup is being knobbled between calls to the _mesa_meta_Clear(). ------------------------------------------------------------------------------ Come build with us! The BlackBerry® Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9-12, 2009. Register now! http://p.sf.net/sfu/devconf _______________________________________________ Mesa3d-dev mailing list Mesa3d-dev@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mesa3d-dev