96 int start = job_start, end = job_end;
97 bool have_work = (start < end);
99 const int count = job_end - job_start;
104 sort(data + job_start, data + job_end + 1, compare);
110 int left = start, right = end;
111 int center = (left + right) >> 1;
112 if (compare.
compare(data[left], data[center]) > 0) {
113 swap(data[left], data[center]);
115 if (compare.
compare(data[left], data[right]) > 0) {
116 swap(data[left], data[right]);
118 if (compare.
compare(data[center], data[right]) > 0) {
119 swap(data[center], data[right]);
121 swap(data[center], data[right - 1]);
124 while (compare.
compare(data[left], median) < 0) {
127 while (compare.
compare(data[right], median) > 0) {
131 swap(data[left], data[right]);
135 }
while (left <= right);
void bvh_reference_sort(int start, int end, BVHReference *data, int dim, const BVHUnaligned *unaligned_heuristic, const Transform *aligned_space)
static void bvh_reference_sort_threaded(TaskPool *task_pool, BVHReference *data, const int job_start, const int job_end, const BVHReferenceCompare &compare)