[Bf-blender-cvs] [d79fa8dc4dc] master: Another optimization of tangent space calculation

Sergey Sharybin noreply at git.blender.org
Fri Aug 25 15:56:24 CEST 2017


Commit: d79fa8dc4dc28fc49dbdbecbd481bc21657f24c6
Author: Sergey Sharybin
Date:   Fri Aug 25 14:54:44 2017 +0200
Branches: master
https://developer.blender.org/rBd79fa8dc4dc28fc49dbdbecbd481bc21657f24c6

Another optimization of tangent space calculation

Don't use quick sort for small arrays, bubble sort works way faster for small
arrays due to cache coherency. This is what qsort() from libc is doing actually.
We can also experiment unrolling some extra small arrays, for example 3 and 4
element arrays.

This reduces tangent space calculation for dragon from 3.1sec to 2.9sec.

===================================================================

M	intern/mikktspace/mikktspace.c

===================================================================

diff --git a/intern/mikktspace/mikktspace.c b/intern/mikktspace/mikktspace.c
index 479443805bf..2e8e58d37d4 100644
--- a/intern/mikktspace/mikktspace.c
+++ b/intern/mikktspace/mikktspace.c
@@ -1677,6 +1677,19 @@ static void QuickSortEdges(SEdge * pSortBuffer, int iLeft, int iRight, const int
 		}
 		return;
 	}
+	else if(iElems < 16) {
+		int i, j;
+		for (i = 0; i < iElems - 1; i++) {
+			for (j = 0; j < iElems - i - 1; j++) {
+				int index = iLeft + j;
+				if (pSortBuffer[index].array[channel] > pSortBuffer[index + 1].array[channel]) {
+					sTmp = pSortBuffer[index];
+					pSortBuffer[index] = pSortBuffer[index];
+					pSortBuffer[index + 1] = sTmp;
+				}
+			}
+		}
+	}
 
 	// Random
 	t=uSeed&31;



More information about the Bf-blender-cvs mailing list