Revision: 65549
http://sourceforge.net/p/brlcad/code/65549
Author: ejno
Date: 2015-07-09 21:17:29 +0000 (Thu, 09 Jul 2015)
Log Message:
-----------
cleanups
Modified Paths:
--------------
brlcad/trunk/src/librt/primitives/bot/gct_decimation/auxiliary/cc.h
brlcad/trunk/src/librt/primitives/bot/gct_decimation/auxiliary/mmbitmap.c
brlcad/trunk/src/librt/primitives/bot/gct_decimation/auxiliary/mmthread.h
brlcad/trunk/src/librt/primitives/bot/gct_decimation/meshdecimation.c
brlcad/trunk/src/librt/primitives/bot/gct_decimation/meshoptimizer.c
Modified: brlcad/trunk/src/librt/primitives/bot/gct_decimation/auxiliary/cc.h
===================================================================
--- brlcad/trunk/src/librt/primitives/bot/gct_decimation/auxiliary/cc.h
2015-07-09 19:00:08 UTC (rev 65548)
+++ brlcad/trunk/src/librt/primitives/bot/gct_decimation/auxiliary/cc.h
2015-07-09 21:17:29 UTC (rev 65549)
@@ -32,9 +32,7 @@
#include "common.h"
-#include "cpuconfig.h"
-
typedef struct {
uint32_t a;
uint32_t b;
Modified:
brlcad/trunk/src/librt/primitives/bot/gct_decimation/auxiliary/mmbitmap.c
===================================================================
--- brlcad/trunk/src/librt/primitives/bot/gct_decimation/auxiliary/mmbitmap.c
2015-07-09 19:00:08 UTC (rev 65548)
+++ brlcad/trunk/src/librt/primitives/bot/gct_decimation/auxiliary/mmbitmap.c
2015-07-09 21:17:29 UTC (rev 65549)
@@ -40,6 +40,7 @@
#include "cc.h"
+#include <limits.h>
#include <stdlib.h>
Modified:
brlcad/trunk/src/librt/primitives/bot/gct_decimation/auxiliary/mmthread.h
===================================================================
--- brlcad/trunk/src/librt/primitives/bot/gct_decimation/auxiliary/mmthread.h
2015-07-09 19:00:08 UTC (rev 65548)
+++ brlcad/trunk/src/librt/primitives/bot/gct_decimation/auxiliary/mmthread.h
2015-07-09 21:17:29 UTC (rev 65549)
@@ -40,10 +40,8 @@
#include "mmatomic.h"
#include <pthread.h>
+#include <sys/time.h>
#include <unistd.h>
-#include <sched.h>
-#include <sys/time.h>
-#include <limits.h>
#if _POSIX_SPIN_LOCKS > 0
#define MT_SPIN_LOCK_SUPPORT
@@ -57,47 +55,22 @@
};
-#define MT_THREAD_FLAGS_JOINABLE (0x1)
-#define MT_THREAD_FLAGS_SETSTACK (0x2)
-
-
#define MT_MUTEX_INITIALIZER { PTHREAD_MUTEX_INITIALIZER }
-static inline void mtThreadCreate(mtThread *thread, void *(*threadmain)(void
*value), void *value, int flags, void *stack, size_t stacksize)
+static inline void mtThreadCreate(mtThread *thread, void *(*threadmain)(void
*value), void *value)
{
pthread_attr_t attr;
-
pthread_attr_init(&attr);
-#if !defined(MM_WIN32) && !defined(MM_WIN64)
-
- if (flags & MT_THREAD_FLAGS_SETSTACK)
- pthread_attr_setstack(&attr, stack, stacksize);
-
-#endif
-
- if (flags & MT_THREAD_FLAGS_JOINABLE)
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
- else
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
-
+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
pthread_create(&thread->pthread, &attr, threadmain, value);
pthread_attr_destroy(&attr);
-
- return;
}
-static inline void mtThreadExit()
-{
- pthread_exit(0);
- return;
-}
-
static inline void mtThreadJoin(mtThread *thread)
{
void *ret;
pthread_join(thread->pthread, &ret);
- return;
}
@@ -110,25 +83,21 @@
static inline void mtMutexInit(mtMutex *mutex)
{
pthread_mutex_init(&mutex->pmutex, 0);
- return;
}
static inline void mtMutexDestroy(mtMutex *mutex)
{
pthread_mutex_destroy(&mutex->pmutex);
- return;
}
static inline void mtMutexLock(mtMutex *mutex)
{
pthread_mutex_lock(&mutex->pmutex);
- return;
}
static inline void mtMutexUnlock(mtMutex *mutex)
{
pthread_mutex_unlock(&mutex->pmutex);
- return;
}
static inline int mtMutexTryLock(mtMutex *mutex)
@@ -136,6 +105,7 @@
return !(pthread_mutex_trylock(&mutex->pmutex));
}
+
/****/
@@ -145,37 +115,31 @@
pthread_cond_t pcond;
};
+
static inline void mtSignalInit(mtSignal *signal)
{
pthread_cond_init(&signal->pcond, 0);
- return;
}
+
static inline void mtSignalDestroy(mtSignal *signal)
{
pthread_cond_destroy(&signal->pcond);
- return;
}
-static inline void mtSignalWake(mtSignal *signal)
-{
- pthread_cond_signal(&signal->pcond);
- return;
-}
static inline void mtSignalBroadcast(mtSignal *signal)
{
pthread_cond_broadcast(&signal->pcond);
- return;
}
static inline void mtSignalWait(mtSignal *signal, mtMutex *mutex)
{
pthread_cond_wait(&signal->pcond, &mutex->pmutex);
- return;
}
+
static inline void mtSignalWaitTimeout(mtSignal *signal, mtMutex *mutex, long
milliseconds)
{
uint64_t microsecs;
@@ -201,87 +165,83 @@
#ifdef MM_ATOMIC_SUPPORT
+
typedef struct mtSpin mtSpin;
+
struct mtSpin {
mmAtomic32 atomicspin;
};
+
static inline void mtSpinInit(mtSpin *spin)
{
mmAtomicWrite32(&spin->atomicspin, 0x0);
- return;
}
+
static inline void mtSpinDestroy(mtSpin *UNUSED(spin))
-{
- return;
-}
+{}
+
static inline void mtSpinLock(mtSpin *spin)
{
mmAtomicSpin32(&spin->atomicspin, 0x0, 0x1);
- return;
}
+
static inline void mtSpinUnlock(mtSpin *spin)
{
mmAtomicWrite32(&spin->atomicspin, 0x0);
- return;
}
-static inline int mtSpinTryLock(mtSpin *spin)
-{
- return mmAtomicCmpReplace32(&spin->atomicspin, 0x0, 0x1);
-}
#elif defined(MT_SPIN_LOCK_SUPPORT)
+
typedef struct mtSpin mtSpin;
+
struct mtSpin {
pthread_spinlock_t pspinlock;
};
+
static inline void mtSpinInit(mtSpin *spin)
{
pthread_spin_init(&spin->pspinlock, PTHREAD_PROCESS_PRIVATE);
- return;
}
+
static inline void mtSpinDestroy(mtSpin *spin)
{
pthread_spin_destroy(&spin->pspinlock);
- return;
}
static inline void mtSpinLock(mtSpin *spin)
{
pthread_spin_lock(&spin->pspinlock);
- return;
}
+
static inline void mtSpinUnlock(mtSpin *spin)
{
pthread_spin_unlock(&spin->pspinlock);
- return;
}
-static inline int mtSpinTryLock(mtSpin *spin)
-{
- return !(pthread_spin_trylock(&spin->pspinlock));
-}
#else
+
typedef struct mtMutex mtSpin;
+
#define mtSpinInit(a) mtMutexInit(a)
#define mtSpinDestroy(a) mtMutexDestroy(a)
#define mtSpinLock(a) mtMutexLock(a)
#define mtSpinUnlock(a) mtMutexUnlock(a)
-#define mtSpinTryLock(a) mtMutexTryLock(a)
+
#endif
Modified: brlcad/trunk/src/librt/primitives/bot/gct_decimation/meshdecimation.c
===================================================================
--- brlcad/trunk/src/librt/primitives/bot/gct_decimation/meshdecimation.c
2015-07-09 19:00:08 UTC (rev 65548)
+++ brlcad/trunk/src/librt/primitives/bot/gct_decimation/meshdecimation.c
2015-07-09 21:17:29 UTC (rev 65549)
@@ -38,7 +38,6 @@
#include "meshdecimation.h"
-#include "auxiliary/cpuconfig.h"
#include "auxiliary/cpuinfo.h"
#include "auxiliary/cc.h"
#include "auxiliary/mm.h"
@@ -50,13 +49,7 @@
#include "bu/parallel.h"
#include "vmath.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <stdint.h>
#include <string.h>
-#include <math.h>
-#include <float.h>
#ifdef __SSE__
@@ -118,11 +111,6 @@
#define MD_CONFIG_DELAYED_OP_REDIRECT
-#ifdef MM_ATOMIC_SUPPORT
-#define MD_CONFIG_ATOMIC_SUPPORT
-#endif
-
-
#if defined(CPUCONF_ARCH_AMD64) || defined(CPUCONF_ARCH_IA32)
#define MD_CONFIG_SSE_SUPPORT
#endif
@@ -558,7 +546,7 @@
#else
mdf point[3];
#endif
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomic32 atomicowner;
#else
int owner;
@@ -591,7 +579,7 @@
mdi trirefcount;
long trirefalloc;
char paddingA[64];
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomic32 trireflock;
#else
mtSpin trirefspinlock;
@@ -629,7 +617,7 @@
mdf maxcollapsecost;
char paddingC[64];
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomic32 globalvertexlock;
#else
mtSpin globalvertexspinlock;
@@ -872,7 +860,7 @@
mathQuadricMul( &q, area * MD_BOUNDARY_WEIGHT );
*/
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicSpin32(&vertex0->atomicowner, -1, 0xffff);
mathQuadricAddQuadric(&vertex0->quadric, &q);
mmAtomicWrite32(&vertex0->atomicowner, -1);
@@ -882,7 +870,7 @@
mtSpinUnlock(&vertex0->ownerspinlock);
#endif
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicSpin32(&vertex1->atomicowner, -1, 0xffff);
mathQuadricAddQuadric(&vertex1->quadric, &q);
mmAtomicWrite32(&vertex1->atomicowner, -1);
@@ -1024,7 +1012,7 @@
void **opbuffer;
int opcount;
int opalloc;
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomic32 atomlock;
#else
mtSpin spinlock;
@@ -1034,7 +1022,7 @@
/* 56 bytes, try padding to 64? */
typedef struct {
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomic32 flags;
#else
int flags;
@@ -1089,7 +1077,7 @@
updatebuffer->opbuffer = (void **)malloc(opalloc * sizeof(mdOp *));
updatebuffer->opcount = 0;
updatebuffer->opalloc = opalloc;
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicWrite32(&updatebuffer->atomlock, 0x0);
#else
mtSpinInit(&updatebuffer->spinlock);
@@ -1099,7 +1087,7 @@
static void mdUpdateBufferEnd(mdUpdateBuffer *updatebuffer)
{
-#ifndef MD_CONFIG_ATOMIC_SUPPORT
+#ifndef MM_ATOMIC_SUPPORT
mtSpinDestroy(&updatebuffer->spinlock);
#endif
free(updatebuffer->opbuffer);
@@ -1110,7 +1098,7 @@
{
int32_t flags;
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
for (; ;) {
flags = mmAtomicRead32(&op->flags);
@@ -1329,7 +1317,7 @@
else
mmBinSortAdd(tdata->binsort, op, op->collapsecost);
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicWrite32(&op->flags, opflags);
#else
op->flags = opflags;
@@ -1925,7 +1913,7 @@
for (vindex = 0 ; vindex < buffer->vertexcount ; vindex++) {
vertex = &mesh->vertexlist[ buffer->vertexlist[vindex] ];
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
if (mmAtomicRead32(&vertex->atomicowner) == tdata->threadid)
mmAtomicCmpXchg32(&vertex->atomicowner, tdata->threadid, -1);
@@ -1951,7 +1939,7 @@
mdVertex *vertex;
vertex = &mesh->vertexlist[ vertexindex ];
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
owner = mmAtomicRead32(&vertex->atomicowner);
if (owner == tdata->threadid)
@@ -1992,7 +1980,7 @@
mdVertex *vertex;
vertex = &mesh->vertexlist[ vertexindex ];
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
owner = mmAtomicRead32(&vertex->atomicowner);
if (owner == tdata->threadid)
@@ -2099,7 +2087,7 @@
for (; ;) {
if ((failcount > MD_GLOBAL_LOCK_THRESHOLD) && !(globalflag)) {
mdLockBufferUnlockAll(mesh, tdata, lockbuffer);
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicSpin32(&mesh->globalvertexlock, 0x0, 0x1);
#else
mtSpinLock(&mesh->globalvertexspinlock);
@@ -2128,7 +2116,7 @@
#endif
}
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
if (globalflag)
mmAtomicWrite32(&mesh->globalvertexlock, 0x0);
@@ -2181,7 +2169,7 @@
for (; ;) {
if ((failcount > MD_GLOBAL_LOCK_THRESHOLD) && !(globalflag)) {
mdLockBufferUnlockAll(mesh, tdata, lockbuffer);
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicSpin32(&mesh->globalvertexlock, 0x0, 0x1);
#else
mtSpinLock(&mesh->globalvertexspinlock);
@@ -2225,7 +2213,7 @@
#endif
}
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
if (globalflag)
mmAtomicWrite32(&mesh->globalvertexlock, 0x0);
@@ -2326,7 +2314,7 @@
vertex0->trirefbase = vertex1->trirefbase;
else {
/* Multithreading, acquire lock */
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicSpin32(&mesh->trireflock, 0x0, 0x1);
#else
mtSpinLock(&mesh->trirefspinlock);
@@ -2337,7 +2325,7 @@
if (mesh->trirefcount >= mesh->trirefalloc)
bu_bomb("SHOULD NOT HAPPEN");
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicWrite32(&mesh->trireflock, 0x0);
#else
mtSpinUnlock(&mesh->trirefspinlock);
@@ -2521,7 +2509,7 @@
mesh->attribcount = 0;
mesh->attrib = 0;
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicWrite32(&mesh->trireflock, 0x0);
mmAtomicWrite32(&mesh->globalvertexlock, 0x0);
#else
@@ -2551,7 +2539,7 @@
point = ADDRESS(mesh->point, vertexindex * mesh->pointstride);
for (; vertexindex < vertexindexmax ; vertexindex++, vertex++) {
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicWrite32(&vertex->atomicowner, -1);
#else
vertex->owner = -1;
@@ -2603,7 +2591,7 @@
for (i = 0 ; i < 3 ; i++) {
vertex = &mesh->vertexlist[ tri->v[i] ];
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicSpin32(&vertex->atomicowner, -1, tdata->threadid);
mathQuadricAddQuadric(&vertex->quadric, &q);
vertex->trirefcount++;
@@ -2690,7 +2678,7 @@
for (; triindex < triindexmax ; triindex++, tri++) {
for (i = 0 ; i < 3 ; i++) {
vertex = &mesh->vertexlist[ tri->v[i] ];
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicSpin32(&vertex->atomicowner, -1, tdata->threadid);
mesh->trireflist[ vertex->trirefbase + vertex->trirefcount++ ] =
triindex;
mmAtomicWrite32(&vertex->atomicowner, -1);
@@ -2740,7 +2728,7 @@
/* Mesh clean up */
static void mdMeshEnd(mdMesh *mesh)
{
-#ifndef MD_CONFIG_ATOMIC_SUPPORT
+#ifndef MM_ATOMIC_SUPPORT
mdi vindex;
mdVertex *vertex;
vertex = mesh->vertexlist;
@@ -2767,7 +2755,7 @@
collapsecost = op->value + op->penalty;
if ((denyflag) || (collapsecost > mesh->maxcollapsecost)) {
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
if (!(mmAtomicRead32(&op->flags) & MD_OP_FLAGS_DETACHED)) {
mmBinSortRemove(tdata->binsort, op, op->collapsecost);
@@ -2785,7 +2773,7 @@
mtSpinUnlock(&op->spinlock);
#endif
} else {
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
if (mmAtomicRead32(&op->flags) & MD_OP_FLAGS_DETACHED) {
mmBinSortAdd(tdata->binsort, op, collapsecost);
@@ -2814,7 +2802,7 @@
static void mdUpdateOp(mdMesh *mesh, mdThreadData *tdata, mdOp *op, int32_t
opflagsmask)
{
int denyflag, flags;
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
for (; ;) {
flags = mmAtomicRead32(&op->flags);
@@ -2844,7 +2832,7 @@
/*
mmBlockFree( &tdata->opblock, op );
*/
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicOr32(&op->flags, MD_OP_FLAGS_DELETED);
#else
mtSpinLock(&op->spinlock);
@@ -2864,7 +2852,7 @@
int vindex;
mdOp *op;
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicSpin32(&updatebuffer->atomlock, 0x0, 0x1);
#else
mtSpinLock(&updatebuffer->spinlock);
@@ -2877,7 +2865,7 @@
mdUpdateOp(mesh, tdata, op, ~(MD_OP_FLAGS_UPDATE_QUEUED |
MD_OP_FLAGS_UPDATE_NEEDED));
mdLockBufferUnlockAll(mesh, tdata, lockbuffer);
} else {
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicWrite32(&updatebuffer->atomlock, 0x0);
#else
mtSpinUnlock(&updatebuffer->spinlock);
@@ -2885,7 +2873,7 @@
mdOpResolveLockEdge(mesh, tdata, lockbuffer, op);
mdUpdateOp(mesh, tdata, op, ~(MD_OP_FLAGS_UPDATE_QUEUED |
MD_OP_FLAGS_UPDATE_NEEDED));
mdLockBufferUnlockAll(mesh, tdata, lockbuffer);
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicSpin32(&updatebuffer->atomlock, 0x0, 0x1);
#else
mtSpinLock(&updatebuffer->spinlock);
@@ -2894,7 +2882,7 @@
}
updatebuffer->opcount = 0;
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicWrite32(&updatebuffer->atomlock, 0x0);
#else
mtSpinUnlock(&updatebuffer->spinlock);
@@ -2950,7 +2938,7 @@
mdOpResolveLockFull(mesh, tdata, &lockbuffer, op);
/* If our op was flagged for update between mdUpdateBufferOps() and
before we acquired lock, no big deal, catch the update */
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
opflags = mmAtomicRead32(&op->flags);
#else
mtSpinLock(&op->spinlock);
@@ -2965,7 +2953,7 @@
}
if (!(mdEdgeCollisionCheck(mesh, tdata, op->v0, op->v1))) {
-#ifdef MD_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
if (mmAtomicRead32(&op->flags) & MD_OP_FLAGS_DETACHED)
bu_bomb("SHOULD NOT HAPPEN");
@@ -3550,7 +3538,7 @@
int stage;
} mdThreadInit;
-#ifndef MD_CONFIG_ATOMIC_SUPPORT
+#ifndef MM_ATOMIC_SUPPORT
int mdFreeOpCallback(void *chunk, void *UNUSED(userpointer))
{
mdOp *op;
@@ -3655,7 +3643,7 @@
mdBarrierSync(&mesh->globalbarrier);
/* If we didn't use atomic operations, we have spinlocks to destroy in
each op */
-#ifndef MD_CONFIG_ATOMIC_SUPPORT
+#ifndef MM_ATOMIC_SUPPORT
mmBlockProcessList(&tdata.opblock, 0, mdFreeOpCallback);
#endif
@@ -4048,7 +4036,7 @@
tinit->threadid = threadid;
tinit->mesh = &mesh;
tinit->stage = MD_STATUS_STAGE_INIT;
- mtThreadCreate(&thread[threadid], mdThreadMain, tinit,
MT_THREAD_FLAGS_JOINABLE, 0, 0);
+ mtThreadCreate(&thread[threadid], mdThreadMain, tinit);
}
/* Wait until all threads have properly initialized */
Modified: brlcad/trunk/src/librt/primitives/bot/gct_decimation/meshoptimizer.c
===================================================================
--- brlcad/trunk/src/librt/primitives/bot/gct_decimation/meshoptimizer.c
2015-07-09 19:00:08 UTC (rev 65548)
+++ brlcad/trunk/src/librt/primitives/bot/gct_decimation/meshoptimizer.c
2015-07-09 21:17:29 UTC (rev 65549)
@@ -38,30 +38,17 @@
#include "meshoptimizer.h"
-#include "auxiliary/cpuconfig.h"
-#include "auxiliary/cpuinfo.h"
#include "auxiliary/cc.h"
#include "auxiliary/mm.h"
-#include "auxiliary/mmhash.h"
#include "auxiliary/math3d.h"
#include "bu/log.h"
#include "bu/parallel.h"
-#include <stdio.h>
#include <stdlib.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <string.h>
#include <math.h>
-#include <float.h>
-#ifdef MM_ATOMIC_SUPPORT
-#define MO_CONFIG_ATOMIC_SUPPORT
-#endif
-
-
#define MO_THREAD_COUNT_MAX (64)
@@ -137,7 +124,7 @@
typedef struct {
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomic32 atomicowner;
mmAtomic32 atomictrirefcount;
#else
@@ -151,7 +138,7 @@
typedef struct {
moi v[3];
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomic32 atomictrinext;
#else
moi trinext;
@@ -313,7 +300,7 @@
vertex = &mesh->vertexlist[vertexindex];
for (; vertexindex < vertexindexmax ; vertexindex++, vertex++) {
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicWrite32(&vertex->atomicowner, -1);
mmAtomicWrite32(&vertex->atomictrirefcount, 0);
#else
@@ -349,7 +336,7 @@
for (; triindex < triindexmax ; triindex++, indices = ADDRESS(indices,
mesh->indicesstride), tri++) {
mesh->indicesUserToNative(tri->v, indices);
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicWrite32(&tri->atomictrinext, MO_TRINEXT_PENDING);
#else
tri->trinext = MO_TRINEXT_PENDING;
@@ -358,7 +345,7 @@
for (i = 0 ; i < 3 ; i++) {
vertex = &mesh->vertexlist[ tri->v[i] ];
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicAdd32(&vertex->atomictrirefcount, 1);
#else
mtSpinLock(&vertex->ownerspinlock);
@@ -383,7 +370,7 @@
vertex = mesh->vertexlist;
for (vertexindex = 0 ; vertexindex < mesh->vertexcount ; vertexindex++,
vertex++) {
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
trirefcount += mmAtomicRead32(&vertex->atomictrirefcount);
#else
trirefcount += vertex->trirefcount;
@@ -422,7 +409,7 @@
for (i = 0 ; i < 3 ; i++) {
vertex = &mesh->vertexlist[ tri->v[i] ];
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicSpin32(&vertex->atomicowner, -1, tdata->threadid);
mesh->trireflist[ --vertex->trirefbase ] = triindex;
mmAtomicWrite32(&vertex->atomicowner, -1);
@@ -606,7 +593,7 @@
static mof moTriangleScore(moMesh *mesh, moThreadData *tdata, moTriangle *tri)
{
int axisindex, cacheorder, trirefcount;
-#ifndef MO_CONFIG_ATOMIC_SUPPORT
+#ifndef MM_ATOMIC_SUPPORT
int32_t owner;
#endif
moi vertexindex;
@@ -620,7 +607,7 @@
cacheorder = moCacheGetOrder(mesh, tdata, vertexindex);
score += mesh->cachescore[ cacheorder ];
vertex = &mesh->vertexlist[ vertexindex ];
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
trirefcount = mmAtomicRead32(&vertex->atomictrirefcount);
#else
mtSpinLock(&vertex->ownerspinlock);
@@ -644,7 +631,7 @@
static mof moTriangleNextScore(moMesh *mesh, moThreadData *tdata, moTriangle
*tri, moi *prevtriv)
{
int axisindex, cacheorder, trirefcount;
-#ifndef MO_CONFIG_ATOMIC_SUPPORT
+#ifndef MM_ATOMIC_SUPPORT
int32_t owner;
#endif
moi vertexindex;
@@ -666,7 +653,7 @@
score += mesh->cachescore[ cacheorder ];
vertex = &mesh->vertexlist[ vertexindex ];
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
trirefcount = mmAtomicRead32(&vertex->atomictrirefcount);
#else
mtSpinLock(&vertex->ownerspinlock);
@@ -702,7 +689,7 @@
vertexindex = tri->v[axisindex];
vertex = &mesh->vertexlist[ vertexindex ];
trireflist = &mesh->trireflist[vertex->trirefbase];
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicSpin32(&vertex->atomicowner, -1, tdata->threadid);
trirefcount = mmAtomicRead32(&vertex->atomictrirefcount);
#else
@@ -725,7 +712,7 @@
bestscore = score;
}
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicWrite32(&vertex->atomicowner, -1);
#else
mtSpinLock(&vertex->ownerspinlock);
@@ -755,7 +742,7 @@
/* Adjust triref lists and count for the 3 vertices */
vertexindex = tri->v[axisindex];
vertex = &mesh->vertexlist[vertexindex];
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicSpin32(&vertex->atomicowner, -1, tdata->threadid);
#else
mtSpinLock(&vertex->ownerspinlock);
@@ -769,7 +756,7 @@
if (triindex != detachtriindex)
continue;
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
trirefcount = mmAtomicRead32(&vertex->atomictrirefcount) - 1;
mmAtomicWrite32(&vertex->atomictrirefcount, trirefcount);
#else
@@ -783,7 +770,7 @@
break;
}
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicWrite32(&vertex->atomicowner, -1);
#else
vertex->owner = -1;
@@ -800,7 +787,7 @@
moi seedindex, triindex, triindexstart, triindexend;
mof score, bestscore;
moTriangle *tri;
-#ifndef MO_CONFIG_ATOMIC_SUPPORT
+#ifndef MM_ATOMIC_SUPPORT
moi trinext;
#endif
@@ -824,7 +811,7 @@
if ((--testcount < 0) && (seedindex != -1))
goto done;
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
if (mmAtomicRead32(&tri->atomictrinext) != MO_TRINEXT_PENDING)
continue;
@@ -872,7 +859,7 @@
moCacheEntry *cache;
moVertex *vertex;
moTriangle *tri;
-#ifndef MO_CONFIG_ATOMIC_SUPPORT
+#ifndef MM_ATOMIC_SUPPORT
moi trinext;
#endif
@@ -896,7 +883,7 @@
vertex = &mesh->vertexlist[cache->vertexindex];
trireflist = &mesh->trireflist[vertex->trirefbase];
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicSpin32(&vertex->atomicowner, -1, tdata->threadid);
trirefcount = mmAtomicRead32(&vertex->atomictrirefcount);
#else
@@ -909,7 +896,7 @@
for (trirefindex = 0 ; trirefindex < trirefcount ; trirefindex++) {
triindex = trireflist[trirefindex];
tri = &mesh->trilist[triindex];
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
if (mmAtomicRead32(&tri->atomictrinext) != MO_TRINEXT_PENDING)
continue;
@@ -932,7 +919,7 @@
besttriindex = triindex;
}
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicWrite32(&vertex->atomicowner, -1);
#else
mtSpinLock(&vertex->ownerspinlock);
@@ -1003,7 +990,7 @@
moTriangle *tri;
moScoreEntry scorebuffer[MO_LOOK_AHEAD_BEST_BUFFER_SIZE];
moScoreEntry *entry, *entrynext;
-#ifndef MO_CONFIG_ATOMIC_SUPPORT
+#ifndef MM_ATOMIC_SUPPORT
moi trinext;
#endif
@@ -1032,7 +1019,7 @@
vertex = &mesh->vertexlist[cache->vertexindex];
trireflist = &mesh->trireflist[vertex->trirefbase];
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicSpin32(&vertex->atomicowner, -1, tdata->threadid);
trirefcount = mmAtomicRead32(&vertex->atomictrirefcount);
#else
@@ -1045,7 +1032,7 @@
for (trirefindex = 0 ; trirefindex < trirefcount ; trirefindex++) {
triindex = trireflist[trirefindex];
tri = &mesh->trilist[triindex];
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
if (mmAtomicRead32(&tri->atomictrinext) != MO_TRINEXT_PENDING)
continue;
@@ -1063,7 +1050,7 @@
moBufferRegisterScore(scorebuffer, triindex, score);
}
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicWrite32(&vertex->atomicowner, -1);
#else
mtSpinLock(&vertex->ownerspinlock);
@@ -1135,7 +1122,7 @@
moi delindex, delcount;
moi delbuffer[8];
moi(*findnextstep)(moMesh * mesh, moThreadData * tdata);
-#ifndef MO_CONFIG_ATOMIC_SUPPORT
+#ifndef MM_ATOMIC_SUPPORT
moi trinext;
#endif
@@ -1152,7 +1139,7 @@
/* Add triangle to list */
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
if (mmAtomicCmpReplace32(&tri->atomictrinext, MO_TRINEXT_PENDING,
MO_TRINEXT_ENDOFLIST))
break;
@@ -1206,7 +1193,7 @@
/* If triangle has already been added by the time we got here, we have
to start over... */
tri = &mesh->trilist[besttriindex];
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
if (!(mmAtomicCmpReplace32(&tri->atomictrinext, MO_TRINEXT_PENDING,
MO_TRINEXT_ENDOFLIST)))
continue;
@@ -1227,7 +1214,7 @@
/* Add triangle to list */
trilast = &mesh->trilist[tdata->trilast];
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
mmAtomicWrite32(&trilast->atomictrinext, besttriindex);
#else
mtSpinLock(&tri->spinlock);
@@ -1365,7 +1352,7 @@
for (triindex = tinit->trifirst ; triindex != MO_TRINEXT_ENDOFLIST ;
triindex = trinext) {
tri = &mesh->trilist[triindex];
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
trinext = mmAtomicRead32(&tri->atomictrinext);
#else
trinext = tri->trinext;
@@ -1396,7 +1383,7 @@
for (triindex = tinit->trifirst ; triindex != MO_TRINEXT_ENDOFLIST ;
triindex = trinext) {
tri = &mesh->trilist[triindex];
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
trinext = mmAtomicRead32(&tri->atomictrinext);
#else
trinext = tri->trinext;
@@ -1445,7 +1432,7 @@
for (triindex = tinit->trifirst ; triindex != MO_TRINEXT_ENDOFLIST ;
triindex = trinext) {
tri = &mesh->trilist[triindex];
-#ifdef MO_CONFIG_ATOMIC_SUPPORT
+#ifdef MM_ATOMIC_SUPPORT
trinext = mmAtomicRead32(&tri->atomictrinext);
#else
trinext = tri->trinext;
@@ -1586,7 +1573,7 @@
for (threadid = 0 ; threadid < threadcount ; threadid++, tinit++) {
tinit->threadid = threadid;
tinit->mesh = &mesh;
- mtThreadCreate(&thread[threadid], moThreadMain, tinit,
MT_THREAD_FLAGS_JOINABLE, 0, 0);
+ mtThreadCreate(&thread[threadid], moThreadMain, tinit);
}
/* Wait for all threads to be done */
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits