From d35e2f533905a65cf1b5c3ff7b5cfc11b210aaf9 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Wed, 2 Dec 2020 00:21:19 +0000 Subject: [PATCH] core(ipp): workaround getIppTopFeatures() value mismatch --- modules/core/src/system.cpp | 15 +++++++++------ modules/ts/src/ts.cpp | 4 +++- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/modules/core/src/system.cpp b/modules/core/src/system.cpp index fcb9ea45ef..ad688a6c68 100644 --- a/modules/core/src/system.cpp +++ b/modules/core/src/system.cpp @@ -2429,6 +2429,13 @@ public: ippTopFeatures = ippCPUID_SSE42; pIppLibInfo = ippiGetLibVersion(); + + // workaround: https://github.com/opencv/opencv/issues/12959 + std::string ippName(pIppLibInfo->Name ? pIppLibInfo->Name : ""); + if (ippName.find("SSE4.2") != std::string::npos) + { + ippTopFeatures = ippCPUID_SSE42; + } } public: @@ -2468,16 +2475,12 @@ int getIppFeatures() #endif } -unsigned long long getIppTopFeatures(); - +#ifdef HAVE_IPP unsigned long long getIppTopFeatures() { -#ifdef HAVE_IPP return getIPPSingleton().ippTopFeatures; -#else - return 0; -#endif } +#endif void setIppStatus(int status, const char * const _funcname, const char * const _filename, int _line) { diff --git a/modules/ts/src/ts.cpp b/modules/ts/src/ts.cpp index bad799dc4d..13f5eff251 100644 --- a/modules/ts/src/ts.cpp +++ b/modules/ts/src/ts.cpp @@ -1122,7 +1122,9 @@ void SystemInfoCollector::OnTestProgramStart(const testing::UnitTest&) } recordPropertyVerbose("cv_cpu_features", "CPU features", cv::getCPUFeaturesLine()); #ifdef HAVE_IPP - recordPropertyVerbose("cv_ipp_version", "Intel(R) IPP version", cv::ipp::useIPP() ? cv::ipp::getIppVersion() : "disabled"); + recordPropertyVerbose("cv_ipp_version", "Intel(R) IPP version", cv::ipp::useIPP() ? cv::ipp::getIppVersion() : "disabled"); + if (cv::ipp::useIPP()) + recordPropertyVerbose("cv_ipp_features", "Intel(R) IPP features code", cv::format("0x%llx", cv::ipp::getIppTopFeatures())); #endif #ifdef HAVE_OPENCL cv::dumpOpenCLInformation();