diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-01-18 10:26:06 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-01-18 10:26:06 +0400 |
commit | ee0eb394c9c4cbe9466ac76a35431288e4f80aa9 (patch) | |
tree | f9f962f573db9d28323acdfd237aea960f5f1407 | |
parent | 1a131171cb208d1f45d62c287fbe4fc5c3bbe42b (diff) |
use openmp sections for felling origindex arrays
-rw-r--r-- | source/blender/blenkernel/BKE_DerivedMesh.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/DerivedMesh.c | 12 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_build.c | 20 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_laplaciansmooth.c | 5 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_screw.c | 4 |
5 files changed, 27 insertions, 16 deletions
diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h index f06547fe2e3..64fb49c4d66 100644 --- a/source/blender/blenkernel/BKE_DerivedMesh.h +++ b/source/blender/blenkernel/BKE_DerivedMesh.h @@ -95,6 +95,8 @@ struct BMEditMesh; struct ListBase; struct PBVH; +#define DM_OMP_LIMIT 0 /* setting zero so we can catch bugs in OpenMP/BMesh */ + /* number of sub-elements each mesh element has (for interpolation) */ #define SUB_ELEMS_VERT 0 #define SUB_ELEMS_EDGE 2 diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index dde1d5870ca..b3d95629143 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -1584,9 +1584,15 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos DM_add_edge_layer(dm, CD_ORIGINDEX, CD_CALLOC, NULL); DM_add_poly_layer(dm, CD_ORIGINDEX, CD_CALLOC, NULL); - range_vn_i(DM_get_vert_data_layer(dm, CD_ORIGINDEX), dm->numVertData, 0); - range_vn_i(DM_get_edge_data_layer(dm, CD_ORIGINDEX), dm->numEdgeData, 0); - range_vn_i(DM_get_poly_data_layer(dm, CD_ORIGINDEX), dm->numPolyData, 0); +#pragma omp parallel sections if (dm->numVertData + dm->numEdgeData + dm->numPolyData >= DM_OMP_LIMIT) + { +#pragma omp section + { range_vn_i(DM_get_vert_data_layer(dm, CD_ORIGINDEX), dm->numVertData, 0); } +#pragma omp section + { range_vn_i(DM_get_edge_data_layer(dm, CD_ORIGINDEX), dm->numEdgeData, 0); } +#pragma omp section + { range_vn_i(DM_get_poly_data_layer(dm, CD_ORIGINDEX), dm->numPolyData, 0); } + } } } diff --git a/source/blender/modifiers/intern/MOD_build.c b/source/blender/modifiers/intern/MOD_build.c index 2105a6efd21..c5a756733f5 100644 --- a/source/blender/modifiers/intern/MOD_build.c +++ b/source/blender/modifiers/intern/MOD_build.c @@ -37,6 +37,7 @@ #include "BLI_utildefines.h" #include "BLI_rand.h" +#include "BLI_math_vector.h" #include "BLI_ghash.h" #include "DNA_scene_types.h" @@ -104,12 +105,19 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *UNUSED(ob), MVert *mvert_src = dm->getVertArray(dm); - vertMap = MEM_callocN(sizeof(*vertMap) * numVert_src, "build modifier vertMap"); - for (i = 0; i < numVert_src; i++) vertMap[i] = i; - edgeMap = MEM_callocN(sizeof(*edgeMap) * numEdge_src, "build modifier edgeMap"); - for (i = 0; i < numEdge_src; i++) edgeMap[i] = i; - faceMap = MEM_callocN(sizeof(*faceMap) * numPoly_src, "build modifier faceMap"); - for (i = 0; i < numPoly_src; i++) faceMap[i] = i; + vertMap = MEM_mallocN(sizeof(*vertMap) * numVert_src, "build modifier vertMap"); + edgeMap = MEM_mallocN(sizeof(*edgeMap) * numEdge_src, "build modifier edgeMap"); + faceMap = MEM_mallocN(sizeof(*faceMap) * numPoly_src, "build modifier faceMap"); + +#pragma omp parallel sections if (numVert_src + numEdge_src + numPoly_src >= DM_OMP_LIMIT) + { +#pragma omp section + { range_vn_i(vertMap, numVert_src, 0); } +#pragma omp section + { range_vn_i(edgeMap, numEdge_src, 0); } +#pragma omp section + { range_vn_i(faceMap, numPoly_src, 0); } + } frac = (BKE_scene_frame_get(md->scene) - bmd->start) / bmd->length; CLAMP(frac, 0.0f, 1.0f); diff --git a/source/blender/modifiers/intern/MOD_laplaciansmooth.c b/source/blender/modifiers/intern/MOD_laplaciansmooth.c index 2739365e619..62900af078e 100644 --- a/source/blender/modifiers/intern/MOD_laplaciansmooth.c +++ b/source/blender/modifiers/intern/MOD_laplaciansmooth.c @@ -521,11 +521,10 @@ static void fill_laplacian_matrix(LaplacianSystem *sys) static void validate_solution(LaplacianSystem * sys, short flag, float lambda, float lambda_border) { - int i, idv1, idv2; + int i; float lam; - float leni, lene; float vini, vend; - float *vi1, *vi2, ve1[3], ve2[3]; + if (flag & MOD_LAPLACIANSMOOTH_PRESERVE_VOLUME) { vini = compute_volume(sys->vertexCos, sys->mfaces, sys->numFaces); } diff --git a/source/blender/modifiers/intern/MOD_screw.c b/source/blender/modifiers/intern/MOD_screw.c index 1021620e04f..e7d62452590 100644 --- a/source/blender/modifiers/intern/MOD_screw.c +++ b/source/blender/modifiers/intern/MOD_screw.c @@ -314,11 +314,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, CustomData_add_layer(&result->polyData, CD_ORIGINDEX, CD_CALLOC, NULL, maxPolys); } -#if 0 // trunk - origindex = result->getPolyDataArray(result, CD_ORIGINDEX); -#else // bmesh origindex = CustomData_get_layer(&result->polyData, CD_ORIGINDEX); -#endif DM_copy_vert_data(dm, result, 0, 0, totvert); /* copy first otherwise this overwrites our own vertex normals */ |