Hi Timothy,

On 07.01.2016 23:01, Timothy Arceri wrote:
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.

It uses shorts, but as Marek suggested it is indeed the synchronization which is the main performance killer.


A quick Google shows Carrizo should have SSE41 right?

Yes, that's correct.

Cheers,
Nicolai





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

Reply via email to