Optimize AABB calculation with SIMD operations

Optimize AABB calculations by using SIMD instructions. Some
intersection tests, as well as AABB update functions are implemented
using SIMD optimizations. The new class sreBoundingVolumeAABB_SIMD
is introduced for this purpose.

The shadow caster and shadow receiver AABB region calculation before
shadow map generation is now optionally accelerated with SIMD. However,
at the time of the current commit shadow mapping for non-directional
lights is still non-functional (unrelated to the SIMD optimizations).

Signed-off-by: Harm Hanemaaijer <fgenfb@yahoo.com>
Fix and enable 4x4 by 4x3 SIMD matrix multiplication

4x4 by 4x3 matrix multiplication using SIMD now works and has been
enabled.

Add spotlight shadow map shaders to shadow map shader validation.

Signed-off-by: Harm Hanemaaijer <fgenfb@yahoo.com>
SIMD improvements and optimizations

Improve SIMD support by generalizing and add new functions.

Add SIMD-optimized functions for multiplication of a matrix
with a set of vertices.

Allow use of a vector load instruction instead of setting individual
components when initializing SIMD registers for calculations.

Signed-off-by: Harm Hanemaaijer <fgenfb@yahoo.com>
Fix SIMD matrix multiplication with vectors; add support for points

SIMD Matrix multiplication with array of vectors now works correctly.
Support the Point3D type with implicit w-coordinate of 1.0.

Signed-off-by: Harm Hanemaaijer <fgenfb@yahoo.com>
Improve SIMD support and use it more extensively

Extend and rationalize SIMD primitive functions, adding support for
double vectors, division, more versatilel load/store.

Add SIMD functions for calculating the dot product of an array of
vectors with a single constant vector, and optionally count the
number of negative dot products.

Use SIMD during geometry scissors region calculation (screen projection
calculation).

Use SIMD during frustum calculation.

Signed-off-by: Harm Hanemaaijer <fgenfb@yahoo.com>
Split off SIMD primitives header file and extend SIMD primitives

Split off the platform-specific SIMD primitive implementation into
sreSIMDPlatform.h and extend the amount of primitives supported,
with some support for new data types (such as double and int64).

sreSIMDPlaform.h can be used a unified SIMD interface seperately
from the SRE library. Some matrix multiplication primitives, as
well as various functions to calculate dot products are provided.

SRE-specific SIMD functions that operate of data types defined in
sreVectorMath.h, such as Vector3D, Matrix4D etc remain in sre_simd.h.

Signed-off-by: Harm Hanemaaijer <fgenfb@yahoo.com>
Provide both inline and non-inline SIMD library functions

Provide inline and non-inline definitions of each higher level
SIMD library function (matrix multiplication, dot products etc).
Non-inline definitions are seperated into sreSIMD.cpp.

The inline functions are marked with gcc's always_inline
attribute.

Signed-off-by: Harm Hanemaaijer <fgenfb@yahoo.com>
Move class for SIMD matrix multiplication into indepedent header

Move the class for SIMD matrix multiplication with one of more
vectors into sreSIMDPlatform.h in a way that is independent of SRE
or the vector types defined in sreVectorMath.h. In sre_simd.h,
a similar class for SRE vector types such as Vector4D a
derived from the corresponding class in sreSIMDPlatform.h

Signed-off-by: Harm Hanemaaijer <fgenfb@yahoo.com>