2011/6/12 Mathias Fröhlich <mathias.froehl...@gmx.net>: > On Sunday, June 12, 2011 16:53:08 Marek Olšák wrote: >> 2011/6/12 Mathias Fröhlich <mathias.froehl...@gmx.net>: >> > 0005-r600g-Make-use-of-PIPE_TRANSFER_DISCARD_WHOLE_RESOUR.patch: >> > This makes use of the DISCARD_WHOLE_RESOURCE flag for memory mappings. >> >> That won't work. The old buffer may still be set as a vertex >> buffer/texture. If you replace the whole buffer like that, all the >> states in all existing pipe contexts where the old buffer is set in >> must be re-emitted as well (e.g. by marking them as dirty), which is unfun. > Hmm, I see. This 'find all context' stuff is really bad ... > So, forget about this last one. > > Ok, then I wonder if it would work when this is just implemented at the > state_stracker level in st_cb_bufferobjects.c: > > There is the implementation of glBufferData which detaches itself from the > underlying pipe_resource by unreferencing the old one and creating a new one. > So, given this works well in all cases (does it?),
No, it doesn't work either. Thanks for point out a serious bug in st/mesa. I have added a new piglit test for this: vbo-bufferdata We shouldn't just grab a new buffer without updating all the places it's bound in no matter if it's a driver or mesa core. Not sure what the correct fix would be. We must still reallocate the buffer if the old and new buffer sizes don't match. Marek _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev