https://bugs.freedesktop.org/show_bug.cgi?id=37142
--- Comment #1 from Ian Romanick idr@freedesktop.org 2011-05-12 10:55:30 PDT --- (In reply to comment #0)
Created an attachment (id=46638)
--> (https://bugs.freedesktop.org/attachment.cgi?id=46638)
openarena + verbose vertex buffer upload logs
Test case : openarena + anholt benchmark + r600g
I added several fprintf debug trace to mesa code around Vertex buffer uploading. Basically, openarena render things using : glVertexPointeer() glLockArraysEXT() several glDrawElements() glUnlockArraysEXT()
It seems that each call to glDrawElements implies a reupload of the vertex buffers, even if it has not changed (as glLock/Unlock calls tell, at least for part of the buffer).
EXT_compiled_vertex_array is dead. It has been dead for almost 10 years. No new applications should use it, and old applications that use it should be fast enough on modern hardware. I really don't think we should add any code to Mesa to make this case fast. We'd be better off submitting patches to openarena to use VBOs instead.
Another related bug (it seems) is in : cso_set_vertex_buffers() which does a test before calling : util_copy_vertex_buffers and pipe->set_vertex_buffers This test always return true, thus the 2 above functions are always called. The test is always true because it memcmp all pipe_vertex_buffer, which contains a 'buffer' pointer, which changes at each frame (see st_draw.c:349).
I'm trying to build a patch which fix the cso_set_vertex_buffers problem and then, taking advantage of glLock/Unlock calls to fix the upload issue.
What do you think ?