diff options
author | William Todd Stinson <stinson@lindenlab.com> | 2012-09-10 10:37:02 -0700 |
---|---|---|
committer | William Todd Stinson <stinson@lindenlab.com> | 2012-09-10 10:37:02 -0700 |
commit | a766e26db46c7c054bae1021470dbe365f2a3cb3 (patch) | |
tree | 93ffd22d902bef8d44e81b6989dcb2966beba2fc /indra/llmath | |
parent | dab915c1d2a2d08363944de8ac4362fbe162bea0 (diff) |
Backing out the changes contributing to DRTVWR-167 and DRTVWR-179 from the repository.
Diffstat (limited to 'indra/llmath')
-rw-r--r-- | indra/llmath/CMakeLists.txt | 1 | ||||
-rw-r--r-- | indra/llmath/llcamera.h | 12 | ||||
-rw-r--r-- | indra/llmath/llmatrix3a.h | 2 | ||||
-rw-r--r-- | indra/llmath/llmatrix4a.h | 2 | ||||
-rw-r--r-- | indra/llmath/lloctree.h | 147 | ||||
-rw-r--r-- | indra/llmath/llplane.h | 4 | ||||
-rw-r--r-- | indra/llmath/llsimdmath.h | 3 | ||||
-rw-r--r-- | indra/llmath/llsimdtypes.inl | 2 | ||||
-rw-r--r-- | indra/llmath/llvector4a.cpp | 8 | ||||
-rw-r--r-- | indra/llmath/llvector4a.h | 6 | ||||
-rw-r--r-- | indra/llmath/llvector4a.inl | 1 | ||||
-rw-r--r-- | indra/llmath/llvector4logical.h | 2 | ||||
-rw-r--r-- | indra/llmath/llvolume.cpp | 53 | ||||
-rw-r--r-- | indra/llmath/llvolumeoctree.cpp | 6 | ||||
-rw-r--r-- | indra/llmath/llvolumeoctree.h | 35 |
15 files changed, 89 insertions, 195 deletions
diff --git a/indra/llmath/CMakeLists.txt b/indra/llmath/CMakeLists.txt index 5865ae030c..b5e59c1ca3 100644 --- a/indra/llmath/CMakeLists.txt +++ b/indra/llmath/CMakeLists.txt @@ -117,7 +117,6 @@ if (LL_TESTS) # INTEGRATION TESTS set(test_libs llmath llcommon ${LLCOMMON_LIBRARIES} ${WINDOWS_LIBRARIES}) # TODO: Some of these need refactoring to be proper Unit tests rather than Integration tests. - LL_ADD_INTEGRATION_TEST(alignment "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llbbox llbbox.cpp "${test_libs}") LL_ADD_INTEGRATION_TEST(llquaternion llquaternion.cpp "${test_libs}") LL_ADD_INTEGRATION_TEST(mathmisc "" "${test_libs}") diff --git a/indra/llmath/llcamera.h b/indra/llmath/llcamera.h index 0b591be622..ec67b91d05 100644 --- a/indra/llmath/llcamera.h +++ b/indra/llmath/llcamera.h @@ -60,7 +60,7 @@ static const F32 MAX_FIELD_OF_VIEW = 175.f * DEG_TO_RAD; // roll(), pitch(), yaw() // etc... -LL_ALIGN_PREFIX(16) + class LLCamera : public LLCoordFrame { @@ -108,7 +108,7 @@ public: }; private: - LL_ALIGN_16(LLPlane mAgentPlanes[7]); //frustum planes in agent space a la gluUnproject (I'm a bastard, I know) - DaveP + LLPlane mAgentPlanes[7]; //frustum planes in agent space a la gluUnproject (I'm a bastard, I know) - DaveP U8 mPlaneMask[8]; // 8 for alignment F32 mView; // angle between top and bottom frustum planes in radians. @@ -116,13 +116,13 @@ private: S32 mViewHeightInPixels; // for ViewHeightInPixels() only F32 mNearPlane; F32 mFarPlane; - LL_ALIGN_16(LLPlane mLocalPlanes[4]); + LLPlane mLocalPlanes[4]; F32 mFixedDistance; // Always return this distance, unless < 0 LLVector3 mFrustCenter; // center of frustum and radius squared for ultra-quick exclusion test F32 mFrustRadiusSquared; - LL_ALIGN_16(LLPlane mWorldPlanes[PLANE_NUM]); - LL_ALIGN_16(LLPlane mHorizPlanes[HORIZ_PLANE_NUM]); + LLPlane mWorldPlanes[PLANE_NUM]; + LLPlane mHorizPlanes[HORIZ_PLANE_NUM]; U32 mPlaneCount; //defaults to 6, if setUserClipPlane is called, uses user supplied clip plane in @@ -208,7 +208,7 @@ protected: void calculateFrustumPlanes(F32 left, F32 right, F32 top, F32 bottom); void calculateFrustumPlanesFromWindow(F32 x1, F32 y1, F32 x2, F32 y2); void calculateWorldFrustumPlanes(); -} LL_ALIGN_POSTFIX(16); +}; #endif diff --git a/indra/llmath/llmatrix3a.h b/indra/llmath/llmatrix3a.h index 9916cfd2da..adb7e3389d 100644 --- a/indra/llmath/llmatrix3a.h +++ b/indra/llmath/llmatrix3a.h @@ -111,7 +111,7 @@ public: protected: - LL_ALIGN_16(LLVector4a mColumns[3]); + LLVector4a mColumns[3]; }; diff --git a/indra/llmath/llmatrix4a.h b/indra/llmath/llmatrix4a.h index c4cefdb4fa..27cf5b79f6 100644 --- a/indra/llmath/llmatrix4a.h +++ b/indra/llmath/llmatrix4a.h @@ -34,7 +34,7 @@ class LLMatrix4a { public: - LL_ALIGN_16(LLVector4a mMatrix[4]); + LLVector4a mMatrix[4]; inline void clear() { diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h index c3f6f7de2a..1b11e83b4a 100644 --- a/indra/llmath/lloctree.h +++ b/indra/llmath/lloctree.h @@ -31,6 +31,7 @@ #include "v3math.h" #include "llvector4a.h" #include <vector> +#include <set> #define OCT_ERRS LL_WARNS("OctreeErrors") @@ -78,18 +79,16 @@ public: typedef LLOctreeTraveler<T> oct_traveler; typedef LLTreeTraveler<T> tree_traveler; - typedef LLPointer<T>* element_list; - typedef LLPointer<T>* element_iter; - typedef const LLPointer<T>* const_element_iter; + typedef typename std::set<LLPointer<T> > element_list; + typedef typename element_list::iterator element_iter; + typedef typename element_list::const_iterator const_element_iter; typedef typename std::vector<LLTreeListener<T>*>::iterator tree_listener_iter; - typedef LLOctreeNode<T>** child_list; - typedef LLOctreeNode<T>** child_iter; - + typedef typename std::vector<LLOctreeNode<T>* > child_list; typedef LLTreeNode<T> BaseType; typedef LLOctreeNode<T> oct_node; typedef LLOctreeListener<T> oct_listener; - void* operator new(size_t size) + /*void* operator new(size_t size) { return ll_aligned_malloc_16(size); } @@ -97,7 +96,7 @@ public: void operator delete(void* ptr) { ll_aligned_free_16(ptr); - } + }*/ LLOctreeNode( const LLVector4a& center, const LLVector4a& size, @@ -106,9 +105,6 @@ public: : mParent((oct_node*)parent), mOctant(octant) { - mData = NULL; - mDataEnd = NULL; - mCenter = center; mSize = size; @@ -127,16 +123,6 @@ public: { BaseType::destroyListeners(); - for (U32 i = 0; i < mElementCount; ++i) - { - mData[i]->setBinIndex(-1); - mData[i] = NULL; - } - - free(mData); - mData = NULL; - mDataEnd = NULL; - for (U32 i = 0; i < getChildCount(); i++) { delete getChild(i); @@ -233,17 +219,12 @@ public: } void accept(oct_traveler* visitor) { visitor->visit(this); } - virtual bool isLeaf() const { return mChildCount == 0; } + virtual bool isLeaf() const { return mChild.empty(); } U32 getElementCount() const { return mElementCount; } - bool isEmpty() const { return mElementCount == 0; } element_list& getData() { return mData; } const element_list& getData() const { return mData; } - element_iter getDataBegin() { return mData; } - element_iter getDataEnd() { return mDataEnd; } - const_element_iter getDataBegin() const { return mData; } - const_element_iter getDataEnd() const { return mDataEnd; } - + U32 getChildCount() const { return mChildCount; } oct_node* getChild(U32 index) { return mChild[index]; } const oct_node* getChild(U32 index) const { return mChild[index]; } @@ -308,7 +289,7 @@ public: virtual bool insert(T* data) { - if (data == NULL || data->getBinIndex() != -1) + if (data == NULL) { OCT_ERRS << "!!! INVALID ELEMENT ADDED TO OCTREE BRANCH !!!" << llendl; return false; @@ -321,16 +302,13 @@ public: if ((getElementCount() < gOctreeMaxCapacity && contains(data->getBinRadius()) || (data->getBinRadius() > getSize()[0] && parent && parent->getElementCount() >= gOctreeMaxCapacity))) { //it belongs here - mElementCount++; - mData = (element_list) realloc(mData, sizeof(LLPointer<T>)*mElementCount); - - //avoid unref on uninitialized memory - memset(mData+mElementCount-1, 0, sizeof(LLPointer<T>)); + //if this is a redundant insertion, error out (should never happen) + llassert(mData.find(data) == mData.end()); - mData[mElementCount-1] = data; - mDataEnd = mData + mElementCount; - data->setBinIndex(mElementCount-1); + mData.insert(data); BaseType::insert(data); + + mElementCount = mData.size(); return true; } else @@ -364,16 +342,10 @@ public: if( lt == 0x7 ) { - mElementCount++; - mData = (element_list) realloc(mData, sizeof(LLPointer<T>)*mElementCount); - - //avoid unref on uninitialized memory - memset(mData+mElementCount-1, 0, sizeof(LLPointer<T>)); - - mData[mElementCount-1] = data; - mDataEnd = mData + mElementCount; - data->setBinIndex(mElementCount-1); + mData.insert(data); BaseType::insert(data); + + mElementCount = mData.size(); return true; } @@ -422,59 +394,23 @@ public: return false; } - void _remove(T* data, S32 i) - { //precondition -- mElementCount > 0, idx is in range [0, mElementCount) - - mElementCount--; - data->setBinIndex(-1); - - if (mElementCount > 0) - { - if (mElementCount != i) - { - mData[i] = mData[mElementCount]; //might unref data, do not access data after this point - mData[i]->setBinIndex(i); - } - - mData[mElementCount] = NULL; //needed for unref - mData = (element_list) realloc(mData, sizeof(LLPointer<T>)*mElementCount); - mDataEnd = mData+mElementCount; - } - else - { - mData[0] = NULL; //needed for unref - free(mData); - mData = NULL; - mDataEnd = NULL; - } - - notifyRemoval(data); - checkAlive(); - } - bool remove(T* data) { - S32 i = data->getBinIndex(); - - if (i >= 0 && i < mElementCount) - { - if (mData[i] == data) - { //found it - _remove(data, i); - llassert(data->getBinIndex() == -1); - return true; - } - } - - if (isInside(data)) + if (mData.find(data) != mData.end()) + { //we have data + mData.erase(data); + mElementCount = mData.size(); + notifyRemoval(data); + checkAlive(); + return true; + } + else if (isInside(data)) { oct_node* dest = getNodeAt(data); if (dest != this) { - bool ret = dest->remove(data); - llassert(data->getBinIndex() == -1); - return ret; + return dest->remove(data); } } @@ -493,20 +429,19 @@ public: //node is now root llwarns << "!!! OCTREE REMOVING FACE BY ADDRESS, SEVERE PERFORMANCE PENALTY |||" << llendl; node->removeByAddress(data); - llassert(data->getBinIndex() == -1); return true; } void removeByAddress(T* data) { - for (U32 i = 0; i < mElementCount; ++i) + if (mData.find(data) != mData.end()) { - if (mData[i] == data) - { //we have data - _remove(data, i); - llwarns << "FOUND!" << llendl; - return; - } + mData.erase(data); + mElementCount = mData.size(); + notifyRemoval(data); + llwarns << "FOUND!" << llendl; + checkAlive(); + return; } for (U32 i = 0; i < getChildCount(); i++) @@ -518,8 +453,8 @@ public: void clearChildren() { + mChild.clear(); mChildCount = 0; - U32* foo = (U32*) mChildMap; foo[0] = foo[1] = 0xFFFFFFFF; } @@ -581,7 +516,7 @@ public: mChildMap[child->getOctant()] = mChildCount; - mChild[mChildCount] = child; + mChild.push_back(child); ++mChildCount; child->setParent(this); @@ -608,12 +543,9 @@ public: mChild[index]->destroy(); delete mChild[index]; } - + mChild.erase(mChild.begin() + index); --mChildCount; - mChild[index] = mChild[mChildCount]; - - //rebuild child map U32* foo = (U32*) mChildMap; foo[0] = foo[1] = 0xFFFFFFFF; @@ -669,12 +601,11 @@ protected: oct_node* mParent; U8 mOctant; - LLOctreeNode<T>* mChild[8]; + child_list mChild; U8 mChildMap[8]; U32 mChildCount; element_list mData; - element_iter mDataEnd; U32 mElementCount; }; diff --git a/indra/llmath/llplane.h b/indra/llmath/llplane.h index 3c32441b11..a611894721 100644 --- a/indra/llmath/llplane.h +++ b/indra/llmath/llplane.h @@ -36,8 +36,6 @@ // The plane normal = [A, B, C] // The closest approach = D / sqrt(A*A + B*B + C*C) - -LL_ALIGN_PREFIX(16) class LLPlane { public: @@ -96,7 +94,7 @@ public: private: LLVector4a mV; -} LL_ALIGN_POSTFIX(16); +}; diff --git a/indra/llmath/llsimdmath.h b/indra/llmath/llsimdmath.h index 01458521ec..c7cdf7b32c 100644 --- a/indra/llmath/llsimdmath.h +++ b/indra/llmath/llsimdmath.h @@ -67,10 +67,11 @@ template <typename T> T* LL_NEXT_ALIGNED_ADDRESS_64(T* address) #define LL_ALIGN_16(var) LL_ALIGN_PREFIX(16) var LL_ALIGN_POSTFIX(16) + + #include <xmmintrin.h> #include <emmintrin.h> -#include "llmemory.h" #include "llsimdtypes.h" #include "llsimdtypes.inl" diff --git a/indra/llmath/llsimdtypes.inl b/indra/llmath/llsimdtypes.inl index e905c84954..712239e425 100644 --- a/indra/llmath/llsimdtypes.inl +++ b/indra/llmath/llsimdtypes.inl @@ -62,7 +62,6 @@ inline LLSimdScalar operator/(const LLSimdScalar& a, const LLSimdScalar& b) inline LLSimdScalar operator-(const LLSimdScalar& a) { static LL_ALIGN_16(const U32 signMask[4]) = {0x80000000, 0x80000000, 0x80000000, 0x80000000 }; - ll_assert_aligned(signMask,16); return _mm_xor_ps(*reinterpret_cast<const LLQuad*>(signMask), a); } @@ -147,7 +146,6 @@ inline LLSimdScalar& LLSimdScalar::operator/=(const LLSimdScalar& rhs) inline LLSimdScalar LLSimdScalar::getAbs() const { static const LL_ALIGN_16(U32 F_ABS_MASK_4A[4]) = { 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF }; - ll_assert_aligned(F_ABS_MASK_4A,16); return _mm_and_ps( mQ, *reinterpret_cast<const LLQuad*>(F_ABS_MASK_4A)); } diff --git a/indra/llmath/llvector4a.cpp b/indra/llmath/llvector4a.cpp index 6edeb0fefe..b66b7a7076 100644 --- a/indra/llmath/llvector4a.cpp +++ b/indra/llmath/llvector4a.cpp @@ -24,7 +24,6 @@ * $/LicenseInfo$ */ -#include "llmemory.h" #include "llmath.h" #include "llquantize.h" @@ -45,10 +44,7 @@ extern const LLVector4a LL_V4A_EPSILON = reinterpret_cast<const LLVector4a&> ( F assert(dst != NULL); assert(bytes > 0); assert((bytes % sizeof(F32))== 0); - ll_assert_aligned(src,16); - ll_assert_aligned(dst,16); - assert(bytes%16==0); - + F32* end = dst + (bytes / sizeof(F32) ); if (bytes > 64) @@ -193,8 +189,6 @@ void LLVector4a::quantize16( const LLVector4a& low, const LLVector4a& high ) LLVector4a oneOverDelta; { static LL_ALIGN_16( const F32 F_TWO_4A[4] ) = { 2.f, 2.f, 2.f, 2.f }; - ll_assert_aligned(F_TWO_4A,16); - LLVector4a two; two.load4a( F_TWO_4A ); // Here we use _mm_rcp_ps plus one round of newton-raphson diff --git a/indra/llmath/llvector4a.h b/indra/llmath/llvector4a.h index 0526793d3a..596082509d 100644 --- a/indra/llmath/llvector4a.h +++ b/indra/llmath/llvector4a.h @@ -32,7 +32,6 @@ class LLRotation; #include <assert.h> #include "llpreprocessor.h" -#include "llmemory.h" /////////////////////////////////// // FIRST TIME USERS PLEASE READ @@ -47,7 +46,6 @@ class LLRotation; // LLVector3/LLVector4. ///////////////////////////////// -LL_ALIGN_PREFIX(16) class LLVector4a { public: @@ -84,7 +82,6 @@ public: } // Copy words 16-byte blocks from src to dst. Source and destination must not overlap. - // Source and dest must be 16-byte aligned and size must be multiple of 16. static void memcpyNonAliased16(F32* __restrict dst, const F32* __restrict src, size_t bytes); //////////////////////////////////// @@ -93,7 +90,6 @@ public: LLVector4a() { //DO NOT INITIALIZE -- The overhead is completely unnecessary - ll_assert_aligned(this,16); } LLVector4a(F32 x, F32 y, F32 z, F32 w = 0.f) @@ -317,7 +313,7 @@ public: private: LLQuad mQ; -} LL_ALIGN_POSTFIX(16); +}; inline void update_min_max(LLVector4a& min, LLVector4a& max, const LLVector4a& p) { diff --git a/indra/llmath/llvector4a.inl b/indra/llmath/llvector4a.inl index 7c52ffef21..7ad22a5631 100644 --- a/indra/llmath/llvector4a.inl +++ b/indra/llmath/llvector4a.inl @@ -475,7 +475,6 @@ inline void LLVector4a::setLerp(const LLVector4a& lhs, const LLVector4a& rhs, F3 inline LLBool32 LLVector4a::isFinite3() const { static LL_ALIGN_16(const U32 nanOrInfMask[4]) = { 0x7f800000, 0x7f800000, 0x7f800000, 0x7f800000 }; - ll_assert_aligned(nanOrInfMask,16); const __m128i nanOrInfMaskV = *reinterpret_cast<const __m128i*> (nanOrInfMask); const __m128i maskResult = _mm_and_si128( _mm_castps_si128(mQ), nanOrInfMaskV ); const LLVector4Logical equalityCheck = _mm_castsi128_ps(_mm_cmpeq_epi32( maskResult, nanOrInfMaskV )); diff --git a/indra/llmath/llvector4logical.h b/indra/llmath/llvector4logical.h index c5698f7cea..dd66b09d43 100644 --- a/indra/llmath/llvector4logical.h +++ b/indra/llmath/llvector4logical.h @@ -27,7 +27,6 @@ #ifndef LL_VECTOR4LOGICAL_H #define LL_VECTOR4LOGICAL_H -#include "llmemory.h" //////////////////////////// // LLVector4Logical @@ -78,7 +77,6 @@ public: inline LLVector4Logical& invert() { static const LL_ALIGN_16(U32 allOnes[4]) = { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }; - ll_assert_aligned(allOnes,16); mQ = _mm_andnot_ps( mQ, *(LLQuad*)(allOnes) ); return *this; } diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 53d56e96da..cc9744756f 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -95,6 +95,17 @@ const S32 SCULPT_MIN_AREA_DETAIL = 1; extern BOOL gDebugGL; +void assert_aligned(void* ptr, uintptr_t alignment) +{ +#if 0 + uintptr_t t = (uintptr_t) ptr; + if (t%alignment != 0) + { + llerrs << "Alignment check failed." << llendl; + } +#endif +} + BOOL check_same_clock_dir( const LLVector3& pt1, const LLVector3& pt2, const LLVector3& pt3, const LLVector3& norm) { LLVector3 test = (pt2-pt1)%(pt3-pt2); @@ -317,16 +328,16 @@ public: LLVector4a& min = node->mExtents[0]; LLVector4a& max = node->mExtents[1]; - if (!branch->isEmpty()) + if (!branch->getData().empty()) { //node has data, find AABB that binds data set - const LLVolumeTriangle* tri = *(branch->getDataBegin()); + const LLVolumeTriangle* tri = *(branch->getData().begin()); //initialize min/max to first available vertex min = *(tri->mV[0]); max = *(tri->mV[0]); for (LLOctreeNode<LLVolumeTriangle>::const_element_iter iter = - branch->getDataBegin(); iter != branch->getDataEnd(); ++iter) + branch->getData().begin(); iter != branch->getData().end(); ++iter) { //for each triangle in node //stretch by triangles in node @@ -341,7 +352,7 @@ public: max.setMax(max, *tri->mV[2]); } } - else if (!branch->isLeaf()) + else if (!branch->getChildren().empty()) { //no data, but child nodes exist LLVolumeOctreeListener* child = (LLVolumeOctreeListener*) branch->getChild(0)->getListener(0); @@ -6951,14 +6962,14 @@ void LLVolumeFace::resizeVertices(S32 num_verts) if (num_verts) { mPositions = (LLVector4a*) ll_aligned_malloc_16(sizeof(LLVector4a)*num_verts); - ll_assert_aligned(mPositions, 16); + assert_aligned(mPositions, 16); mNormals = (LLVector4a*) ll_aligned_malloc_16(sizeof(LLVector4a)*num_verts); - ll_assert_aligned(mNormals, 16); + assert_aligned(mNormals, 16); //pad texture coordinate block end to allow for QWORD reads S32 size = ((num_verts*sizeof(LLVector2)) + 0xF) & ~0xF; mTexCoords = (LLVector2*) ll_aligned_malloc_16(size); - ll_assert_aligned(mTexCoords, 16); + assert_aligned(mTexCoords, 16); } else { @@ -6982,17 +6993,14 @@ void LLVolumeFace::pushVertex(const LLVector4a& pos, const LLVector4a& norm, con // S32 old_size = mNumVertices*16; //positions - mPositions = (LLVector4a*) ll_aligned_realloc_16(mPositions, new_size); - ll_assert_aligned(mPositions,16); + mPositions = (LLVector4a*) realloc(mPositions, new_size); //normals - mNormals = (LLVector4a*) ll_aligned_realloc_16(mNormals, new_size); - ll_assert_aligned(mNormals,16); - + mNormals = (LLVector4a*) realloc(mNormals, new_size); + //tex coords new_size = ((new_verts*8)+0xF) & ~0xF; - mTexCoords = (LLVector2*) ll_aligned_realloc_16(mTexCoords, new_size); - ll_assert_aligned(mTexCoords,16); + mTexCoords = (LLVector2*) realloc(mTexCoords, new_size); //just clear binormals @@ -7045,8 +7053,7 @@ void LLVolumeFace::pushIndex(const U16& idx) S32 old_size = ((mNumIndices*2)+0xF) & ~0xF; if (new_size != old_size) { - mIndices = (U16*) ll_aligned_realloc_16(mIndices, new_size); - ll_assert_aligned(mIndices,16); + mIndices = (U16*) realloc(mIndices, new_size); } mIndices[mNumIndices++] = idx; @@ -7087,12 +7094,12 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat } //allocate new buffer space - mPositions = (LLVector4a*) ll_aligned_realloc_16(mPositions, new_count*sizeof(LLVector4a)); - ll_assert_aligned(mPositions, 16); - mNormals = (LLVector4a*) ll_aligned_realloc_16(mNormals, new_count*sizeof(LLVector4a)); - ll_assert_aligned(mNormals, 16); - mTexCoords = (LLVector2*) ll_aligned_realloc_16(mTexCoords, (new_count*sizeof(LLVector2)+0xF) & ~0xF); - ll_assert_aligned(mTexCoords, 16); + mPositions = (LLVector4a*) realloc(mPositions, new_count*sizeof(LLVector4a)); + assert_aligned(mPositions, 16); + mNormals = (LLVector4a*) realloc(mNormals, new_count*sizeof(LLVector4a)); + assert_aligned(mNormals, 16); + mTexCoords = (LLVector2*) realloc(mTexCoords, (new_count*sizeof(LLVector2)+0xF) & ~0xF); + assert_aligned(mTexCoords, 16); mNumVertices = new_count; @@ -7138,7 +7145,7 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat new_count = mNumIndices + face.mNumIndices; //allocate new index buffer - mIndices = (U16*) ll_aligned_realloc_16(mIndices, (new_count*sizeof(U16)+0xF) & ~0xF); + mIndices = (U16*) realloc(mIndices, (new_count*sizeof(U16)+0xF) & ~0xF); //get destination address into new index buffer U16* dst_idx = mIndices+mNumIndices; diff --git a/indra/llmath/llvolumeoctree.cpp b/indra/llmath/llvolumeoctree.cpp index cc83cb7235..b5a935c2b5 100644 --- a/indra/llmath/llvolumeoctree.cpp +++ b/indra/llmath/llvolumeoctree.cpp @@ -131,7 +131,7 @@ void LLOctreeTriangleRayIntersect::traverse(const LLOctreeNode<LLVolumeTriangle> void LLOctreeTriangleRayIntersect::visit(const LLOctreeNode<LLVolumeTriangle>* node) { for (LLOctreeNode<LLVolumeTriangle>::const_element_iter iter = - node->getDataBegin(); iter != node->getDataEnd(); ++iter) + node->getData().begin(); iter != node->getData().end(); ++iter) { const LLVolumeTriangle* tri = *iter; @@ -236,8 +236,8 @@ void LLVolumeOctreeValidate::visit(const LLOctreeNode<LLVolumeTriangle>* branch) } //children fit, check data - for (LLOctreeNode<LLVolumeTriangle>::const_element_iter iter = branch->getDataBegin(); - iter != branch->getDataEnd(); ++iter) + for (LLOctreeNode<LLVolumeTriangle>::const_element_iter iter = branch->getData().begin(); + iter != branch->getData().end(); ++iter) { const LLVolumeTriangle* tri = *iter; diff --git a/indra/llmath/llvolumeoctree.h b/indra/llmath/llvolumeoctree.h index 9ae34a0c4e..688d91dc40 100644 --- a/indra/llmath/llvolumeoctree.h +++ b/indra/llmath/llvolumeoctree.h @@ -37,19 +37,9 @@ class LLVolumeTriangle : public LLRefCount { public: - void* operator new(size_t size) - { - return ll_aligned_malloc_16(size); - } - - void operator delete(void* ptr) - { - ll_aligned_free_16(ptr); - } - LLVolumeTriangle() { - mBinIndex = -1; + } LLVolumeTriangle(const LLVolumeTriangle& rhs) @@ -68,38 +58,21 @@ public: } - LL_ALIGN_16(LLVector4a mPositionGroup); + LLVector4a mPositionGroup; const LLVector4a* mV[3]; U16 mIndex[3]; F32 mRadius; - mutable S32 mBinIndex; - virtual const LLVector4a& getPositionGroup() const; virtual const F32& getBinRadius() const; - - S32 getBinIndex() const { return mBinIndex; } - void setBinIndex(S32 idx) const { mBinIndex = idx; } - - }; class LLVolumeOctreeListener : public LLOctreeListener<LLVolumeTriangle> { public: - void* operator new(size_t size) - { - return ll_aligned_malloc_16(size); - } - - void operator delete(void* ptr) - { - ll_aligned_free_16(ptr); - } - LLVolumeOctreeListener(LLOctreeNode<LLVolumeTriangle>* node); ~LLVolumeOctreeListener(); @@ -126,8 +99,8 @@ public: public: - LL_ALIGN_16(LLVector4a mBounds[2]); // bounding box (center, size) of this node and all its children (tight fit to objects) - LL_ALIGN_16(LLVector4a mExtents[2]); // extents (min, max) of this node and all its children + LLVector4a mBounds[2]; // bounding box (center, size) of this node and all its children (tight fit to objects) + LLVector4a mExtents[2]; // extents (min, max) of this node and all its children }; class LLOctreeTriangleRayIntersect : public LLOctreeTraveler<LLVolumeTriangle> |