On Thu, 2016-01-07 at 19:57 -0500, Nicolai Hähnle wrote: > Hi, > > this series is intended to address a (big) part of the performance > problems > that occur when games use an index buffer from a VBO together with > vertex > attributes supplied by user pointer. On a lower-end Radeon (Carrizo), > it > lifts This War Of Mine (the worst offender I've seen) from basically > unplayable > to an acceptable ~22fps.
Hi Nicolai, A while back I added a SSE41 min/max optimisation for the INT path. I never added it to BYTE/SHORT as the games I was benchmarking never hit those paths. It would be interesting to know which path "This War Of Mine" is hitting. A quick Google shows Carrizo should have SSE41 right? > > There are really two parts to the performance inefficiency: > (1) the fact that we have to compute min/max in the first place > (2) the fact that games developers like to helpfully declare the > index buffer > as STATIC_DRAW, which means it ends up in VRAM, making things much > worse than > they would be with (1) alone. > > The series does this simply by caching (or memoizing, if you like) > the result > of vbo_get_minmax_indices. This makes sense since while the caching > itself of > course has some overhead, it is only used for VBOs - and the people > who mix > VBO index buffers with non-VBO vertex data seem to do so precisely > because > their index buffers are static, hence caching is a win. > > The cache is disabled permanently for VBOs that we detect to be > written to by > GPU operations. It is invalidated on other writes (Buffer(Sub)Data > etc.). > > I originally considered putting the caching in st/mesa instead of > vbo, but that > would have required duplicating some of the logic in > vbo_get_minmax_indices for > iterating over primitives inside the Gallium statetracker. I wanted > to avoid > this code duplication, hence why I put it in vbo. > > Please review! > > Thanks, > Nicolai > -- > src/mesa/Makefile.sources | 1 + > src/mesa/main/bufferobj.c | 41 +++- > src/mesa/main/mtypes.h | 7 + > src/mesa/main/transformfeedback.h | 3 + > src/mesa/vbo/vbo.h | 3 + > src/mesa/vbo/vbo_exec_array.c | 148 ------------ > src/mesa/vbo/vbo_minmax_index.c | 342 > ++++++++++++++++++++++++++++ > src/util/hash_table.c | 25 ++ > src/util/hash_table.h | 2 + > src/util/tests/hash_table/Makefile.am | 1 + > src/util/tests/hash_table/clear.c | 91 ++++++++ > 11 files changed, 507 insertions(+), 157 deletions(-) > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev