OptimisedUtilProfiler(void) { mOptimisedUtils.push_back(_getOptimisedUtilGeneral()); #if __OGRE_HAVE_SSE if (PlatformInformation::getCpuFeatures() & PlatformInformation::CPU_FEATURE_SSE) { mOptimisedUtils.push_back(_getOptimisedUtilSSE()); } #endif }
/// @copydoc OptimisedUtil::calculateLightFacing virtual void calculateLightFacing( const Vector4& lightPos, const Vector4* faceNormals, char* lightFacings, size_t numFaces) { static ProfileItems results; static size_t index; index = Root::getSingleton().getNextFrameNumber() % mOptimisedUtils.size(); OptimisedUtil* impl = mOptimisedUtils[index]; ProfileItem& profile = results[index]; profile.begin(); impl->calculateLightFacing( lightPos, faceNormals, lightFacings, numFaces); profile.end(); // // Dagon SkeletonAnimation sample test results (CPU timestamp per-function call): // // Pentium 4 3.0G HT Athlon XP 2500+ // // General 171875 86998 // SSE 47934 63995 // // You can put break point here while running test application, to // watch profile results. ++index; // So we can put break point here even if in release build }
/// @copydoc OptimisedUtil::calculateFaceNormals virtual void calculateFaceNormals( const float *positions, const EdgeData::Triangle *triangles, Vector4 *faceNormals, size_t numTriangles) { static ProfileItems results; static size_t index; index = Root::getSingleton().getNextFrameNumber() % mOptimisedUtils.size(); OptimisedUtil* impl = mOptimisedUtils[index]; ProfileItem& profile = results[index]; profile.begin(); impl->calculateFaceNormals( positions, triangles, faceNormals, numTriangles); profile.end(); // // Dagon SkeletonAnimation sample test results (CPU timestamp per-function call): // // Pentium 4 3.0G HT Athlon XP 2500+ // // General 657080 486494 // SSE 223559 399495 // // You can put break point here while running test application, to // watch profile results. ++index; // So we can put break point here even if in release build }
virtual void softwareVertexMorph( Real t, const float *srcPos1, const float *srcPos2, float *dstPos, size_t pos1VSize, size_t pos2VSize, size_t dstVSize, size_t numVertices, bool morphNormals) { static ProfileItems results; static size_t index; index = Root::getSingleton().getNextFrameNumber() % mOptimisedUtils.size(); OptimisedUtil* impl = mOptimisedUtils[index]; ProfileItem& profile = results[index]; profile.begin(); impl->softwareVertexMorph( t, srcPos1, srcPos2, dstPos, pos1VSize, pos2VSize, dstVSize, numVertices, morphNormals); profile.end(); // You can put break point here while running test application, to // watch profile results. ++index; // So we can put break point here even if in release build }
virtual void softwareVertexSkinning( const float *srcPosPtr, float *destPosPtr, const float *srcNormPtr, float *destNormPtr, const float *blendWeightPtr, const unsigned char* blendIndexPtr, const Matrix4* const* blendMatrices, size_t srcPosStride, size_t destPosStride, size_t srcNormStride, size_t destNormStride, size_t blendWeightStride, size_t blendIndexStride, size_t numWeightsPerVertex, size_t numVertices) { static ProfileItems results; static size_t index; index = Root::getSingleton().getNextFrameNumber() % mOptimisedUtils.size(); OptimisedUtil* impl = mOptimisedUtils[index]; ProfileItem& profile = results[index]; profile.begin(); impl->softwareVertexSkinning( srcPosPtr, destPosPtr, srcNormPtr, destNormPtr, blendWeightPtr, blendIndexPtr, blendMatrices, srcPosStride, destPosStride, srcNormStride, destNormStride, blendWeightStride, blendIndexStride, numWeightsPerVertex, numVertices); profile.end(); // You can put break point here while running test application, to // watch profile results. ++index; // So we can put break point here even if in release build }
OptimisedUtilProfiler(void) { mOptimisedUtils.push_back(_getOptimisedUtilGeneral()); #if __OGRE_HAVE_SSE if (PlatformInformation::getCpuFeatures() & PlatformInformation::CPU_FEATURE_SSE) { mOptimisedUtils.push_back(_getOptimisedUtilSSE()); } //#elif __OGRE_HAVE_VFP // if (PlatformInformation::getCpuFeatures() & PlatformInformation::CPU_FEATURE_VFP) // { // mOptimisedUtils.push_back(_getOptimisedUtilVFP()); // } //#elif __OGRE_HAVE_NEON // if (PlatformInformation::getCpuFeatures() & PlatformInformation::CPU_FEATURE_NEON) // { // mOptimisedUtils.push_back(_getOptimisedUtilNEON()); // } #endif }
virtual void extrudeVertices( const Vector4& lightPos, Real extrudeDist, const float* srcPositions, float* destPositions, size_t numVertices) { static ProfileItems results; static size_t index; index = Root::getSingleton().getNextFrameNumber() % mOptimisedUtils.size(); OptimisedUtil* impl = mOptimisedUtils[index]; ProfileItem& profile = results[index]; profile.begin(); impl->extrudeVertices( lightPos, extrudeDist, srcPositions, destPositions, numVertices); profile.end(); // // Dagon SkeletonAnimation sample test results (CPU timestamp per-function call): // // Pentium 4 3.0G HT Athlon XP 2500+ // // Directional Light, General 38106 92306 // Directional Light, SSE 27292 67055 // // Point Light, General 224209 155483 // Point Light, SSE 56817 106663 // // You can put break point here while running test application, to // watch profile results. ++index; // So we can put break point here even if in release build }
virtual void concatenateAffineMatrices( const Matrix4& baseMatrix, const Matrix4* srcMatrices, Matrix4* dstMatrices, size_t numMatrices) { static ProfileItems results; static size_t index; index = Root::getSingleton().getNextFrameNumber() % mOptimisedUtils.size(); OptimisedUtil* impl = mOptimisedUtils[index]; ProfileItem& profile = results[index]; profile.begin(); impl->concatenateAffineMatrices( baseMatrix, srcMatrices, dstMatrices, numMatrices); profile.end(); // You can put break point here while running test application, to // watch profile results. ++index; // So we can put break point here even if in release build }