commit aab63ce5a0319932a2640c0e47bedeb4580305a4
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Fri Apr 8 14:41:59 2016 +0100

    Release 1.4.0

 configure.ac | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

commit 8c4177775a12603e186ba71113338fb4e9a324df
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Fri Apr 8 15:27:06 2016 +0100

    docs: Override graphene_simd4x4f_t
    
    The GRAPHENE_VECTORCALL annotation makes gtk-doc wet the bed, so we need
    to provide a manual override in order to pass `make check`.

 doc/graphene-overrides.txt | 6 ++++++
 1 file changed, 6 insertions(+)

commit e8e0ca0e9d2c96c874e710a3c0561d43e9f0b385
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Fri Apr 8 14:25:54 2016 +0100

    build: Don't dist generated pkg-config files
    
    The .pc files for Graphene are going to be generated at configure time,
    so there's no point in having them into the dist tarball.

 src/Makefile.am | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

commit 587bcc68f90d017f79ba0641c6c1d3fc157efc17
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Fri Apr 8 14:23:41 2016 +0100

    build: Use AM_DISTCHECK_CONFIGURE_FLAGS
    
    The AM_DISTCHECK_CONFIGURE_FLAGS variable is the preferred one for use
    inside Makefile.am, in order to leave DISTCHECK_CONFIGURE_FLAGS for
    distributors and builders for overrides.

 Makefile.am | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 11a463fd85f65712e035d282739c5675b11bd7c3
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Fri Apr 8 15:28:04 2016 +0100

    simd4f: Align masks for dot3 fallbacks
    
    On some platforms (mostly 32 bit architectures) we need to force the
    alignment of the unsigned integer masks we use to implement dot3() on
    non-SSE 4.1 capable platforms.

 src/graphene-simd4f.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

commit 4ee30fee15821e184f95b730954fd8665b730b7f
Merge: 9290c88 8664d26
Author: Emmanuele Bassi <ebassi@gmail.com>
Date:   Fri Apr 8 13:04:12 2016 +0100

    Merge pull request #58 from fanc999/master
    
    graphene-simd4x4f.h: Fix x86 Builds on MSVC 2013 and Later

commit 8664d26ead9137444479871a565f1eb6ee379b3c
Author: Chun-wei Fan <fanchunwei@src.gnome.org>
Date:   Thu Jan 29 13:50:41 2015 +0800

    graphene-simd4x4f.h: Fix x86 Builds on MSVC 2013 and Later
    
    __vectorcall (hence GRAPHENE_VECTORCALL) must be after the return type, so
    move GRAPHENE_VECTORCALL around a bit to fix the build.

 src/graphene-simd4x4f.h | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

commit 9290c88cd5d7e3333f9ab90a6e4def7a88b8b5a1
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Fri Apr 8 11:19:36 2016 +0100

    Use C11 _Generic macro for type appropriate lerp()
    
    Look at us, all fancy and using a spec written 5 years ago.

 src/graphene-private.h | 33 ++++++++++++++++++++++++++++++++-
 1 file changed, 32 insertions(+), 1 deletion(-)

commit 9dc16635fe55f05daf9c1a6f1214e2bf6a647573
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Thu Apr 7 19:05:06 2016 +0100

    matrix: Use the type appropriate abs()
    
    Do not use the integer abs() when dealing with doubles.

 src/graphene-matrix.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 43248f9ec9db7b06789a2b1db1c3858a980befcb
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Thu Apr 7 18:57:50 2016 +0100

    build: Re-indent configure.ac
    
    Too much white space and indentation makes editing and following the m4
    madness harder than necessary.

 configure.ac | 489 +++++++++++++++++++++++++++--------------------------------
 1 file changed, 220 insertions(+), 269 deletions(-)

commit 0b225e407dd7d6bf6f11b7afc3a28c147b309d22
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Thu Apr 7 18:14:55 2016 +0100

    euler: Drop indirection in initializer
    
    Use the internal initializer function instead of going through the
    public API.

 src/graphene-euler.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

commit a6bb76f881ae7b56ba00a0aa3c670344433eb52c
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Thu Apr 7 13:52:58 2016 +0100

    tests: Add interpolation test for 3D matrices
    
    We use a simple translation because rotations are going to be messy to
    test. This should still be enough to see if the matrix decomposition
    code is doing the right thing.

 src/tests/matrix.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

commit 9e1108bacb78ee61e23a260d7a75e85f2b20e37c
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Thu Apr 7 13:49:51 2016 +0100

    tests: Add interpolation test for 2D matrices
    
    Let's try and avoid breakage in the future.

 src/tests/matrix.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

commit 84237c079b5a52c21692af79f2768d4f56896eff
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Thu Apr 7 13:40:32 2016 +0100

    matrix: Fix the interpolation of 3D matrices
    
    We're not extracting the translation and perspective components
    correctly; the matrix is made of row vectors, which means that the
    translation component is the W row vector, whereas the perspective
    component is the W component of each row vector.

 src/graphene-matrix.c | 40 ++++++++++++++++++++++++----------------
 1 file changed, 24 insertions(+), 16 deletions(-)

commit 178ebd1791364cff08b098d3cba51ae4706061af
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Thu Apr 7 13:39:16 2016 +0100

    tests: Fix matrix fuzzy comparison macro
    
    We're not testing all the components because we're missing the row
    offset.

 src/tests/graphene-test-compat.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 6bf5939f83f3beb6510b6adb46b55c256171c001
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Apr 6 16:38:02 2016 +0100

    matrix: Fix interpolation between 2D matrices
    
    The decomposition and interpolation code claims to come from the CSS3
    Transformation specification, but it does something fairly custom; it
    also uses the existing 3D matrix interpolation and recomposition code
    which is just not really correct.
    
    We should split the interpolation cases for 2D and 3D matrices in a more
    radical way, and follow the whole CSS3 Transformation spec more closely.

 src/graphene-matrix.c | 266 +++++++++++++++++++++++++++++++++++---------------
 1 file changed, 188 insertions(+), 78 deletions(-)

commit 159a329ec3cfab3afc8982f6eb913cc630dc2508
Merge: d28e9d3 706568b
Author: Emmanuele Bassi <ebassi@gmail.com>
Date:   Thu Mar 31 08:34:57 2016 +0100

    Merge pull request #57 from cubicool/minimal-aligned-alloc
    
    Fix compile warnings when debug is disabled

commit 706568b0e6498066ca6cd1b9a8ee7e1e16f80155
Author: Jeremy Moles <cubicool@gmail.com>
Date:   Wed Mar 30 17:48:25 2016 -0400

    Fix compile warnings when debug is disabled
    
    Initialize the 'res' pointer to NULL.
    
    Borrow the 'errno' variable rather than using an 'err' variable local
    to graphene_aligned_alloc. There is some precedent for this, as the
    existing code also set 'errno = 0' before calling the corresponding
    alloc routine.

 src/graphene-alloc.c | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

commit d28e9d3a9a6feb2623861d4e69b610d6dfcdbbb4
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Mar 23 16:29:18 2016 +0000

    matrix: Load identity from a float array
    
    Instead of using an intermediate initializer.

 src/graphene-matrix.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

commit 891bc52cb2e349e34dc48d9f44c4ad25de284438
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Mar 23 16:08:08 2016 +0000

    rect: Add zero() constant rectangle
    
    Similar to the zero() points and sizes, this allows us to initialize
    rectangles without having to call graphene_rect_init(), memset(), or
    use temporary variable declarations.

 doc/graphene-sections.txt |  1 +
 src/graphene-rect.c       | 18 ++++++++++++++++++
 src/graphene-rect.h       |  3 +++
 3 files changed, 22 insertions(+)

commit 36b2a10db7b0bd691f2c83bee7fd10ae9dbcdbba
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Mar 16 16:44:29 2016 +0000

    build: Clean up autogen
    
    Use `set -x` to trace the result of various checks when setting up the
    build environment.

 autogen.sh | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

commit 997f3da4d3e5b63c963e6125e7b648f594d1e333
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Tue Mar 8 14:30:46 2016 +0000

    simd4x4f: Remove intermediate variables
    
    We can pass the address of the row vertices when multiplying two
    matrices together.

 src/graphene-simd4x4f.h | 17 ++++++-----------
 1 file changed, 6 insertions(+), 11 deletions(-)

commit 97942778494424c3e87fea50cb675b302fd08b92
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Tue Mar 8 12:32:05 2016 +0000

    docs: Fix references for GLib/GObject symbols
    
    We need to tell gtk-doc where the installed docs are, in order for it to
    fix all the external references.

 doc/Makefile.am | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

commit 694661984970569749a8fcd894b607a459d142b8
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Tue Mar 8 12:14:35 2016 +0000

    docs: Make the order of operands explicit
    
    For non-commutative operators on vectors the order is important.
    
    Fixes #54

 src/graphene-vectors.c | 24 +++++++++++++++++-------
 1 file changed, 17 insertions(+), 7 deletions(-)

commit 73eb1d0b23ad7765700a379d7098ce857a360a17
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Feb 10 16:15:28 2016 +0000

    Document restriction for graphene_triangle_get_barycoords()
    
    We require that the point is coplanar to the triangle.
    
    If we change implementation, we may lift the restriction, but for the
    time being better be explicit.
    
    Closes #56

 src/graphene-triangle.c | 3 +++
 1 file changed, 3 insertions(+)

commit be145c16b312cea45bb8fcfe4ab0e7cfd1f04f5f
Merge: 89a8254 ac17167
Author: Emmanuele Bassi <ebassi@gmail.com>
Date:   Wed Feb 10 10:30:40 2016 +0100

    Merge pull request #53 from swilmet/wip/improve-docs
    
    docs: improve doc of graphene_sphere_translate()

commit 89a82547445048494e825671cc263d9fa9126782
Merge: 770682c e40294f
Author: Emmanuele Bassi <ebassi@gmail.com>
Date:   Wed Feb 10 10:30:12 2016 +0100

    Merge pull request #52 from swilmet/wip/triangle-unit-test
    
    tests: add unit test for graphene_triangle_get_area()

commit ac17167221d8bc13cbd98aa011c6607a0ce8666f
Author: Sébastien Wilmet <sebastien.wilmet@uclouvain.be>
Date:   Wed Feb 10 10:22:17 2016 +0100

    docs: improve doc of graphene_sphere_translate()
    
    I know what is a translation, but it was not clear to me whether @point
    referred to the new center coordinates, or the delta. It turns out that
    it's the delta, as expected for a translation, but it's better to
    explain it in the docs.

 src/graphene-sphere.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

commit e40294f42a0004896aebd9423da0d4ef8847ad6e
Author: Sébastien Wilmet <sebastien.wilmet@uclouvain.be>
Date:   Tue Jan 12 15:57:35 2016 +0100

    tests: add unit test for graphene_triangle_get_area()
    
    The function always returns a positive area. Signed areas can be useful
    for some computations in computer graphics, but it is not present in
    graphene.

 src/tests/triangle.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

commit 770682c884a2ffc9dbbbc7b35de13e75812d824c
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Fri Jan 29 15:32:24 2016 +0100

    matrix: Add checks for invertible matrices
    
    We should propagate error states for non-invertible matrices from the
    SIMD implementation to the public wrapper type.

 src/graphene-matrix.c | 33 ++++++++++++++++++++++++---------
 src/graphene-matrix.h |  2 +-
 2 files changed, 25 insertions(+), 10 deletions(-)

commit 94c2d2d814eb215d43b0baa6f69ec44bb396fab0
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Fri Jan 29 15:27:08 2016 +0100

    simd: Check if the matrix is invertible
    
    We should check if the determinant is not zero before trying to
    invert the matrix.
    
    This commit changes the return value of the inverse() operator,
    but the ABI stability is preserved.

 src/graphene-simd4x4f.h | 27 ++++++++++++++++++---------
 1 file changed, 18 insertions(+), 9 deletions(-)

commit 9744fa81285ea9d52c88f5b50b3649267474a08d
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Jan 27 11:32:07 2016 +0000

    euler: Store angles in radians
    
    Instead of converting internally at the point of use, we should store
    the rotation angles in radians, and only transform to and from degrees
    when interfacing with the public API.
    
    Closes #32

 src/graphene-euler.c | 63 +++++++++++++++++++++++++++++++++++-----------------
 1 file changed, 43 insertions(+), 20 deletions(-)

commit 92081bdd963128e6405f3c4e092f631daf12085b
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Jan 27 11:03:30 2016 +0000

    Add radians variants for quaternions
    
    It's been requested, and it can help to avoid round-tripping between
    radians and degrees.
    
    Closes #32

 doc/graphene-sections.txt |   2 +
 src/graphene-quaternion.c | 100 +++++++++++++++++++++++++++++++++-------------
 src/graphene-quaternion.h |  10 +++++
 3 files changed, 85 insertions(+), 27 deletions(-)

commit 284043513602183e6007524d6e1ed7a788fa5f8f
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Jan 27 10:46:57 2016 +0000

    docs: Clarify the modelview required when unprojecting
    
    When unprojecting a point, Graphene expects the inverse of the modelview
    used to project it.
    
    We cannot really change the implementation to invert the modelview
    ourselves without breaking existing code. There's also the common
    behaviour of canvas libraries to cache the inverse of the modelview to
    avoid incurring into additional costs, which means we'd be working
    against our callers.
    
    Fixes issue #50

 src/graphene-matrix.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

commit 7673ae2a4bf2d777d9063b587f2751efd555630c
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Tue Jan 26 18:27:06 2016 +0000

    rect: Remove unused variables
    
    And thus silence two compiler warnings.

 src/graphene-rect.c | 1 -
 1 file changed, 1 deletion(-)

commit 2b2e23d367cc95ffd1c8b3461543bb6125bc44c3
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Mon Jan 18 20:16:24 2016 +0000

    docs: Clarify the meaning of the triangle's midpoint
    
    Link to Wikipedia, because all human knowledge should be up for debate.

 src/graphene-triangle.c | 3 +++
 1 file changed, 3 insertions(+)

commit 9df082ddba2d1deb9971cc9b49e4dd149dec4e76
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Mon Jan 18 19:23:29 2016 +0000

    rect: Fix the implementation of union()
    
    We need to take into consideration the origin of each rectangle when
    comparing sizes.
    
    Fixes #49.

 src/graphene-rect.c | 4 ++--
 src/tests/rect.c    | 9 +++++++--
 2 files changed, 9 insertions(+), 4 deletions(-)

commit ec5bf9ba38f5e8a0433bbe7c4f609560b38f9152
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Mon Jan 18 19:22:34 2016 +0000

    rect: Use union() to implement expand()
    
    We union a rectangle with a degenerate rectangle of size 0 and origin in
    the given point.

 src/graphene-rect.c | 10 +++-------
 1 file changed, 3 insertions(+), 7 deletions(-)

commit 979493eb0f61fabb3dee725956005cd6057c39aa
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Thu Jan 14 12:52:00 2016 +0000

    docs: Add examples of GObject integration
    
    This should clarify how to use Graphene types with GObject.

 src/graphene-gobject.c | 33 +++++++++++++++++++++++++++++++--
 1 file changed, 31 insertions(+), 2 deletions(-)

commit 788a305d45be54dd02d3eb0199ffbb8e9aac2f93
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Thu Jan 14 12:35:40 2016 +0000

    docs: Add some images to the graphene_rect_t reference

 doc/Makefile.am                |   3 +
 doc/rectangle-intersection.png | Bin 0 -> 2174 bytes
 doc/rectangle-intersection.svg |  82 +++++++++++++++++++
 doc/rectangle-union.png        | Bin 0 -> 2668 bytes
 doc/rectangle-union.svg        |  79 ++++++++++++++++++
 doc/rectangle.png              | Bin 0 -> 12713 bytes
 doc/rectangle.svg              | 182 +++++++++++++++++++++++++++++++++++++++++
 src/graphene-rect.c            |  10 +++
 8 files changed, 356 insertions(+)

commit 22fc4b600718408f57ebc3ea2cd54634cccce4ab
Merge: 3b97374 79e43f1
Author: Emmanuele Bassi <ebassi@gmail.com>
Date:   Tue Jan 12 13:10:42 2016 +0000

    Merge pull request #47 from swilmet/wip/barycoords
    
    Add unit tests for graphene_triangle_get_barycoords()

commit 3b97374aa127ce23988bb06215223681c385f1bd
Merge: d5decac e095efb
Author: Emmanuele Bassi <ebassi@gmail.com>
Date:   Tue Jan 12 13:09:44 2016 +0000

    Merge pull request #48 from swilmet/wip/docs-fixes
    
    Some docs fixes and improvements

commit d5decac54d24e97e7880d33c13977f84a27a8f37
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Tue Jan 12 13:08:01 2016 +0000

    docs: Add an image to explain barycentric coordinates
    
    The current explanation is ambiguous as to what the 'u' and 'v'
    coordinates map; we should be more explicit, and an image gets the point
    across much more easily.

 doc/Makefile.am              |   3 +-
 doc/triangle-barycentric.png | Bin 0 -> 19080 bytes
 doc/triangle-barycentric.svg | 223 +++++++++++++++++++++++++++++++++++++++++++
 src/graphene-triangle.c      |   6 ++
 4 files changed, 231 insertions(+), 1 deletion(-)

commit e095efbb21adbff12b5de02a96e489d669c18c5d
Author: Sébastien Wilmet <sebastien.wilmet@uclouvain.be>
Date:   Tue Jan 12 13:53:46 2016 +0100

    docs: add #include information

 doc/graphene-sections.txt | 3 +++
 1 file changed, 3 insertions(+)

commit 4420cdd6b55258eff8d4b2491594dfc5be2da47c
Author: Sébastien Wilmet <sebastien.wilmet@uclouvain.be>
Date:   Tue Jan 12 13:37:05 2016 +0100

    docs: fix explanation about CamelCase types
    
    When reading the docs, I thought that the CamelCase types were also
    available in C. But it is not the case.
    
    Change also "camel case" -> "CamelCase", for a better understanding.

 src/graphene-gobject.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

commit 79e43f1a21239ca989a8fa7d77d5b8731402b36c
Author: Sébastien Wilmet <sebastien.wilmet@uclouvain.be>
Date:   Tue Jan 12 10:39:10 2016 +0100

    tests: Add unit test for graphene_triangle_get_barycoords()
    
    u is on the ac axis and v is on the ab axis. Is that normal?

 src/tests/triangle.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 61 insertions(+)

commit 0925d8c89f4fbfe9d93eabfe064b8120207dca47
Author: Sébastien Wilmet <sebastien.wilmet@uclouvain.be>
Date:   Tue Jan 12 10:48:51 2016 +0100

    tests: Add graphene_assert_fuzzy_vec2_equal() macro

 src/tests/graphene-test-compat.h | 13 +++++++++++++
 1 file changed, 13 insertions(+)

commit e1cdf36c1a3dd945fb39413c0518ad41d1c7a908
Author: Sébastien Wilmet <sebastien.wilmet@uclouvain.be>
Date:   Tue Jan 5 14:18:18 2016 +0100

    docs: another batch of trivial typo fixes

 src/graphene-sphere.c  | 2 +-
 src/graphene-vectors.c | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

commit a4c2e97bd04c3716719560d4e31deffb7a234fc7
Merge: e0c4e4c b8481cd
Author: Emmanuele Bassi <ebassi@gmail.com>
Date:   Tue Jan 5 09:16:30 2016 +0000

    Merge pull request #44 from swilmet/wip/swilmet/docs-fixes
    
    docs: a few trivial typo fixes

commit b8481cd98be95ffbbdbb6e324e040b8a19028ba1
Author: Sébastien Wilmet <sebastien.wilmet@uclouvain.be>
Date:   Mon Jan 4 16:37:44 2016 +0100

    docs: a few trivial typo fixes

 src/graphene-rect.c     | 2 +-
 src/graphene-simd4f.c   | 4 ++--
 src/graphene-simd4f.h   | 4 ++--
 src/graphene-simd4x4f.h | 2 +-
 4 files changed, 6 insertions(+), 6 deletions(-)

commit e0c4e4c5dbc2eeaa45d10d65226954982fe080b3
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Mon Nov 9 11:50:25 2015 +0000

    Revert "matrix: Reorder point unprojection"
    
    This reverts commit 1c46f0b8521645b52427311687d1c30b565789f0.
    
    The change breaks existing users.

 src/graphene-matrix.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

commit 9ea181f51a3f6e38e1f31bfe376c5292ca90b130
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Sun Nov 8 13:06:07 2015 +0000

    point3d: Add viewport normalization utility function
    
    The newly added function is useful to normalize a 3D point to the unit
    coordinate space [ -1, 1 ] within a viewport.

 doc/graphene-sections.txt |  1 +
 src/graphene-point3d.c    | 36 ++++++++++++++++++++++++++++++++++++
 src/graphene-point3d.h    |  7 +++++++
 src/tests/point3d.c       | 21 +++++++++++++++++++++
 4 files changed, 65 insertions(+)

commit 1c46f0b8521645b52427311687d1c30b565789f0
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Sun Nov 8 12:10:09 2015 +0000

    matrix: Reorder point unprojection
    
    Let's follow the same approach as gluUnProject(): first, multiply the
    modelview and the projection matrices; then invert the result.
    
    We should also avoid a division by zero.

 src/graphene-matrix.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

commit 9b90b480f8fa0caf7886a8b3d72dfd19d27ddcce
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Sat Nov 7 16:55:27 2015 +0000

    docs: Fix typo in type name

 src/graphene-matrix.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 445680d853be38f5c50cd664ba6a924d86da2063
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Sat Nov 7 16:49:38 2015 +0000

    docs: Use 'plain' language for non-code examples
    
    This way gtk-doc won't try to do things like syntax highlighting.

 src/graphene-matrix.c |  6 +++---
 src/graphene-simd4f.c | 24 ++++++++++++------------
 2 files changed, 15 insertions(+), 15 deletions(-)

commit 91487bc293c3e4a0ab3c69edfadd35d2fc697ba6
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Thu Nov 5 19:00:06 2015 +0000

    tests: Re-enable matrix tests under GCC
    
    Like we re-enabled the frustum tests, we should try and see if the GCC
    in TravisCI is back to working.

 src/tests/matrix.c | 12 ------------
 1 file changed, 12 deletions(-)

commit b2f579650a419025acf8094791aaa10087f8a65b
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Thu Nov 5 18:39:09 2015 +0000

    tests: Re-enable frustum units under GCC
    
    We fixed a series of issues with the dot3() operator, which is used when
    computing the distance from a plane; this should improve the behaviour
    of the graphene_frustum_contains_point() on older versions of GCC.

 src/tests/frustum.c | 9 ---------
 1 file changed, 9 deletions(-)

commit 48e8589dc788aa4a66e9af3cad322bbd521a58e2
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Thu Nov 5 11:51:20 2015 +0000

    quad: Vectorise min/max look up
    
    Instead of iterating and branching, we can vectorise the operation of
    looking for the minimum and maximum values in the points array.

 src/graphene-quad.c | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

commit e80acf94229236fd7b78d37d73cf27aa2fde138d
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Thu Nov 5 11:37:41 2015 +0000

    quaternion: Precompute factors
    
    We reuse the same factors in all euler ordering cases, so we should
    extract them from the switch branches.

 src/graphene-quaternion.c | 75 ++++++++++++++++++++++++++---------------------
 1 file changed, 42 insertions(+), 33 deletions(-)

commit 34f776f27e0ee1545a386ec5d7caa30a5d3102c6
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Thu Nov 5 11:36:45 2015 +0000

    quaternion: Drop some indirection
    
    Set the row vectors of the result matrix, instead of using additional
    vector variables.

 src/graphene-quaternion.c | 30 +++++++++++++-----------------
 1 file changed, 13 insertions(+), 17 deletions(-)

commit 823d9b169f689ce0406de579269b241c3aec194f
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Nov 4 19:54:10 2015 +0000

    euler: Avoid unnecessary indirection
    
    We're computing the components of the result matrix using a vec4, and
    then taking those vec4 variables to initialize a matrix — but the intent
    is to store the values as SIMD vectors. We can side step the whole
    thing, and directly initialize the row vectors of the result matrix.

 src/graphene-euler.c | 52 +++++++++++++++++++++++++---------------------------
 1 file changed, 25 insertions(+), 27 deletions(-)

commit aa9dd380b5369417a19ac14be0fcd2dfd0fb7d82
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Oct 14 11:37:29 2015 +0100

    simd4f: Optimize neg() on GCC
    
    Instead of doing four single lane reads, use a splat and a mul.

 src/graphene-simd4f.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

commit 51748e1bb3d7697317a3f74e7b6f9a7a9a0b84c8
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Oct 14 11:36:21 2015 +0100

    simd4f: Zero-safe GCC reciprocal
    
    A bit more expensive, since it replaces a single splat and mul with four
    single lane reads, but at least it behaves consistently, and avoids NaN.

 src/graphene-simd4f.h | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

commit cb8409b09e1dcf5cf726029cea20a8a3bad78bf6
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Oct 14 11:35:41 2015 +0100

    Fix indentation
    
    Keep operands at the right indentation level.

 src/graphene-simd4f.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit cedeae5965d5b8cdcb18d90cb4a42e5fc46a7627
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Oct 14 11:22:58 2015 +0100

    Include emmintrin.h from graphene-config.h
    
    We use __m128i for both the GCC and the MSVC paths, but only the MSVC
    one explicitly includes emmintrin.h — the GCC path relies on other
    headers.
    
    Let's be explicit and consistent everywhere.

 configure.ac          | 1 +
 src/graphene-simd4f.h | 2 --
 2 files changed, 1 insertion(+), 2 deletions(-)

commit f1126ac0a705d0221333ab82ec96c6b7c1462dec
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Oct 14 01:09:39 2015 +0100

    simd4f: Clean up the sum() implementation
    
    Do all the splats upfront, and then sum them, instead of using
    intermediate results.

 src/graphene-simd4f.h | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

commit 08219582d1ca0e6dee9fa4ba8008d8c6cda48f99
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Oct 14 01:09:00 2015 +0100

    Fix indentation of SSE rsqrt() on MSVC
    
    Too many spaces.

 src/graphene-simd4f.h | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

commit c1229a2add6e7096839eba3845db642525ad4d56
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Oct 14 00:49:38 2015 +0100

    simd4f: Define union type once for the SSE path
    
    Both the GCC and the MSVC branches define the same union type for single
    lane reads; we can define it once in the common path, instead.

 src/graphene-simd4f.h | 19 +++++++------------
 1 file changed, 7 insertions(+), 12 deletions(-)

commit ee76f5389e8b9aba2ccf435a41a2f22b955ff457
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Oct 14 00:48:59 2015 +0100

    Add a couple of explanatory comments
    
    Should improve the readability of the header.

 src/graphene-simd4f.h | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

commit 99a8dc93dce99db67d298a378f975552efa9d04b
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Tue Oct 13 13:28:43 2015 +0100

    rect: Add get_vertices() method
    
    Similar to graphene_box_get_vertices(), it returns the four vertices of
    a graphene_rect_t as an array of graphene_vec2_t.

 doc/graphene-sections.txt |  1 +
 src/graphene-rect.c       | 25 +++++++++++++++++++++++++
 src/graphene-rect.h       |  4 ++++
 3 files changed, 30 insertions(+)

commit 03ea593a181a981aeeea91c9913f1e598c7fcc59
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Tue Oct 13 11:51:43 2015 +0100

    box: Inline more implementations
    
    Instead of using graphene_vec3_t wrappers, let's use graphene_simd4f_t
    methods directly, as they are inlined and we don't pay the cost of a
    function call in most cases.

 src/graphene-box.c | 77 +++++++++++++++++++++++++++++-------------------------
 1 file changed, 42 insertions(+), 35 deletions(-)

commit 744c34485198fc1e51002da5617a75aff550ea63
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Oct 7 23:08:50 2015 +0100

    simd4f: Protect against division by zero in scalar reciprocal
    
    Like we do for rsqrt() and div().

 src/graphene-simd4f.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

commit 74e9e7bd6e8387f870aa7a37f886316d67032417
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Oct 7 17:49:31 2015 +0100

    matrix: Drop some intermediate variables

 src/graphene-matrix.c | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)

commit 644b7d29194e86e974f4b902b109e7e64c78cc83
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Mon Oct 5 18:01:20 2015 +0100

    rect: Remove check in normalize_in_place
    
    We are already doing a check on each direction of the rectangle's size,
    so there's really no point in doing a likely() check beforehand.

 src/graphene-rect.c | 3 ---
 1 file changed, 3 deletions(-)

commit e9c58af84fbd88bdf0603e44b4c08f80c1817240
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Mon Oct 5 17:59:16 2015 +0100

    build: Remove -Winline from SSE2_CFLAGS
    
    It's pretty pointless to have -Winline there, since we use inline all
    over the place. We should either always warn because of missed inlining,
    or never do that.

 configure.ac | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 18e48701f084171b04fa824f12eec9c1ac7f143b
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Mon Oct 5 16:36:03 2015 +0100

    docs: Add explanations for SIMD operators
    
    Some functions have explanations on the operations they perform that
    include an example of the resulting vector; we should add more of
    those.

 src/graphene-simd4f.c | 67 +++++++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 60 insertions(+), 7 deletions(-)

commit 11a0d633bbae6c5910752c4a3eb9d7a287003696
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Mon Oct 5 16:20:43 2015 +0100

    bench: Include stdlib.h for malloc/free
    
    Otherwise the compiler will warn for the implicit declarations.

 src/bench/graphene-bench-utils.c | 1 +
 1 file changed, 1 insertion(+)

commit 85823e0d996b7f2d7aec5b8c1ddff15b60c114f3
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Mon Oct 5 16:19:56 2015 +0100

    simd: Fix the definition of dot3_scalar() in scalar context
    
    Cut and paste idiocy.

 src/graphene-simd4f.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 55484125158e0bc9e11c090f155b4840bf75cb71
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Mon Oct 5 16:17:47 2015 +0100

    simd4f: Fix an aliasing issue
    
    The dot3_scalar() operator in the scalar code path was aliased to
    dot3().

 src/graphene-simd4f.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 9674324e982d0d4a3c013f3f6dc604bb431bda35
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Mon Oct 5 15:50:22 2015 +0100

    Remove sse4.1 from GRAPHENE_SIMD variable
    
    We coalesce the SSE 4.1 support with SSE2, if that's available — i.e.
    the SSE 4.1 support is an extension on top of SSE2.

 configure.ac | 1 -
 1 file changed, 1 deletion(-)

commit 3eb29fbea4f5dc00cad9bc27628b5b2f13890277
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Mon Oct 5 15:30:07 2015 +0100

    Allow include-time SIMD detection
    
    The graphene-config.h header should allow determining the SIMD
    implementation. This way, projects could conceivably just use the SIMD
    API inside their own vector and matrix types.
    
    The capabiltities are still detected at configure time, because the rest
    of the API depends on a single SIMD implementation.

 configure.ac | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

commit 6e5248a7d52506ffde29fc81e37936f9847c6acc
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Mon Oct 5 15:25:00 2015 +0100

    simd4f: Optimise cross3 on ARM NEON
    
    Instead of using a ton of single lane reads to unroll the cross vectors,
    we can use 2-lanes vectors and combinations to compute the cross product
    and then reassemble it in the correct order.

 src/graphene-simd4f.h | 28 +++++++++++-----------------
 1 file changed, 11 insertions(+), 17 deletions(-)

commit 733c9a020198ccf70e935351a914808c10dfbd9f
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Mon Oct 5 15:23:27 2015 +0100

    simd4f: Add a float32x2_t typedef on NEON
    
    The NEON instructions set has a 2-lanes SIMD type that we already use;
    let's typedef it so it's immediately recognisable.

 doc/graphene-sections.txt |  1 +
 src/graphene-simd4f.h     | 13 +++++++------
 2 files changed, 8 insertions(+), 6 deletions(-)

commit ab5b1a69df4c35552d48e5775a9cfd182bfa5cae
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Mon Oct 5 13:50:58 2015 +0100

    simd4f: Simplify rsqrt on NEON
    
    Instead of flattening the implementation, let's use a separate macro for
    the estimate iteration. This will allow us to tweak the implementation
    in the future without losing track of the number of iterations.

 src/graphene-simd4f.h | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

commit f323bac803637074b1ed98029cad1d83f004f8bb
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Sun Oct 4 17:28:51 2015 +0100

    bench: Compute a better average time per round
    
    We're just doing a simple "total elapsed time / number of rounds", but
    we should do a little bit better than that, by discarding the maximum
    and minimum timing between all rounds.

 src/bench/graphene-bench-utils.c | 92 +++++++++++++++++++++++++++++-----------
 1 file changed, 67 insertions(+), 25 deletions(-)

commit eb2d3efe56f77de1514abf2ecc6df8c0598d30c2
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Sat Oct 3 12:47:27 2015 +0100

    Use the scalar dot3 whenver possible
    
    Instead of doing a dot3() followed by a single lane read.

 src/graphene-matrix.c  | 6 +++---
 src/graphene-point3d.c | 5 ++---
 src/graphene-vectors.c | 4 ++--
 3 files changed, 7 insertions(+), 8 deletions(-)

commit 3399b51a10886476539e713d94e369d9b3612f9e
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Sat Oct 3 12:43:00 2015 +0100

    simd4f: Add scalar version of dot3()
    
    We can optimize dot3() operations requiring a scalar on certain
    architectures, to avoid computing the dot product and then do a
    single lane read.

 doc/graphene-sections.txt |  1 +
 src/graphene-simd4f.c     | 28 ++++++++++++++++++++++++++--
 src/graphene-simd4f.h     | 36 +++++++++++++++++++++++++++++++++++-
 3 files changed, 62 insertions(+), 3 deletions(-)

commit b050bca269829d7a0440168ef451b125b76ccced
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Fri Oct 2 14:35:39 2015 +0100

    bench: Fix units for time formatting

 src/bench/graphene-bench-utils.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

commit fdc5767e55141566468c7aa1233d28db7388e31f
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Sep 30 18:11:51 2015 +0100

    simd: Be more graceful when handling divisions
    
    Check if the denominator is 0, before attempting a division. This should
    reduce the cases where we get a NaN when we really expect a 0.

 src/graphene-simd4f.c | 16 ++++++++--------
 src/graphene-simd4f.h | 15 ++++++++++-----
 2 files changed, 18 insertions(+), 13 deletions(-)

commit c167abfada9761e91c4240bbf31032b772081aa9
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Sep 30 17:49:27 2015 +0100

    build: Fix typo in the dependencies of the asm rule

 src/Makefile.am | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 9bce774e295835578d283df8d9fee86880f83006
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Sep 30 17:35:47 2015 +0100

    simd: Fill all channels of the dot3 results / pt.2
    
    The GCC vector implementation of the dot3 product operator should
    conform to all the other implementations, and set all the channels.
    
    This is the equivalent of 2d8e877d40e3012f6430591eb5a8e8b564e19f63
    which fixed the scalar implementation.

 src/graphene-simd4f.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 845f3745181ab72ac7fe4819cecd89531274508a
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Sep 30 17:30:01 2015 +0100

    simd: Use the appropriate sqrt function
    
    We're dealing with single precision floating point values, so we should
    use sqrtf() to avoid conversions to double precision floating point.

 src/graphene-simd4f.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

commit 2d8e877d40e3012f6430591eb5a8e8b564e19f63
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Sep 30 17:26:25 2015 +0100

    simd: Fill all channels of the dot3 results
    
    The scalar implementation of the dot3 product operator should conform to
    all the other implementations, and set all the channels.
    
    This fixes test suite failure we get in the matrix look_at() method:
    
      Graphene:ERROR:matrix.c:264:matrix_look_at:
      [0][3]: __m1[__idx] == __m2[__idx] (+/- 0.0001f): (-nan == 0)
    
    Because the SIMD normalize3() operator will try to compute the inverse
    square root of 0 in the .w channel, resulting in a NaN.

 src/graphene-simd4f.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 885579cd474d6673f0670e248aaa40985d64e667
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Sep 30 14:05:26 2015 +0100

    simd4f: Optimise dup_3f() on NEON
    
    Avoids multiple coercions and single line reads by using offsets inside
    the array.

 src/graphene-simd4f.h | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

commit cd36110e64a6551980434d422f460d5ff3352168
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Sep 30 13:49:07 2015 +0100

    simd4f: Optimize dot3 operator for SSE4.1
    
    If we have access to SSE 4.1, we can use the `_mm_dp_ps()` intrinsic to
    speed up the dot3() product operator.

 src/graphene-simd4f.h | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

commit 9e6ca0196d4488d33886c745d31a7e7466d8b1d3
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Sep 30 13:42:27 2015 +0100

    simd4f: Optimize dot3 product
    
    We can implement the dot3 operator depending on the SIMD implementation
    in use, instead of having a generic one, similarly to how we implement
    the cross3 operator.

 src/graphene-simd4f.c | 29 ++++++++++++++++++++
 src/graphene-simd4f.h | 74 ++++++++++++++++++++++++++++++++++-----------------
 2 files changed, 78 insertions(+), 25 deletions(-)

commit ff58291e3e9ab9a221486e42c500c42e59b7c064
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Sep 30 12:44:48 2015 +0100

    Detect SSE 4.1 intrinsics
    
    If we have SSE2 intrinsics then we should also check for the 4.1
    instruction set.

 configure.ac | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 49 insertions(+)

commit 491dabd886ec3f1540b7cfce069f8c0ef2a07ce6
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Sep 30 12:43:38 2015 +0100

    Do a better job when detecting SSE2 intrinsics
    
    Instead of directly including the intrinsics headers, we can do a check
    on specific macros and error out more gracefully.

 configure.ac | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

commit 82869ccf90f39a117be2fb963ccd44f336f4191c
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Tue Sep 29 19:57:53 2015 +0100

    matrix: Optimise normalize()
    
    By computing the scalar inverse of the matrix.ww field we can avoid four
    costly SIMD divisions in favour of four cheap multiplications.

 src/graphene-matrix.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

commit 27f311ec34be652409b7acd0d65398f04b4d0d44
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Tue Sep 29 19:56:31 2015 +0100

    matrix: Inline transform_bounds()
    
    Use the SIMD vector and matrix API, instead of the public
    graphene_matrix_t one, for better inlining.
    
    We should also vectorise the min/max operations instead of using a loop
    with a bunch of conditionals.

 src/graphene-matrix.c | 64 ++++++++++++++++++++++++++++++++++++---------------
 1 file changed, 45 insertions(+), 19 deletions(-)

commit 7ddb110d097040e59633768a745954370eb0012f
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Tue Sep 29 19:55:45 2015 +0100

    matrix: Inline some more functions
    
    Use the SIMD vector and matrix types, which inline better.

 src/graphene-matrix.c | 30 ++++++++++++++++--------------
 1 file changed, 16 insertions(+), 14 deletions(-)

commit fdfef1a8b7740b14dd0fe75015eea3072d74f49d
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Tue Sep 29 19:53:42 2015 +0100

    simd: Add min_val/max_val operators
    
    We want to be able to get the minimum value in a SIMD vector, so that we
    can avoid a loop (rolled or unrolled).

 doc/graphene-sections.txt |  2 ++
 src/graphene-simd4f.h     | 44 ++++++++++++++++++++++++++++++++
 src/tests/simd.c          | 65 +++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 111 insertions(+)

commit e25c9b4426eb09c53c818be59bbba0afe3378a0b
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Thu Sep 24 09:35:39 2015 +0100

    tests/matrix: Follow coding style

 src/tests/matrix.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

commit d98e9011bcf451504689134ec087bf7f21a6cea7
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Sep 23 18:56:10 2015 +0100

    matrix: Inline more functions
    
    Instead of calling into public graphene_matrix_t and graphene_vec[234]_t
    API we can try and use graphene_simd4x4f_t and graphene_simd4f_t
    functions, which get inlined and avoid intra-library calls.

 src/graphene-matrix.c | 66 +++++++++++++++++++++++++--------------------------
 1 file changed, 32 insertions(+), 34 deletions(-)

commit 6ba1b807e862c244b82ba6f7cb1f47554676ac04
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Sep 23 18:44:39 2015 +0100

    build: Add a make target for inspecting assembly
    
    We want to be able to quickly check the assembly code generated by the C
    compiler, in order to inspect and quickly evaluate if we are regressing.

 .gitignore      | 1 +
 src/Makefile.am | 9 +++++++++
 2 files changed, 10 insertions(+)

commit e3398f4bc1e0a50af51ba6924eaf827e793e91bb
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Tue Sep 22 18:18:09 2015 +0100

    point3d: Do a compiler check for the SIMD read
    
    Apparently, Clang ≤ 3.5 has issues when doing a vectorised partial read
    from a SIMD type into a pointer to a structure.

 src/graphene-point3d.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

commit 9f812c6f3c0c78272fb20ca3736020d18136f59c
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Tue Sep 22 18:08:37 2015 +0100

    point3d: Reintroduce the optimized read
    
    Instead of the per-channel read, use a vectorised partial read from the
    SIMD into the point3d structure.
    
    This has been confirmed to work on Clang through the test suite.

 src/graphene-point3d.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

commit e957c7b678271bb3bcbdd6e97a37773cdfee5136
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Tue Sep 22 18:02:55 2015 +0100

    tests/simd: Do vectorised reads into structures
    
    Check if we can count on compiler assistance to do a vectorised read
    from a SIMD into a structure with the corresponding number of floating
    point members.

 src/tests/simd.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

commit d3ee76c2c4ae1fb5dd27ff5f9009b11961aa5929
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Tue Sep 22 17:54:10 2015 +0100

    tests/simd: Add units for dup_[234]f
    
    We want to check that we can do a full or partial read from a SIMD
    vector into an array of floats.

 src/tests/simd.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)

commit db10ba37b5dca09de2636aa2c16c489106c3e0b3
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Tue Sep 22 17:48:18 2015 +0100

    Undo optimized reads
    
    Apparently, not all releases of Clang can do a partial memcpy from an
    SSE SIMD vector into a structure laid out as a float array.
    
    This warrants a bit more investigations, because it may mean that the
    graphene_simd4f_dup_[23] API are broken on certain versions of Clang.

 src/graphene-point.c   | 3 ++-
 src/graphene-point3d.c | 4 +++-
 2 files changed, 5 insertions(+), 2 deletions(-)

commit 44c900ea369bb7787ada443174eb7ed76f42dce1
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Tue Sep 22 17:40:46 2015 +0100

    point: Use the address of the struct
    
    Similarly to what we do when convering a SIMD to a 3D point, use the
    address of the struct instead of the address of the first element of the
    struct.

 src/graphene-point.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit b70ef4a7febb149956aa5ef9b69613511b455946
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Tue Sep 22 17:38:35 2015 +0100

    point3d: Use the address of the struct
    
    When converting from a SIMD vector to a 3D point, use the address of the
    structure instead of the address of the first element of the structure.
    
    This should fix compilation with Clang.

 src/graphene-point3d.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 15caf83deccba0f1fbf0724baf63c0cba1f44378
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Tue Sep 22 17:23:47 2015 +0100

    rect: Add expand() method
    
    Based on a similar method in graphene_box_t, which expands the area of
    the rectangle to include a given point.

 doc/graphene-sections.txt |  1 +
 src/graphene-rect.c       | 28 ++++++++++++++++++++++++++++
 src/graphene-rect.h       |  5 +++++
 src/tests/rect.c          | 33 +++++++++++++++++++++++++++++++++
 4 files changed, 67 insertions(+)

commit 78d7ca97dd67428e5b4694ba590226461928dc6c
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Tue Sep 22 15:17:36 2015 +0100

    point: Add point/vec2 conversion functions
    
    Similar to what graphene_point3d_t exposes for vec3.

 doc/graphene-sections.txt |  2 ++
 src/graphene-point.c      | 40 ++++++++++++++++++++++++++++++++++++++++
 src/graphene-point.h      |  9 ++++++++-
 3 files changed, 50 insertions(+), 1 deletion(-)

commit 43de32966069c6ad8ffe1f3a77cb825752bed551
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Mon Sep 21 18:24:05 2015 +0100

    Rename line segment header
    
    Since it's a private header, it should have 'private' in the file name,
    like other private headers.

 doc/Makefile.am                     |  2 +-
 src/Makefile.am                     |  2 +-
 src/graphene-line-segment-private.h | 62 +++++++++++++++++++++++++++++++++++++
 src/graphene-line-segment.h         | 62 -------------------------------------
 src/graphene-quad.c                 |  4 ++-
 5 files changed, 67 insertions(+), 65 deletions(-)

commit b2b8b10587d02f7e9e2a708610b40dce47f692dd
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Mon Sep 21 18:10:30 2015 +0100

    Use aligned allocations for all vector-based types
    
    All complex types embedding a vector should use the aligned allocator,
    as we want to ensure that they are allocated correctly.

 src/graphene-euler.c   | 5 +++--
 src/graphene-frustum.c | 4 ++--
 src/graphene-plane.c   | 6 ++++--
 src/graphene-sphere.c  | 5 +++--
 4 files changed, 12 insertions(+), 8 deletions(-)

commit 2e79b084fbeb951192d5bcdc2a340a34ab05292b
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Mon Sep 21 12:54:15 2015 +0100

    point3d: Optimize vec3 → point3d initializer
    
    We call this a fair amount; we can shave some time by avoiding the
    single channel reads in favour of a single memcpy.

 src/graphene-point3d.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

commit 16c54d11103b97251088cec13f3e0a272f3ad09f
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Mon Sep 21 12:49:34 2015 +0100

    box: Use the appropriate initializer
    
    We want to turn a vec3 into a point3d, and graphene_point3d_t provides
    us with a convenient functiont that does precisely that.

 src/graphene-box.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

commit 1bf3638026289a255ea3731c36c913daf8eaa17b
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Mon Sep 21 12:28:26 2015 +0100

    Move graphene_size_t to its own header
    
    Instead of hijacking the graphene-point.h one.

 src/Makefile.am      |   1 +
 src/graphene-point.h |  68 ---------------------------------
 src/graphene-rect.h  |   1 +
 src/graphene-size.c  |   2 +-
 src/graphene-size.h  | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++
 src/graphene.h       |   1 +
 6 files changed, 109 insertions(+), 69 deletions(-)

commit e449d7c3dac628902da2be142fd0499a41a2a83b
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Mon Sep 21 11:02:26 2015 +0100

    build: Sort SIMD implementations correctly
    
    We want the used SIMD implementation to be the first in the list,
    for convenience; otherwise, the 'scalar' fallback implementation will
    always appear first.

 configure.ac | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

commit 7b9a7c493a1f0c9f98003d4de3da999019fea53f
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Mon Sep 21 10:58:11 2015 +0100

    build: Generate pkg-config files at configure time
    
    Instead of ad hoc rules inside the automake template, we can use the
    configuration script to generate the versioned pkg-config files for
    Graphene.

 configure.ac    |  5 ++++-
 src/Makefile.am | 10 +---------
 2 files changed, 5 insertions(+), 10 deletions(-)

commit 52d090de2faecabf9ea691ef005042bfcbc0e093
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Wed Sep 16 17:08:52 2015 +0100

    docs: Reword the description paragraph

 doc/graphene-docs.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 096c75d8cc0c7d46d470c2b8f610d955ae4b9e17
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Tue Sep 15 15:58:25 2015 +0100

    rect: Deprecate round_to_pixel()
    
    Let's make it abundantly clear that the correct method is round().

 src/graphene-rect.c | 2 ++
 src/graphene-rect.h | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)

commit fd3f6b7f4ae354aaaef3ed4c27ef554b15ef8243
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Tue Sep 15 15:53:56 2015 +0100

    rect: Provide a replacement for round_to_pixel()
    
    The round_to_pixel() method of graphene_rect_t is all kinds of
    problematic.
    
    First of all, it operates in place, whereas we want our mutators to
    operate on a separate object; then, it mentions "pixels" in the name,
    when it really has nothing to do with them; finally, it's not clear what
    it does, as it's not similar to any other operator we have inside the
    rectangle API.
    
    We should simply have a round() method that operates on a copy of the
    given rectangle, and is clearly tied to the concept of 'rounding' the
    values of the rectangle's description.

 doc/graphene-sections.txt |  1 +
 src/graphene-rect.c       | 34 ++++++++++++++++++++++++++++------
 src/graphene-rect.h       |  3 +++
 3 files changed, 32 insertions(+), 6 deletions(-)

commit d91df7715a99f1a2e466c3ce94675c5d85db5e23
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Tue Sep 15 15:27:34 2015 +0100

    rect: Add non-mutating versions of various methods
    
    The graphene_rect_t API was written before I settled down on the design
    tenet of providing functions that do not mutate the object.
    
    The normalize(), inset(), and offset() methods operate in place on the
    given rectangle; we should provide equivalent methods that do not mutate
    the rectangle they are given but, instead, store the result in a
    separate out argument.

 doc/graphene-sections.txt |   3 ++
 src/graphene-rect.c       | 118 ++++++++++++++++++++++++++++++++++++++--------
 src/graphene-rect.h       |  13 +++++
 3 files changed, 115 insertions(+), 19 deletions(-)

commit 8546f986758374ccd0c9857929c0b69a77fa4a72
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Mon Sep 14 15:43:39 2015 +0100

    matrix: Add ray transformation
    
    Like we allow transforming boxes, spheres, and other Graphene types
    using the given matrix.

 doc/graphene-sections.txt |  1 +
 src/graphene-matrix.c     | 29 +++++++++++++++++++++++++++++
 src/graphene-matrix.h     |  4 ++++
 src/tests/ray.c           | 22 ++++++++++++++++++++++
 4 files changed, 56 insertions(+)

commit 2562a709616e00a41ead2d4a98a207d648bda19e
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Sun Sep 13 13:10:32 2015 +0100

    tests: Add suite for graphene_ray_t

 src/tests/.gitignore  |   1 +
 src/tests/Makefile.am |   1 +
 src/tests/ray.c       | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 105 insertions(+)

commit 938ddaee3ce8ade6550c3fcb8b954d0cd3ef9c24
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Sat Sep 12 12:34:13 2015 +0100

    docs: Add graphene_ray_t
    
    Plumbing for getting the API reference.

 doc/graphene-docs.xml     |  5 +++++
 doc/graphene-sections.txt | 19 +++++++++++++++++++
 2 files changed, 24 insertions(+)

commit a31ca181eba0979ea7cb98fd4c392cd1887a0bae
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Sat Sep 12 12:33:37 2015 +0100

    Add GType goo for graphene_ray_t
    
    Function and macro for a new boxed type.

 src/graphene-gobject.c | 2 ++
 src/graphene-gobject.h | 5 +++++
 2 files changed, 7 insertions(+)

commit a0d8ab0a4d2c3be88bca2f7567dd41d4e9ca80d7
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Sat Sep 12 12:33:05 2015 +0100

    Add graphene_ray_t
    
    The beginnings of a simple type for ray casting.

 src/Makefile.am      |   2 +
 src/graphene-ray.c   | 352 +++++++++++++++++++++++++++++++++++++++++++++++++++
 src/graphene-ray.h   |  98 ++++++++++++++
 src/graphene-types.h |   1 +
 src/graphene.h       |   1 +
 5 files changed, 454 insertions(+)

commit 766df40602ca36d045d27bec719a386800603d67
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Sun Sep 13 12:24:55 2015 +0100

    point3d: Add distance() operator
    
    We have a distance() operator for the 2D point, but not for the 3D one.

 doc/graphene-sections.txt |  1 +
 src/graphene-point3d.c    | 35 +++++++++++++++++++++++++++++++++++
 src/graphene-point3d.h    |  4 ++++
 3 files changed, 40 insertions(+)

commit b6721de070f8e301a8265d7926940faaf6a30150
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Fri Sep 11 15:49:16 2015 +0100

    Add version macros for 1.4
    
    The new API cycle opens now.

 src/graphene-version-macros.h | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

commit c56c5d5caf536b475f11bdbc33b5930de5c02517
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Fri Sep 11 15:42:23 2015 +0100

    Post-branch version bump to 1.3.1

 configure.ac | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

commit 3caf3fc1fd1f257dab601ec683d15182dda3c57f
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Fri Sep 11 14:13:40 2015 +0100

    tests: Increase coverage of graphene_matrix_t
    
    Coverage stats:
    
                    Hits    Total   Coverage
        ------------------------------------
            Lines:  145       460     31.5 %
        Functions:   34        63     54.0 %
    
    Still a *long* way to go.

 src/tests/matrix.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

commit b139eebfffa4f7ab2ab1b60dd85923000ce9d0ff
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Fri Sep 11 14:02:33 2015 +0100

    tests: Increase converage of graphene_quaternion_t
    
    As measured by lcov:
    
                        Hit     Total   Coverage
        ----------------------------------------
            Lines:      163       187     87.2 %
        Functions:       20        20    100.0 %

 src/tests/quaternion.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 69 insertions(+)

commit fea554e6cc11a03d6273a8f495c1b95c6d4a7898
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Fri Sep 11 11:46:32 2015 +0100

    matrix: Use dot() operator
    
    We have a dot() operator for SIMD vectors, we should use it.

 src/graphene-matrix.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

commit a6a3c44120b616d01c01d56fa7106219bdebff41
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Fri Sep 11 11:44:51 2015 +0100

    matrix: Simplify interal rotate mutator
    
    The internal function that we use to rotate a matrix given an (angle,
    axis) tuple should be simplified:
    
      * the angle should be in radians, like most of our internal API
      * the axis vector should be constified

 src/graphene-matrix.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

commit 796d19b17ee044f2e018a629c0d97f00b9d4b5e4
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Thu Sep 10 16:48:58 2015 +0100

    docs: Drop repeated 'for the'

 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit ed8c26df919934da07979cd9e9ba2785bcad510c
Author: Emmanuele Bassi <ebassi@gnome.org>
Date:   Thu Sep 10 16:39:47 2015 +0100

    Post-release version bump to 1.2.11

 configure.ac | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)