mesa: Add SSE 4.1 optimisation for glDrawElements.
authorTimothy Arceri <t_arceri@yahoo.com.au>
Wed, 29 Oct 2014 12:05:59 +0000 (23:05 +1100)
committerMatt Turner <mattst88@gmail.com>
Thu, 6 Nov 2014 19:39:59 +0000 (11:39 -0800)
commit13786172181bf5a753c706a7f5c3eb5d448e244e
treeae36df3acf02742f3e8b0e9beb57ca8d82064c71
parent9557cf7d0d2e5a76a5277c2a4825e265609b2fca
mesa: Add SSE 4.1 optimisation for glDrawElements.

Makes use of SSE 4.1 to speed up compute of min and max elements.

Callgrind cpu usage results from pts benchmarks:

Openarena 0.8.8: 3.67% -> 1.03%
UrbanTerror: 2.36% -> 0.81%

V5:
- actually make use of the optimisation in android (Emil Velikov)
- set a better array size limit for using SSE and added TODO

V4:
- fixed bugs with incrementing pointer and updating counters

V3:
- Removed sse_minmax.c from Makefile.sources
- handle the first few values without SSE until the pointer is aligned
 and use _mm_load_si128 rather than _mm_loadu_si128
- guard the call to the SSE code better at build time

V2:
- removed GL* types
- use _mm_store_si128() rather than _mm_store_ps()
- add runtime check for SSE
- use aligned attribute for local mix/max
- bunch of tidyups

Reviewed-by: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Signed-off-by: Timothy Arceri <t_arceri@yahoo.com.au>
src/mesa/Android.libmesa_dricore.mk
src/mesa/Android.libmesa_st_mesa.mk
src/mesa/Makefile.am
src/mesa/main/sse_minmax.c [new file with mode: 0644]
src/mesa/main/sse_minmax.h [new file with mode: 0644]
src/mesa/vbo/vbo_exec_array.c