officecfg/registry/schema/org/openoffice/Office/Calc.xcs | 4 sc/inc/calcconfig.hxx | 44 +- sc/inc/platforminfo.hxx | 4 sc/source/core/inc/openclwrapper.hxx | 3 sc/source/core/opencl/opencl_device.cxx | 26 + sc/source/core/opencl/opencl_device_selection.h | 7 sc/source/core/opencl/openclwrapper.cxx | 227 +++++---------- sc/source/core/tool/calcconfig.cxx | 13 sc/source/core/tool/formulaopt.cxx | 26 - sc/source/core/tool/platforminfo.cxx | 19 + sc/source/ui/optdlg/calcoptionsdlg.cxx | 40 +- sc/source/ui/optdlg/calcoptionsdlg.hxx | 7 sc/uiconfig/scalc/ui/formulacalculationoptions.ui | 40 +- 13 files changed, 247 insertions(+), 213 deletions(-)
New commits: commit 3ecb8eff589d5eaf241d37c5bb89a978a64727f9 Author: Tor Lillqvist <t...@collabora.com> Date: Wed Nov 12 21:49:05 2014 +0200 Check blacklist and whitelist here, too Change-Id: I0e411dccf445cb8d1e2e5238c1164d7ac18d8636 diff --git a/sc/source/core/opencl/opencl_device.cxx b/sc/source/core/opencl/opencl_device.cxx index 2703040..958fd1a 100644 --- a/sc/source/core/opencl/opencl_device.cxx +++ b/sc/source/core/opencl/opencl_device.cxx @@ -26,6 +26,8 @@ #include <boost/scoped_ptr.hpp> #include "opencl_device.hxx" +#include "openclwrapper.hxx" +#include "platforminfo.hxx" #define INPUTSIZE 15360 #define OUTPUTSIZE 15360 @@ -400,6 +402,30 @@ ds_status pickBestDevice(ds_profile* profile, int* bestDeviceIdx) ds_device device = profile->devices[d]; LibreOfficeDeviceScore *pScore = (LibreOfficeDeviceScore*)device.score; + // Check blacklist and whitelist for actual devices + if (device.type == DS_DEVICE_OPENCL_DEVICE) + { + // There is a silly impedance mismatch here. Why do we + // need two different ways to describe an OpenCL platform + // and an OpenCL device driver? + + OpenCLPlatformInfo aPlatform; + OpenCLDeviceInfo aDevice; + + // We know that only the below fields are used by checkForKnownBadCompilers() + aPlatform.maVendor = OUString(device.oclPlatformVendor, strlen(device.oclPlatformVendor), RTL_TEXTENCODING_UTF8); + aDevice.maName = OUString(device.oclDeviceName, strlen(device.oclDeviceName), RTL_TEXTENCODING_UTF8); + aDevice.maDriver = OUString(device.oclDriverVersion, strlen(device.oclDriverVersion), RTL_TEXTENCODING_UTF8); + + // If blacklisted or not whitelisted, ignore it + if (opencl::checkForKnownBadCompilers(aPlatform, aDevice)) + { + SAL_INFO("sc.opencl.device", "Device[" << d << "] " << device.oclDeviceName << " is blacklisted or not whitelisted"); + pScore->fTime = DBL_MAX; + pScore->bNoCLErrors = true; + } + } + double fScore = DBL_MAX; if (pScore) { commit 6f584490d7ec60ea8a6b16aba35898de9edf6921 Author: Tor Lillqvist <t...@collabora.com> Date: Wed Nov 12 21:45:55 2014 +0200 Make checkForKnownBadCompilers() public Change-Id: Icddf3c158e5f45d30467d3da82c197901d8bc380 diff --git a/sc/source/core/inc/openclwrapper.hxx b/sc/source/core/inc/openclwrapper.hxx index 1f11ffc..3da4afe 100644 --- a/sc/source/core/inc/openclwrapper.hxx +++ b/sc/source/core/inc/openclwrapper.hxx @@ -102,6 +102,8 @@ bool switchOpenCLDevice(const OUString* pDeviceId, bool bAutoSelect, void getOpenCLDeviceInfo(size_t& rDeviceId, size_t& rPlatformId); +bool checkForKnownBadCompilers(const OpenCLPlatformInfo& rPlatform, const OpenCLDeviceInfo& rDevice); + }} #endif diff --git a/sc/source/core/opencl/openclwrapper.cxx b/sc/source/core/opencl/openclwrapper.cxx index 2759fcd..87cc1c5 100644 --- a/sc/source/core/opencl/openclwrapper.cxx +++ b/sc/source/core/opencl/openclwrapper.cxx @@ -564,27 +564,6 @@ bool match(const ScCalcConfig::OpenCLImplMatcherSet& rList, const OpenCLPlatform } // based on crashes and hanging during kernel compilation -bool checkForKnownBadCompilers(const OpenCLPlatformInfo& rPlatform, const OpenCLDeviceInfo& rDevice) -{ - // Check blacklist of known bad OpenCL implementations - if (match(ScInterpreter::GetGlobalConfig().maOpenCLBlackList, rPlatform, rDevice, "blacklist")) - { - SAL_INFO("sc.opencl", "Rejecting"); - return true; - } - - // Check for whitelist of known good OpenCL implementations - if (match(ScInterpreter::GetGlobalConfig().maOpenCLWhiteList, rPlatform, rDevice, "whitelist")) - { - SAL_INFO("sc.opencl", "Approving"); - return false; - } - - // Fallback: reject - SAL_INFO("sc.opencl", "Fallback: rejecting platform=" << rPlatform << ", device=" << rDevice); - return true; -} - void createDeviceInfo(cl_device_id aDeviceId, OpenCLPlatformInfo& rPlatformInfo) { OpenCLDeviceInfo aDeviceInfo; @@ -685,6 +664,27 @@ bool createPlatformInfo(cl_platform_id nPlatformId, OpenCLPlatformInfo& rPlatfor } +bool checkForKnownBadCompilers(const OpenCLPlatformInfo& rPlatform, const OpenCLDeviceInfo& rDevice) +{ + // Check blacklist of known bad OpenCL implementations + if (match(ScInterpreter::GetGlobalConfig().maOpenCLBlackList, rPlatform, rDevice, "blacklist")) + { + SAL_INFO("sc.opencl", "Rejecting"); + return true; + } + + // Check for whitelist of known good OpenCL implementations + if (match(ScInterpreter::GetGlobalConfig().maOpenCLWhiteList, rPlatform, rDevice, "whitelist")) + { + SAL_INFO("sc.opencl", "Approving"); + return false; + } + + // Fallback: reject + SAL_INFO("sc.opencl", "Fallback: rejecting platform=" << rPlatform << ", device=" << rDevice); + return true; +} + const std::vector<OpenCLPlatformInfo>& fillOpenCLInfo() { static std::vector<OpenCLPlatformInfo> aPlatforms; commit 8b290c56dfcd6cc43a422601408378c887d84316 Author: Tor Lillqvist <t...@collabora.com> Date: Wed Nov 12 20:57:15 2014 +0200 Specify platform vendor, not platform name Change-Id: I4dc457a08d3baa48d461c27d325638735689f5fe diff --git a/officecfg/registry/schema/org/openoffice/Office/Calc.xcs b/officecfg/registry/schema/org/openoffice/Office/Calc.xcs index 3e99b86..42b28bc 100644 --- a/officecfg/registry/schema/org/openoffice/Office/Calc.xcs +++ b/officecfg/registry/schema/org/openoffice/Office/Calc.xcs @@ -1394,7 +1394,7 @@ <info> <desc>Combinations of (OS, OS version, OpenCL platform vendor, OpenCL device name, OpenCL driver version) that are known to be good. Has higher priority than OpenCLBlackList. Each entry is a string consisting of five parts separated by slashes. In case a slash occurs inside a part, it is prefixed by a backslash. And in case a backslash occurs inside a part, it is also prefixed by another backslash. Any part might contain a single asterisk as a wildcard, matching any value, but there is no more generic regexp support.</desc> </info> - <value oor:separator=";">Linux/*/AMD Accelerated Parallel Processing/*/1445.5 (sse2,avx)/</value> + <value oor:separator=";">Linux/*/Advanced Micro Devices, Inc./*/1445.5 (sse2,avx)/</value> </prop> <prop oor:name="OpenCLBlackList" oor:type="oor:string-list" oor:nillable="false"> <!-- UIHints: Tools - Options Spreadsheet Formula --> diff --git a/sc/source/core/tool/calcconfig.cxx b/sc/source/core/tool/calcconfig.cxx index 1a2e69a..0d9b769 100644 --- a/sc/source/core/tool/calcconfig.cxx +++ b/sc/source/core/tool/calcconfig.cxx @@ -45,7 +45,7 @@ void ScCalcConfig::setOpenCLConfigToDefault() maOpenCLSubsetOpCodes.insert(ocAverage); maOpenCLSubsetOpCodes.insert(ocSumIfs); - maOpenCLWhiteList.insert(OpenCLImplMatcher("Linux", "*", "AMD Accelerated Parallel Processing", "*", "1445.5 (sse2,avx)", "")); + maOpenCLWhiteList.insert(OpenCLImplMatcher("Linux", "*", "Advanced Micro Devices, Inc.", "*", "1445.5 (sse2,avx)", "")); maOpenCLBlackList.insert(OpenCLImplMatcher("Windows", "*", "Intel(R) Corporation", "*", "9.17.10.2884", "")); maOpenCLBlackList.insert(OpenCLImplMatcher("SuperOS", "*", "Big Corp, Inc.", "Whizz\\Grafix", "4.2/beta;3", "4.4")); commit c51fc2df9223d4c57e6749da553e29ae4d351782 Author: Tor Lillqvist <t...@collabora.com> Date: Wed Nov 12 20:56:11 2014 +0200 We want the platform vendor here, not the platform name We already have the platform name in maName. Change-Id: Iec94ce72cbaba0adf1c82a90892ab98851f5c8ca diff --git a/sc/source/core/opencl/openclwrapper.cxx b/sc/source/core/opencl/openclwrapper.cxx index 1db26ec..2759fcd 100644 --- a/sc/source/core/opencl/openclwrapper.cxx +++ b/sc/source/core/opencl/openclwrapper.cxx @@ -661,7 +661,7 @@ bool createPlatformInfo(cl_platform_id nPlatformId, OpenCLPlatformInfo& rPlatfor if(nState != CL_SUCCESS) return false; - rPlatformInfo.maVendor = OUString::createFromAscii(pName); + rPlatformInfo.maVendor = OUString::createFromAscii(pVendor); cl_uint nDevices; nState = clGetDeviceIDs(nPlatformId, CL_DEVICE_TYPE_ALL, 0, NULL, &nDevices); commit d12efada389643ab0e13a280246d14caed273029 Author: Tor Lillqvist <t...@collabora.com> Date: Wed Nov 12 20:45:07 2014 +0200 Refactor and fix checkForKnownBadCompilers() Change-Id: Ib2ee1a726fd54c34728234bc1a6b25a05b4e98b5 diff --git a/sc/source/core/opencl/openclwrapper.cxx b/sc/source/core/opencl/openclwrapper.cxx index f91e062..1db26ec 100644 --- a/sc/source/core/opencl/openclwrapper.cxx +++ b/sc/source/core/opencl/openclwrapper.cxx @@ -517,81 +517,66 @@ bool OpenCLDevice::initOpenCLRunEnv( GPUEnv *gpuInfo ) namespace { -// based on crashes and hanging during kernel compilation -bool checkForKnownBadCompilers(const OpenCLPlatformInfo& rPlatform, const OpenCLDeviceInfo& rDevice) +bool match(const ScCalcConfig::OpenCLImplMatcher& rListEntry, const OpenCLPlatformInfo& rPlatform, const OpenCLDeviceInfo& rDevice) { - // Check blacklist of known bad OpenCL implementations - - for (auto i = ScInterpreter::GetGlobalConfig().maOpenCLBlackList.cbegin(); - i != ScInterpreter::GetGlobalConfig().maOpenCLBlackList.end(); - ++i) - { - SAL_INFO("sc.opencl", "Looking for match for platform=" << rPlatform << ", device=" << rDevice << " in blacklist entry=" << *i); - #if defined WNT - if (i->maOS != "*" && i->maOS != "Windows") - continue; + if (rListEntry.maOS != "*" && rListEntry.maOS != "Windows") + return false; #elif defined LINUX - if (i->maOS != "*" && i->maOS != "Linux") - continue; + if (rListEntry.maOS != "*" && rListEntry.maOS != "Linux") + return false; #elif defined MACOSX - if (i->maOS != "*" && i->maOS != "OS X") - continue; + if (rListEntry.maOS != "*" && rListEntry.maOS != "OS X") + return false; #endif - // OS version check not yet implemented - - if (i->maPlatformVendor != "*" && i->maPlatformVendor != rDevice.maVendor) - continue; + // OS version check not yet implemented - if (i->maDevice != "*" && i->maDevice != rDevice.maName) - continue; + if (rListEntry.maPlatformVendor != "*" && rListEntry.maPlatformVendor != rPlatform.maVendor) + return false; - if (i->maDriverVersionMin != "*" && - (comphelper::string::compareVersionStrings(i->maDriverVersionMin, rDevice.maDriver) > 0 || - (i->maDriverVersionMax != "" && comphelper::string::compareVersionStrings(i->maDriverVersionMax, rDevice.maDriver) < 0) || - (i->maDriverVersionMax == "" && comphelper::string::compareVersionStrings(i->maDriverVersionMin, rDevice.maDriver) < 0))) - continue; + if (rListEntry.maDevice != "*" && rListEntry.maDevice != rDevice.maName) + return false; - // It matches; reject it - SAL_INFO("sc.opencl", "Match! Rejecting"); - return true; - } + if (rListEntry.maDriverVersionMin != "*" && + (comphelper::string::compareVersionStrings(rListEntry.maDriverVersionMin, rDevice.maDriver) > 0 || + (rListEntry.maDriverVersionMax != "" && comphelper::string::compareVersionStrings(rListEntry.maDriverVersionMax, rDevice.maDriver) < 0) || + (rListEntry.maDriverVersionMax == "" && comphelper::string::compareVersionStrings(rListEntry.maDriverVersionMin, rDevice.maDriver) < 0))) + return false; - // Check for whitelist of known good OpenCL implementations + return true; +} - for (auto i = ScInterpreter::GetGlobalConfig().maOpenCLWhiteList.cbegin(); - i != ScInterpreter::GetGlobalConfig().maOpenCLWhiteList.end(); - ++i) +bool match(const ScCalcConfig::OpenCLImplMatcherSet& rList, const OpenCLPlatformInfo& rPlatform, const OpenCLDeviceInfo& rDevice, const char* sKindOfList) +{ + for (auto i = rList.cbegin(); i != rList.end(); ++i) { - SAL_INFO("sc.opencl", "Looking for match for platform=" << rPlatform << ", device=" << rDevice << " in whitelist entry=" << *i); + SAL_INFO("sc.opencl", "Looking for match for platform=" << rPlatform << ", device=" << rDevice << + " in " << sKindOfList << " entry=" << *i); -#if defined WNT - if (i->maOS != "*" && i->maOS != "Windows") - continue; -#elif defined LINUX - if (i->maOS != "*" && i->maOS != "Linux") - continue; -#elif defined MACOSX - if (i->maOS != "*" && i->maOS != "OS X") - continue; -#endif - - // OS version check not yet implemented - - if (i->maPlatformVendor != "*" && i->maPlatformVendor != rPlatform.maVendor) - continue; - - if (i->maDevice != "*" && i->maDevice != rDevice.maName) - continue; + if (match(*i, rPlatform, rDevice)) + { + SAL_INFO("sc.opencl", "Match!"); + return true; + } + } + return false; +} - if (i->maDriverVersionMin != "*" && - (comphelper::string::compareVersionStrings(i->maDriverVersionMin, rDevice.maDriver) > 0 || - comphelper::string::compareVersionStrings(i->maDriverVersionMax, rDevice.maDriver) < 0)) - continue; +// based on crashes and hanging during kernel compilation +bool checkForKnownBadCompilers(const OpenCLPlatformInfo& rPlatform, const OpenCLDeviceInfo& rDevice) +{ + // Check blacklist of known bad OpenCL implementations + if (match(ScInterpreter::GetGlobalConfig().maOpenCLBlackList, rPlatform, rDevice, "blacklist")) + { + SAL_INFO("sc.opencl", "Rejecting"); + return true; + } - // It matches; approve it - SAL_INFO("sc.opencl", "Match! Approving"); + // Check for whitelist of known good OpenCL implementations + if (match(ScInterpreter::GetGlobalConfig().maOpenCLWhiteList, rPlatform, rDevice, "whitelist")) + { + SAL_INFO("sc.opencl", "Approving"); return false; } commit af8a6797918fa9f6450dae856f519257da00be3c Author: Tor Lillqvist <t...@collabora.com> Date: Wed Nov 12 20:17:48 2014 +0200 A bit more informative SAL_INFO logging Change-Id: I60c38129a532e3843db4a422755ae50e4689b91f diff --git a/sc/source/core/opencl/openclwrapper.cxx b/sc/source/core/opencl/openclwrapper.cxx index c307371..f91e062 100644 --- a/sc/source/core/opencl/openclwrapper.cxx +++ b/sc/source/core/opencl/openclwrapper.cxx @@ -526,6 +526,8 @@ bool checkForKnownBadCompilers(const OpenCLPlatformInfo& rPlatform, const OpenCL i != ScInterpreter::GetGlobalConfig().maOpenCLBlackList.end(); ++i) { + SAL_INFO("sc.opencl", "Looking for match for platform=" << rPlatform << ", device=" << rDevice << " in blacklist entry=" << *i); + #if defined WNT if (i->maOS != "*" && i->maOS != "Windows") continue; @@ -552,7 +554,7 @@ bool checkForKnownBadCompilers(const OpenCLPlatformInfo& rPlatform, const OpenCL continue; // It matches; reject it - SAL_INFO("sc.opencl", "Match for platform=" << rPlatform << ", device=" << rDevice << " in blacklist=" << *i); + SAL_INFO("sc.opencl", "Match! Rejecting"); return true; } @@ -562,6 +564,8 @@ bool checkForKnownBadCompilers(const OpenCLPlatformInfo& rPlatform, const OpenCL i != ScInterpreter::GetGlobalConfig().maOpenCLWhiteList.end(); ++i) { + SAL_INFO("sc.opencl", "Looking for match for platform=" << rPlatform << ", device=" << rDevice << " in whitelist entry=" << *i); + #if defined WNT if (i->maOS != "*" && i->maOS != "Windows") continue; @@ -587,7 +591,7 @@ bool checkForKnownBadCompilers(const OpenCLPlatformInfo& rPlatform, const OpenCL continue; // It matches; approve it - SAL_INFO("sc.opencl", "Match for platform=" << rPlatform << ", device=" << rDevice << " in whitelist=" << *i); + SAL_INFO("sc.opencl", "Match! Approving"); return false; } commit 607a306ab74f4b84f277605762eea81142a820dc Author: Tor Lillqvist <t...@collabora.com> Date: Wed Nov 12 19:12:56 2014 +0200 Make it match ScCalcConfig::setOpenCLConfigToDefault() Change-Id: I6555028d098e9dd9bde466441c1c9a9f58782ca2 diff --git a/officecfg/registry/schema/org/openoffice/Office/Calc.xcs b/officecfg/registry/schema/org/openoffice/Office/Calc.xcs index 918eba0..3e99b86 100644 --- a/officecfg/registry/schema/org/openoffice/Office/Calc.xcs +++ b/officecfg/registry/schema/org/openoffice/Office/Calc.xcs @@ -1394,7 +1394,7 @@ <info> <desc>Combinations of (OS, OS version, OpenCL platform vendor, OpenCL device name, OpenCL driver version) that are known to be good. Has higher priority than OpenCLBlackList. Each entry is a string consisting of five parts separated by slashes. In case a slash occurs inside a part, it is prefixed by a backslash. And in case a backslash occurs inside a part, it is also prefixed by another backslash. Any part might contain a single asterisk as a wildcard, matching any value, but there is no more generic regexp support.</desc> </info> - <value oor:separator=";">*/*/AMD Accelerated Parallel Processing/*/1445.5 (sse2,avx)/</value> + <value oor:separator=";">Linux/*/AMD Accelerated Parallel Processing/*/1445.5 (sse2,avx)/</value> </prop> <prop oor:name="OpenCLBlackList" oor:type="oor:string-list" oor:nillable="false"> <!-- UIHints: Tools - Options Spreadsheet Formula --> commit 2057d6c19c1c874f00eadef663d612a0f09fd09f Author: Tor Lillqvist <t...@collabora.com> Date: Wed Nov 12 19:03:32 2014 +0200 Add first whitelist and blacklist check attempt to checkForKnownBadCompilers() Not sure if that is the right place for it. Change-Id: I246bb6191513f5c1557b9f211915becce0908d24 diff --git a/sc/source/core/opencl/openclwrapper.cxx b/sc/source/core/opencl/openclwrapper.cxx index e6a0f7d..c307371 100644 --- a/sc/source/core/opencl/openclwrapper.cxx +++ b/sc/source/core/opencl/openclwrapper.cxx @@ -11,6 +11,7 @@ #include "openclwrapper.hxx" +#include <comphelper/string.hxx> #include <rtl/ustring.hxx> #include <rtl/strbuf.hxx> #include <rtl/digest.h> @@ -19,6 +20,8 @@ #include <sal/config.h> #include <osl/file.hxx> +#include "calcconfig.hxx" +#include "interpre.hxx" #include "opencl_device.hxx" #include <stdio.h> @@ -515,23 +518,82 @@ bool OpenCLDevice::initOpenCLRunEnv( GPUEnv *gpuInfo ) namespace { // based on crashes and hanging during kernel compilation -bool checkForKnownBadCompilers(const OpenCLDeviceInfo& rInfo) +bool checkForKnownBadCompilers(const OpenCLPlatformInfo& rPlatform, const OpenCLDeviceInfo& rDevice) { + // Check blacklist of known bad OpenCL implementations - struct { - const char* pVendorName; const char* pDriverVersion; - } aBadOpenCLCompilers[] = { - { "Intel(R) Corporation", "9.17.10.2884" } - }; + for (auto i = ScInterpreter::GetGlobalConfig().maOpenCLBlackList.cbegin(); + i != ScInterpreter::GetGlobalConfig().maOpenCLBlackList.end(); + ++i) + { +#if defined WNT + if (i->maOS != "*" && i->maOS != "Windows") + continue; +#elif defined LINUX + if (i->maOS != "*" && i->maOS != "Linux") + continue; +#elif defined MACOSX + if (i->maOS != "*" && i->maOS != "OS X") + continue; +#endif + + // OS version check not yet implemented + + if (i->maPlatformVendor != "*" && i->maPlatformVendor != rDevice.maVendor) + continue; + + if (i->maDevice != "*" && i->maDevice != rDevice.maName) + continue; + + if (i->maDriverVersionMin != "*" && + (comphelper::string::compareVersionStrings(i->maDriverVersionMin, rDevice.maDriver) > 0 || + (i->maDriverVersionMax != "" && comphelper::string::compareVersionStrings(i->maDriverVersionMax, rDevice.maDriver) < 0) || + (i->maDriverVersionMax == "" && comphelper::string::compareVersionStrings(i->maDriverVersionMin, rDevice.maDriver) < 0))) + continue; + + // It matches; reject it + SAL_INFO("sc.opencl", "Match for platform=" << rPlatform << ", device=" << rDevice << " in blacklist=" << *i); + return true; + } + + // Check for whitelist of known good OpenCL implementations - for(size_t i = 0; i < SAL_N_ELEMENTS(aBadOpenCLCompilers); ++i) + for (auto i = ScInterpreter::GetGlobalConfig().maOpenCLWhiteList.cbegin(); + i != ScInterpreter::GetGlobalConfig().maOpenCLWhiteList.end(); + ++i) { - if(rInfo.maVendor == OUString::createFromAscii(aBadOpenCLCompilers[i].pVendorName) && - rInfo.maDriver == OUString::createFromAscii(aBadOpenCLCompilers[i].pDriverVersion)) - return true; +#if defined WNT + if (i->maOS != "*" && i->maOS != "Windows") + continue; +#elif defined LINUX + if (i->maOS != "*" && i->maOS != "Linux") + continue; +#elif defined MACOSX + if (i->maOS != "*" && i->maOS != "OS X") + continue; +#endif + + // OS version check not yet implemented + + if (i->maPlatformVendor != "*" && i->maPlatformVendor != rPlatform.maVendor) + continue; + + if (i->maDevice != "*" && i->maDevice != rDevice.maName) + continue; + + if (i->maDriverVersionMin != "*" && + (comphelper::string::compareVersionStrings(i->maDriverVersionMin, rDevice.maDriver) > 0 || + comphelper::string::compareVersionStrings(i->maDriverVersionMax, rDevice.maDriver) < 0)) + continue; + + // It matches; approve it + SAL_INFO("sc.opencl", "Match for platform=" << rPlatform << ", device=" << rDevice << " in whitelist=" << *i); + return false; } - return false; + // Fallback: reject + SAL_INFO("sc.opencl", "Fallback: rejecting platform=" << rPlatform << ", device=" << rDevice); + return true; } void createDeviceInfo(cl_device_id aDeviceId, OpenCLPlatformInfo& rPlatformInfo) @@ -590,7 +652,7 @@ void createDeviceInfo(cl_device_id aDeviceId, OpenCLPlatformInfo& rPlatformInfo) aDeviceInfo.mnComputeUnits = nComputeUnits; - if(!checkForKnownBadCompilers(aDeviceInfo)) + if(!checkForKnownBadCompilers(rPlatformInfo, aDeviceInfo)) rPlatformInfo.maDevices.push_back(aDeviceInfo); } commit 6e77fd94bbe764a6e52ce5af7d9c4a8d16fef61a Author: Tor Lillqvist <t...@collabora.com> Date: Wed Nov 12 19:01:56 2014 +0200 Add a whitelist entry, too (for what I happen to be running at the moment) I am starting to suspect that we will need regexps for the driver versions, not just match-anything wildcard "*" and version number comparison a'la strverscmp. Change-Id: I6945f8be2cf478a8f0c76c5d9f82b2d60a981f37 diff --git a/officecfg/registry/schema/org/openoffice/Office/Calc.xcs b/officecfg/registry/schema/org/openoffice/Office/Calc.xcs index e4a7e2d..918eba0 100644 --- a/officecfg/registry/schema/org/openoffice/Office/Calc.xcs +++ b/officecfg/registry/schema/org/openoffice/Office/Calc.xcs @@ -1394,7 +1394,7 @@ <info> <desc>Combinations of (OS, OS version, OpenCL platform vendor, OpenCL device name, OpenCL driver version) that are known to be good. Has higher priority than OpenCLBlackList. Each entry is a string consisting of five parts separated by slashes. In case a slash occurs inside a part, it is prefixed by a backslash. And in case a backslash occurs inside a part, it is also prefixed by another backslash. Any part might contain a single asterisk as a wildcard, matching any value, but there is no more generic regexp support.</desc> </info> - <value/> + <value oor:separator=";">*/*/AMD Accelerated Parallel Processing/*/1445.5 (sse2,avx)/</value> </prop> <prop oor:name="OpenCLBlackList" oor:type="oor:string-list" oor:nillable="false"> <!-- UIHints: Tools - Options Spreadsheet Formula --> diff --git a/sc/source/core/tool/calcconfig.cxx b/sc/source/core/tool/calcconfig.cxx index 36d1fa5..1a2e69a 100644 --- a/sc/source/core/tool/calcconfig.cxx +++ b/sc/source/core/tool/calcconfig.cxx @@ -44,6 +44,9 @@ void ScCalcConfig::setOpenCLConfigToDefault() maOpenCLSubsetOpCodes.insert(ocSum); maOpenCLSubsetOpCodes.insert(ocAverage); maOpenCLSubsetOpCodes.insert(ocSumIfs); + + maOpenCLWhiteList.insert(OpenCLImplMatcher("Linux", "*", "AMD Accelerated Parallel Processing", "*", "1445.5 (sse2,avx)", "")); + maOpenCLBlackList.insert(OpenCLImplMatcher("Windows", "*", "Intel(R) Corporation", "*", "9.17.10.2884", "")); maOpenCLBlackList.insert(OpenCLImplMatcher("SuperOS", "*", "Big Corp, Inc.", "Whizz\\Grafix", "4.2/beta;3", "4.4")); } commit 44643be33e25d3949d019000412f5ecea1fbb5cf Author: Tor Lillqvist <t...@collabora.com> Date: Wed Nov 12 19:00:36 2014 +0200 Add output operators for SAL_INFO convenience Change-Id: Iee3be5f4847f12f3463438435b1713c5ad74d3d0 diff --git a/sc/inc/platforminfo.hxx b/sc/inc/platforminfo.hxx index c7bb377..8fd0ee2 100644 --- a/sc/inc/platforminfo.hxx +++ b/sc/inc/platforminfo.hxx @@ -10,6 +10,7 @@ #ifndef INCLUDED_SC_INC_PLATFORMINFO_HXX #define INCLUDED_SC_INC_PLATFORMINFO_HXX +#include <ostream> #include <vector> #include <rtl/ustring.hxx> @@ -43,4 +44,7 @@ struct SC_DLLPUBLIC OpenCLPlatformInfo } +SC_DLLPUBLIC std::ostream& operator<<(std::ostream& rStream, const sc::OpenCLPlatformInfo& rPlatform); +SC_DLLPUBLIC std::ostream& operator<<(std::ostream& rStream, const sc::OpenCLDeviceInfo& rDevice); + #endif diff --git a/sc/source/core/tool/platforminfo.cxx b/sc/source/core/tool/platforminfo.cxx index c983f48..6258844 100644 --- a/sc/source/core/tool/platforminfo.cxx +++ b/sc/source/core/tool/platforminfo.cxx @@ -26,4 +26,23 @@ OpenCLPlatformInfo::OpenCLPlatformInfo() } +std::ostream& operator<<(std::ostream& rStream, const sc::OpenCLPlatformInfo& rPlatform) +{ + rStream << "{" + "Vendor=" << rPlatform.maVendor << "," + "Name=" << rPlatform.maName << + "}"; + return rStream; +} + +std::ostream& operator<<(std::ostream& rStream, const sc::OpenCLDeviceInfo& rDevice) +{ + rStream << "{" + "Name=" << rDevice.maName << "," + "Vendor=" << rDevice.maVendor << "," + "Driver=" << rDevice.maDriver << + "}"; + return rStream; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit 95bb07b1be264660174b25d316f7fb91fec35a7a Author: Tor Lillqvist <t...@collabora.com> Date: Wed Nov 12 15:20:44 2014 +0200 Bin effectively dead code initOpenCLAttr() sets mnIsUserCreated to 1, thus it can never be 0 in initOpenCLRunEnv(). Change-Id: If42b4fac082284bd0924292d234911b3c319f9ab diff --git a/sc/source/core/opencl/openclwrapper.cxx b/sc/source/core/opencl/openclwrapper.cxx index 4516af5..e6a0f7d 100644 --- a/sc/source/core/opencl/openclwrapper.cxx +++ b/sc/source/core/opencl/openclwrapper.cxx @@ -501,122 +501,6 @@ void checkDeviceForDoubleSupport(cl_device_id deviceId, bool& bKhrFp64, bool& bA bool OpenCLDevice::initOpenCLRunEnv( GPUEnv *gpuInfo ) { - size_t length; - cl_int clStatus; - cl_uint numPlatforms, numDevices; - cl_platform_id *platforms; - - // Have a look at the available platforms. - - if ( !gpuInfo->mnIsUserCreated ) - { - clStatus = clGetPlatformIDs( 0, NULL, &numPlatforms ); - CHECK_OPENCL(clStatus, "clGetPlatformIDs"); - gpuInfo->mpPlatformID = NULL; - - if ( 0 < numPlatforms ) - { - char platformName[256]; - platforms = (cl_platform_id*) malloc( numPlatforms * sizeof( cl_platform_id ) ); - if (!platforms) - { - return true; - } - clStatus = clGetPlatformIDs( numPlatforms, platforms, NULL ); - CHECK_OPENCL(clStatus, "clGetPlatformIDs"); - - for ( unsigned int i = 0; i < numPlatforms; i++ ) - { - clStatus = clGetPlatformInfo( platforms[i], CL_PLATFORM_VENDOR, - sizeof( platformName ), platformName, NULL ); - - if ( clStatus != CL_SUCCESS ) - { - break; - } - gpuInfo->mpPlatformID = platforms[i]; - - //if (!strcmp(platformName, "Intel(R) Coporation")) - //if( !strcmp( platformName, "Advanced Micro Devices, Inc." )) - { - gpuInfo->mpPlatformID = platforms[i]; - if ( getenv("SC_OPENCLCPU") ) - { - clStatus = clGetDeviceIDs(gpuInfo->mpPlatformID, // platform - CL_DEVICE_TYPE_CPU, // device_type for CPU device - 0, // num_entries - NULL, // devices - &numDevices); - } - else - { - clStatus = clGetDeviceIDs(gpuInfo->mpPlatformID, // platform - CL_DEVICE_TYPE_GPU, // device_type for GPU device - 0, // num_entries - NULL, // devices - &numDevices); - } - if ( clStatus != CL_SUCCESS ) - continue; - - if ( numDevices ) - break; - } - } - free( platforms ); - if ( clStatus != CL_SUCCESS ) - return true; - } - if ( NULL == gpuInfo->mpPlatformID ) - return true; - - // Use available platform. - cl_context_properties cps[3]; - cps[0] = CL_CONTEXT_PLATFORM; - cps[1] = reinterpret_cast<cl_context_properties>(gpuInfo->mpPlatformID); - cps[2] = 0; - // Set device type for OpenCL - if ( getenv("SC_OPENCLCPU") ) - { - gpuInfo->mDevType = CL_DEVICE_TYPE_CPU; - } - else - { - gpuInfo->mDevType = CL_DEVICE_TYPE_GPU; - } - gpuInfo->mpContext = clCreateContextFromType( cps, gpuInfo->mDevType, NULL, NULL, &clStatus ); - - if ( ( gpuInfo->mpContext == (cl_context) NULL) || ( clStatus != CL_SUCCESS ) ) - { - gpuInfo->mDevType = CL_DEVICE_TYPE_CPU; - gpuInfo->mpContext = clCreateContextFromType( cps, gpuInfo->mDevType, NULL, NULL, &clStatus ); - } - if ( ( gpuInfo->mpContext == (cl_context) NULL) || ( clStatus != CL_SUCCESS ) ) - { - gpuInfo->mDevType = CL_DEVICE_TYPE_DEFAULT; - gpuInfo->mpContext = clCreateContextFromType( cps, gpuInfo->mDevType, NULL, NULL, &clStatus ); - } - if ( ( gpuInfo->mpContext == (cl_context) NULL) || ( clStatus != CL_SUCCESS ) ) - return true; - // Detect OpenCL devices. - // First, get the size of device list data - clStatus = clGetContextInfo( gpuInfo->mpContext, CL_CONTEXT_DEVICES, 0, NULL, &length ); - if ( ( clStatus != CL_SUCCESS ) || ( length == 0 ) ) - return true; - // Now allocate memory for device list based on the size we got earlier - gpuInfo->mpArryDevsID = (cl_device_id*) malloc( length ); - if ( gpuInfo->mpArryDevsID == (cl_device_id*) NULL ) - return true; - // Now, get the device list data - clStatus = clGetContextInfo( gpuInfo->mpContext, CL_CONTEXT_DEVICES, length, - gpuInfo->mpArryDevsID, NULL ); - CHECK_OPENCL(clStatus, "clGetContextInfo"); - - // Create OpenCL command queue. - gpuInfo->mpCmdQueue = clCreateCommandQueue( gpuInfo->mpContext, gpuInfo->mpArryDevsID[0], 0, &clStatus ); - - CHECK_OPENCL(clStatus, "clCreateCommandQueue"); - } bool bKhrFp64 = false; bool bAmdFp64 = false; @@ -912,10 +796,7 @@ bool switchOpenCLDevice(const OUString* pDevice, bool bAutoSelect, bool bForceEv // (Assuming the above question refers to the mpArryDevsID // initialisation below.) Because otherwise the code crashes in - // initOpenCLRunEnv(). Note that the initOpenCLAttr() call above - // sets mnIsUserCreated to 1, thus the code in initOpenCLRunEnv() - // that would initialise mpArryDevsID is not executed. Confused? - // You should be. + // initOpenCLRunEnv(). Confused? You should be. OpenCLDevice::gpuEnv.mpArryDevsID = (cl_device_id*) malloc( sizeof(cl_device_id) ); OpenCLDevice::gpuEnv.mpArryDevsID[0] = pDeviceId; commit 5c8f76ff6c9cd74325572e9078021e318fd72afe Author: Tor Lillqvist <t...@collabora.com> Date: Wed Nov 12 15:02:37 2014 +0200 Add comment that replies to the question in comment above Change-Id: Iad8896df4491b2b4363fb2d16134e92dd9545c35 diff --git a/sc/source/core/opencl/openclwrapper.cxx b/sc/source/core/opencl/openclwrapper.cxx index 3812bd7..4516af5 100644 --- a/sc/source/core/opencl/openclwrapper.cxx +++ b/sc/source/core/opencl/openclwrapper.cxx @@ -909,8 +909,17 @@ bool switchOpenCLDevice(const OUString* pDevice, bool bAutoSelect, bool bForceEv OpenCLDevice::initOpenCLAttr(&env); // why do we need this at all? + + // (Assuming the above question refers to the mpArryDevsID + // initialisation below.) Because otherwise the code crashes in + // initOpenCLRunEnv(). Note that the initOpenCLAttr() call above + // sets mnIsUserCreated to 1, thus the code in initOpenCLRunEnv() + // that would initialise mpArryDevsID is not executed. Confused? + // You should be. + OpenCLDevice::gpuEnv.mpArryDevsID = (cl_device_id*) malloc( sizeof(cl_device_id) ); OpenCLDevice::gpuEnv.mpArryDevsID[0] = pDeviceId; + return !OpenCLDevice::initOpenCLRunEnv(0); } commit de99aa16c0fbbd2801c5f90788adbea7013be11f Author: Tor Lillqvist <t...@collabora.com> Date: Wed Nov 12 14:14:32 2014 +0200 Don't use misleading 'm' prefix for non-member variables Change-Id: I5b3042e4b5cc11445a8f704df686cebe56874b12 diff --git a/sc/source/core/opencl/openclwrapper.cxx b/sc/source/core/opencl/openclwrapper.cxx index 0c01274..3812bd7 100644 --- a/sc/source/core/opencl/openclwrapper.cxx +++ b/sc/source/core/opencl/openclwrapper.cxx @@ -136,16 +136,16 @@ std::vector<boost::shared_ptr<osl::File> > OpenCLDevice::binaryGenerated( const return aGeneratedFiles; // grab the handles to all of the devices in the context. - boost::scoped_array<cl_device_id> mpArryDevsID(new cl_device_id[numDevices]); + boost::scoped_array<cl_device_id> pArryDevsID(new cl_device_id[numDevices]); clStatus = clGetContextInfo( context, CL_CONTEXT_DEVICES, - sizeof( cl_device_id ) * numDevices, mpArryDevsID.get(), NULL ); + sizeof( cl_device_id ) * numDevices, pArryDevsID.get(), NULL ); if(clStatus != CL_SUCCESS) return aGeneratedFiles; for ( size_t i = 0; i < numDevices; i++ ) { - if ( mpArryDevsID[i] != 0 ) + if ( pArryDevsID[i] != 0 ) { OString fileName = createFileName(gpuEnv.mpArryDevsID[i], clFileName); osl::File* pNewFile = new osl::File(rtl::OStringToOUString(fileName, RTL_TEXTENCODING_UTF8)); @@ -191,10 +191,10 @@ bool OpenCLDevice::generatBinFromKernelSource( cl_program program, const char * sizeof(numDevices), &numDevices, NULL ); CHECK_OPENCL( clStatus, "clGetProgramInfo" ); - std::vector<cl_device_id> mpArryDevsID(numDevices); + std::vector<cl_device_id> pArryDevsID(numDevices); /* grab the handles to all of the devices in the program. */ clStatus = clGetProgramInfo( program, CL_PROGRAM_DEVICES, - sizeof(cl_device_id) * numDevices, &mpArryDevsID[0], NULL ); + sizeof(cl_device_id) * numDevices, &pArryDevsID[0], NULL ); CHECK_OPENCL( clStatus, "clGetProgramInfo" ); /* figure out the sizes of each of the binaries. */ @@ -229,7 +229,7 @@ bool OpenCLDevice::generatBinFromKernelSource( cl_program program, const char * if ( binarySizes[i] != 0 ) { - OString fileName = createFileName(mpArryDevsID[i], clFileName); + OString fileName = createFileName(pArryDevsID[i], clFileName); if ( !writeBinaryToFile( fileName, binaries[i], binarySizes[i] ) ) SAL_INFO("sc.opencl.file", "Writing binary file '" << fileName << "': FAIL"); @@ -388,9 +388,9 @@ bool OpenCLDevice::buildProgramFromBinary(const char* buildOption, GPUEnv* gpuIn } // grab the handles to all of the devices in the context. - boost::scoped_array<cl_device_id> mpArryDevsID(new cl_device_id[numDevices]); + boost::scoped_array<cl_device_id> pArryDevsID(new cl_device_id[numDevices]); clStatus = clGetContextInfo( gpuInfo->mpContext, CL_CONTEXT_DEVICES, - sizeof( cl_device_id ) * numDevices, mpArryDevsID.get(), NULL ); + sizeof( cl_device_id ) * numDevices, pArryDevsID.get(), NULL ); if(clStatus != CL_SUCCESS) { @@ -404,7 +404,7 @@ bool OpenCLDevice::buildProgramFromBinary(const char* buildOption, GPUEnv* gpuIn cl_int binary_status; gpuInfo->mpArryPrograms[idx] = clCreateProgramWithBinary( gpuInfo->mpContext,numDevices, - mpArryDevsID.get(), length.get(), (const unsigned char**) pBinary.get(), + pArryDevsID.get(), length.get(), (const unsigned char**) pBinary.get(), &binary_status, &clStatus ); if(clStatus != CL_SUCCESS) { commit ed1070949b81814ab6bdb7efcb18b747832247f5 Author: Tor Lillqvist <t...@collabora.com> Date: Wed Nov 12 13:39:31 2014 +0200 Expand tiny misleadingly named 'registerOpenCLKernel' at its only call site The function did not register any OpenCL kernel;) Change-Id: Iebba89bc39d3035ff0d39d9cfa8ec72d4ebf217a diff --git a/sc/source/core/inc/openclwrapper.hxx b/sc/source/core/inc/openclwrapper.hxx index bc3957f..1f11ffc 100644 --- a/sc/source/core/inc/openclwrapper.hxx +++ b/sc/source/core/inc/openclwrapper.hxx @@ -75,7 +75,6 @@ public: static bool bIsInited; static OString maCacheFolder; - static void registerOpenCLKernel(); static bool initOpenCLRunEnv( GPUEnv *gpu ); static void releaseOpenCLEnv( GPUEnv *gpuInfo ); static bool initOpenCLRunEnv( int argc ); diff --git a/sc/source/core/opencl/openclwrapper.cxx b/sc/source/core/opencl/openclwrapper.cxx index 23db69e..0c01274 100644 --- a/sc/source/core/opencl/openclwrapper.cxx +++ b/sc/source/core/opencl/openclwrapper.cxx @@ -81,12 +81,6 @@ OString getCacheFolder() OString OpenCLDevice::maCacheFolder = getCacheFolder(); -void OpenCLDevice::registerOpenCLKernel() -{ - if ( !gpuEnv.mnIsUserCreated ) - memset( &gpuEnv, 0, sizeof(gpuEnv) ); -} - void OpenCLDevice::setKernelEnv( KernelEnv *envInfo ) { envInfo->mpkContext = gpuEnv.mpContext; @@ -437,7 +431,9 @@ bool OpenCLDevice::initOpenCLRunEnv( int argc ) if ( !bIsInited ) { - registerOpenCLKernel(); + if ( !gpuEnv.mnIsUserCreated ) + memset( &gpuEnv, 0, sizeof(gpuEnv) ); + //initialize devices, context, command_queue bool status = initOpenCLRunEnv( &gpuEnv ); if ( status ) commit 559478530b41e60528f2026c2f81872b0096dc94 Author: Tor Lillqvist <t...@collabora.com> Date: Wed Nov 12 13:29:37 2014 +0200 Keep also the platform vendor in ds_device Change-Id: Id195cf9d079b24108b1fb9abeb1f0bf1529d2f72 diff --git a/sc/source/core/opencl/opencl_device_selection.h b/sc/source/core/opencl/opencl_device_selection.h index fcfa41a..43e0f4c 100644 --- a/sc/source/core/opencl/opencl_device_selection.h +++ b/sc/source/core/opencl/opencl_device_selection.h @@ -49,6 +49,7 @@ struct ds_device { ds_device_type type; cl_device_id oclDeviceID; + char* oclPlatformVendor; char* oclDeviceName; char* oclDriverVersion; void* score; // a pointer to the score data, the content/format is application defined @@ -73,6 +74,7 @@ inline ds_status releaseDSProfile(ds_profile* profile, ds_score_release sr) unsigned int i; for (i = 0; i < profile->numDevices; i++) { + free(profile->devices[i].oclPlatformVendor); free(profile->devices[i].oclDeviceName); free(profile->devices[i].oclDriverVersion); status = sr(profile->devices[i].score); @@ -148,6 +150,9 @@ inline ds_status initDSProfile(ds_profile** p, const char* version) { cl_uint num; unsigned j; + char vendor[256]; + if (clGetPlatformInfo(platforms[i], CL_PLATFORM_VENDOR, sizeof(vendor), vendor, NULL) != CL_SUCCESS) + vendor[0] = '\0'; clGetDeviceIDs(platforms[i], CL_DEVICE_TYPE_ALL, numDevices, devices, &num); for (j = 0; j < num; j++, next++) { @@ -157,6 +162,8 @@ inline ds_status initDSProfile(ds_profile** p, const char* version) profile->devices[next].type = DS_DEVICE_OPENCL_DEVICE; profile->devices[next].oclDeviceID = devices[j]; + profile->devices[next].oclPlatformVendor = strdup(vendor); + clGetDeviceInfo(profile->devices[next].oclDeviceID, CL_DEVICE_NAME , DS_DEVICE_NAME_LENGTH, &buffer, NULL); length = strlen(buffer); commit 372bef8902a16d48b53e284b6777ddfa10aa0bdb Author: Tor Lillqvist <t...@collabora.com> Date: Tue Nov 11 18:52:55 2014 +0200 Split driver version specification into a range Change-Id: I1f26b47054e70e54ce81d3ec4cbc5ff58c1aeea3 diff --git a/officecfg/registry/schema/org/openoffice/Office/Calc.xcs b/officecfg/registry/schema/org/openoffice/Office/Calc.xcs index 597b87f..e4a7e2d 100644 --- a/officecfg/registry/schema/org/openoffice/Office/Calc.xcs +++ b/officecfg/registry/schema/org/openoffice/Office/Calc.xcs @@ -1401,7 +1401,7 @@ <info> <desc>Like OpenCLWhiteList, but for combinations known to be bad.</desc> </info> - <value oor:separator=";">Windows/*/Intel(R) Corporation/*/9.17.10.2884;SuperOS/*/Big Corp, Inc./Whizz\Grafix/4.2%2Fbeta%3B3</value> + <value oor:separator=";">Windows/*/Intel(R) Corporation/*/9.17.10.2884/;SuperOS/*/Big Corp, Inc./Whizz\Grafix/4.2%2Fbeta%3B3/4.4</value> </prop> </group> <group oor:name="Syntax"> diff --git a/sc/inc/calcconfig.hxx b/sc/inc/calcconfig.hxx index 9768af8..d46fa84 100644 --- a/sc/inc/calcconfig.hxx +++ b/sc/inc/calcconfig.hxx @@ -47,7 +47,8 @@ struct SC_DLLPUBLIC ScCalcConfig OUString maOSVersion; OUString maPlatformVendor; OUString maDevice; - OUString maDriverVersion; + OUString maDriverVersionMin; + OUString maDriverVersionMax; OpenCLImplMatcher() { @@ -57,12 +58,14 @@ struct SC_DLLPUBLIC ScCalcConfig const OUString& rOSVersion, const OUString& rPlatformVendor, const OUString& rDevice, - const OUString& rDriverVersion) + const OUString& rDriverVersionMin, + const OUString& rDriverVersionMax) : maOS(rOS), maOSVersion(rOSVersion), maPlatformVendor(rPlatformVendor), maDevice(rDevice), - maDriverVersion(rDriverVersion) + maDriverVersionMin(rDriverVersionMin), + maDriverVersionMax(rDriverVersionMax) { } @@ -72,7 +75,8 @@ struct SC_DLLPUBLIC ScCalcConfig maOSVersion == r.maOSVersion && maPlatformVendor == r.maPlatformVendor && maDevice == r.maDevice && - maDriverVersion == r.maDriverVersion; + maDriverVersionMin == r.maDriverVersionMin && + maDriverVersionMax == r.maDriverVersionMax; } bool operator!=(const OpenCLImplMatcher& r) const { @@ -88,7 +92,9 @@ struct SC_DLLPUBLIC ScCalcConfig (maPlatformVendor == r.maPlatformVendor && (maDevice < r.maDevice || (maDevice == r.maDevice && - (maDriverVersion < r.maDriverVersion))))))))); + (maDriverVersionMin < r.maDriverVersionMin || + (maDriverVersionMin == r.maDriverVersionMin && + maDriverVersionMax < r.maDriverVersionMax)))))))))); } }; diff --git a/sc/source/core/tool/calcconfig.cxx b/sc/source/core/tool/calcconfig.cxx index a3197a8..36d1fa5 100644 --- a/sc/source/core/tool/calcconfig.cxx +++ b/sc/source/core/tool/calcconfig.cxx @@ -44,8 +44,8 @@ void ScCalcConfig::setOpenCLConfigToDefault() maOpenCLSubsetOpCodes.insert(ocSum); maOpenCLSubsetOpCodes.insert(ocAverage); maOpenCLSubsetOpCodes.insert(ocSumIfs); - maOpenCLBlackList.insert(OpenCLImplMatcher("Windows", "*", "Intel(R) Corporation", "*", "9.17.10.2884")); - maOpenCLBlackList.insert(OpenCLImplMatcher("SuperOS", "*", "Big Corp, Inc.", "Whizz\\Grafix", "4.2/beta;3")); + maOpenCLBlackList.insert(OpenCLImplMatcher("Windows", "*", "Intel(R) Corporation", "*", "9.17.10.2884", "")); + maOpenCLBlackList.insert(OpenCLImplMatcher("SuperOS", "*", "Big Corp, Inc.", "Whizz\\Grafix", "4.2/beta;3", "4.4")); } void ScCalcConfig::reset() @@ -89,7 +89,7 @@ std::ostream& operator<<(std::ostream& rStream, const ScCalcConfig::OpenCLImplMa "OSVersion=" << rImpl.maOSVersion << "," "PlatformVendor=" << rImpl.maPlatformVendor << "," "Device=" << rImpl.maDevice << "," - "DriverVersion=" << rImpl.maDriverVersion << + "DriverVersion=[" << rImpl.maDriverVersionMin << "," << rImpl.maDriverVersionMax << "]" "}"; return rStream; diff --git a/sc/source/core/tool/formulaopt.cxx b/sc/source/core/tool/formulaopt.cxx index f2cd325e..ae79e75 100644 --- a/sc/source/core/tool/formulaopt.cxx +++ b/sc/source/core/tool/formulaopt.cxx @@ -292,7 +292,8 @@ css::uno::Sequence<OUString> SetOfOpenCLImplMatcherToStringSequence(std::set<ScC (*i).maOSVersion.replaceAll("%", "%25").replaceAll("/", "%2F").replaceAll(";", "%3B") + "/" + (*i).maPlatformVendor.replaceAll("%", "%25").replaceAll("/", "%2F").replaceAll(";", "%3B") + "/" + (*i).maDevice.replaceAll("%", "%25").replaceAll("/", "%2F").replaceAll(";", "%3B") + "/" + - (*i).maDriverVersion.replaceAll("%", "%25").replaceAll("/", "%2F").replaceAll(";", "%3B"); + (*i).maDriverVersionMin.replaceAll("%", "%25").replaceAll("/", "%2F").replaceAll(";", "%3B") + "/" + + (*i).maDriverVersionMax.replaceAll("%", "%25").replaceAll("/", "%2F").replaceAll(";", "%3B"); } return result; @@ -335,7 +336,8 @@ std::set<ScCalcConfig::OpenCLImplMatcher> StringSequenceToSetOfOpenCLImplMatcher m.maOSVersion = getToken(*i, index); m.maPlatformVendor = getToken(*i, index); m.maDevice = getToken(*i, index); - m.maDriverVersion = getToken(*i, index); + m.maDriverVersionMin = getToken(*i, index); + m.maDriverVersionMax = getToken(*i, index); result.insert(m); } diff --git a/sc/source/ui/optdlg/calcoptionsdlg.cxx b/sc/source/ui/optdlg/calcoptionsdlg.cxx index 338f565..7925158 100644 --- a/sc/source/ui/optdlg/calcoptionsdlg.cxx +++ b/sc/source/ui/optdlg/calcoptionsdlg.cxx @@ -149,7 +149,8 @@ ScCalcOptionsDialog::ScCalcOptionsDialog(vcl::Window* pParent, const ScCalcConfi get(mpOSVersion, "osversion"); get(mpPlatformVendor, "platformvendor"); get(mpDevice, "opencldevice"); - get(mpDriverVersion, "opencldriverversion"); + get(mpDriverVersionMin, "opencldriverversionmin"); + get(mpDriverVersionMax, "opencldriverversionmax"); get(mpListEditButton, "listbox-edit"); get(mpListNewButton, "listbox-new"); get(mpListDeleteButton, "listbox-delete"); @@ -166,7 +167,8 @@ ScCalcOptionsDialog::ScCalcOptionsDialog(vcl::Window* pParent, const ScCalcConfi mpOSVersion->SetModifyHdl(LINK(this, ScCalcOptionsDialog, EditModifiedHdl)); mpPlatformVendor->SetModifyHdl(LINK(this, ScCalcOptionsDialog, EditModifiedHdl)); mpDevice->SetModifyHdl(LINK(this, ScCalcOptionsDialog, EditModifiedHdl)); - mpDriverVersion->SetModifyHdl(LINK(this, ScCalcOptionsDialog, EditModifiedHdl)); + mpDriverVersionMin->SetModifyHdl(LINK(this, ScCalcOptionsDialog, EditModifiedHdl)); + mpDriverVersionMax->SetModifyHdl(LINK(this, ScCalcOptionsDialog, EditModifiedHdl)); mpOpenCLWhiteAndBlackListBox->set_height_request(4* mpOpenCLWhiteAndBlackListBox->GetTextHeight()); mpOpenCLWhiteAndBlackListBox->SetStyle(mpOpenCLWhiteAndBlackListBox->GetStyle() | WB_CLIPCHILDREN | WB_FORCE_MAKEVISIBLE); @@ -314,7 +316,10 @@ OUString format(const ScCalcConfig::OpenCLImplMatcher& rImpl) rImpl.maOSVersion + " " + rImpl.maPlatformVendor + " " + rImpl.maDevice + " " + - rImpl.maDriverVersion); + (rImpl.maDriverVersionMax != "" ? + OUString("[") + rImpl.maDriverVersionMin + "," + rImpl.maDriverVersionMax + "]" : + rImpl.maDriverVersionMin) + ); } void fillListBox(ListBox* pListBox, const ScCalcConfig::OpenCLImplMatcherSet& rSet) @@ -794,9 +799,13 @@ void ScCalcOptionsDialog::EditFieldValueChanged(Control *pCtrl) { newImpl.maDevice = sVal; } - else if (pEdit == mpDriverVersion) + else if (pEdit == mpDriverVersionMin) { - newImpl.maDriverVersion = sVal; + newImpl.maDriverVersionMin = sVal; + } + else if (pEdit == mpDriverVersionMax) + { + newImpl.maDriverVersionMax = sVal; } else assert(false && "pEdit does not match any of the Edit fields"); @@ -905,7 +914,8 @@ IMPL_LINK(ScCalcOptionsDialog, OpenCLWhiteAndBlackListSelHdl, Control*, ) mpOSVersion->SetText(impl.maOSVersion); mpPlatformVendor->SetText(impl.maPlatformVendor); mpDevice->SetText(impl.maDevice); - mpDriverVersion->SetText(impl.maDriverVersion); + mpDriverVersionMin->SetText(impl.maDriverVersionMin); + mpDriverVersionMax->SetText(impl.maDriverVersionMax); return 0; } diff --git a/sc/source/ui/optdlg/calcoptionsdlg.hxx b/sc/source/ui/optdlg/calcoptionsdlg.hxx index 290d470..2942f68 100644 --- a/sc/source/ui/optdlg/calcoptionsdlg.hxx +++ b/sc/source/ui/optdlg/calcoptionsdlg.hxx @@ -80,7 +80,8 @@ private: Edit* mpOSVersion; Edit* mpPlatformVendor; Edit* mpDevice; - Edit* mpDriverVersion; + Edit* mpDriverVersionMin; + Edit* mpDriverVersionMax; PushButton* mpListEditButton; PushButton* mpListNewButton; PushButton* mpListDeleteButton; diff --git a/sc/uiconfig/scalc/ui/formulacalculationoptions.ui b/sc/uiconfig/scalc/ui/formulacalculationoptions.ui index 513106c..312f3be 100644 --- a/sc/uiconfig/scalc/ui/formulacalculationoptions.ui +++ b/sc/uiconfig/scalc/ui/formulacalculationoptions.ui @@ -214,8 +214,7 @@ <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> - <property name="label" translatable="yes">_OS</property> - <property name="use_underline">True</property> + <property name="label" translatable="yes">OS</property> <property name="mnemonic_widget">os:border</property> </object> <packing> @@ -238,8 +237,7 @@ <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> - <property name="label" translatable="yes">OS _Version</property> - <property name="use_underline">True</property> + <property name="label" translatable="yes">OS Version</property> <property name="mnemonic_widget">osversion:border</property> </object> <packing> @@ -263,7 +261,6 @@ <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">OpenCL Platform Vendor</property> - <property name="use_underline">True</property> <property name="mnemonic_widget">openclvendor:border</property> </object> <packing> @@ -287,7 +284,6 @@ <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">OpenCL Device</property> - <property name="use_underline">True</property> <property name="mnemonic_widget">opencldevice:border</property> </object> <packing> @@ -306,13 +302,12 @@ </packing> </child> <child> - <object class="GtkLabel" id="opencldriverversionlabel"> + <object class="GtkLabel" id="opencldriverversionminlabel"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> - <property name="label" translatable="yes">OpenCL Driver Version</property> - <property name="use_underline">True</property> - <property name="mnemonic_widget">opencldriverversion:border</property> + <property name="label" translatable="yes">OpenCL Driver Version Lower Bound</property> + <property name="mnemonic_widget">opencldriverversionmin:border</property> </object> <packing> <property name="left_attach">0</property> @@ -320,7 +315,7 @@ </packing> </child> <child> - <object class="GtkEntry" id="opencldriverversion:border"> + <object class="GtkEntry" id="opencldriverversionmin:border"> <property name="visible">True</property> <property name="can_focus">True</property> </object> @@ -329,6 +324,29 @@ <property name="top_attach">9</property> </packing> </child> + <child> + <object class="GtkLabel" id="opencldriverversionmaxlabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">OpenCL Driver Version Upper Bound</property> + <property name="mnemonic_widget">opencldriverversionmax:border</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">10</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="opencldriverversionmax:border"> + <property name="visible">True</property> + <property name="can_focus">True</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">11</property> + </packing> + </child> </object> <packing> <property name="left_attach">1</property> commit 4554e71e46c2ba68d1559e5e90bd648916bd67a3 Author: Tor Lillqvist <t...@collabora.com> Date: Tue Nov 11 11:23:45 2014 +0200 Rename OpenCLImpl to OpenCLImplMatcher to better match its purpose Change-Id: If9b7052385a49df1403a5f652c67ca7c103a8be2 diff --git a/sc/inc/calcconfig.hxx b/sc/inc/calcconfig.hxx index 4b72dc8..9768af8 100644 --- a/sc/inc/calcconfig.hxx +++ b/sc/inc/calcconfig.hxx @@ -41,7 +41,7 @@ struct SC_DLLPUBLIC ScCalcConfig STRING_CONVERSION_LOCALE_DEPENDENT ///< =1+"1.000" may be 2 or 1001 ... =1+"x" gives #VALUE! }; - struct OpenCLImpl + struct OpenCLImplMatcher { OUString maOS; OUString maOSVersion; @@ -49,15 +49,15 @@ struct SC_DLLPUBLIC ScCalcConfig OUString maDevice; OUString maDriverVersion; - OpenCLImpl() + OpenCLImplMatcher() { } - OpenCLImpl(const OUString& rOS, - const OUString& rOSVersion, - const OUString& rPlatformVendor, - const OUString& rDevice, - const OUString& rDriverVersion) + OpenCLImplMatcher(const OUString& rOS, + const OUString& rOSVersion, + const OUString& rPlatformVendor, + const OUString& rDevice, + const OUString& rDriverVersion) : maOS(rOS), maOSVersion(rOSVersion), maPlatformVendor(rPlatformVendor), @@ -66,7 +66,7 @@ struct SC_DLLPUBLIC ScCalcConfig { } - bool operator==(const OpenCLImpl& r) const + bool operator==(const OpenCLImplMatcher& r) const { return maOS == r.maOS && maOSVersion == r.maOSVersion && @@ -74,11 +74,11 @@ struct SC_DLLPUBLIC ScCalcConfig maDevice == r.maDevice && maDriverVersion == r.maDriverVersion; } - bool operator!=(const OpenCLImpl& r) const + bool operator!=(const OpenCLImplMatcher& r) const { return !operator==(r); } - bool operator<(const OpenCLImpl& r) const + bool operator<(const OpenCLImplMatcher& r) const { return (maOS < r.maOS || (maOS == r.maOS && @@ -106,10 +106,10 @@ struct SC_DLLPUBLIC ScCalcConfig OpCodeSet maOpenCLSubsetOpCodes; - typedef std::set<OpenCLImpl> OpenCLImplSet; + typedef std::set<OpenCLImplMatcher> OpenCLImplMatcherSet; - OpenCLImplSet maOpenCLWhiteList; - OpenCLImplSet maOpenCLBlackList; + OpenCLImplMatcherSet maOpenCLWhiteList; + OpenCLImplMatcherSet maOpenCLBlackList; ScCalcConfig(); @@ -122,8 +122,8 @@ struct SC_DLLPUBLIC ScCalcConfig bool operator!= (const ScCalcConfig& r) const; }; -SC_DLLPUBLIC std::ostream& operator<<(std::ostream& rStream, const ScCalcConfig::OpenCLImpl& rImpl); -SC_DLLPUBLIC std::ostream& operator<<(std::ostream& rStream, const ScCalcConfig::OpenCLImplSet& rSet); +SC_DLLPUBLIC std::ostream& operator<<(std::ostream& rStream, const ScCalcConfig::OpenCLImplMatcher& rImpl); +SC_DLLPUBLIC std::ostream& operator<<(std::ostream& rStream, const ScCalcConfig::OpenCLImplMatcherSet& rSet); SC_DLLPUBLIC std::ostream& operator<<(std::ostream& rStream, const ScCalcConfig& rConfig); SC_DLLPUBLIC OUString ScOpCodeSetToNumberString(const ScCalcConfig::OpCodeSet& rOpCodes); diff --git a/sc/source/core/tool/calcconfig.cxx b/sc/source/core/tool/calcconfig.cxx index 583c2a3..a3197a8 100644 --- a/sc/source/core/tool/calcconfig.cxx +++ b/sc/source/core/tool/calcconfig.cxx @@ -44,8 +44,8 @@ void ScCalcConfig::setOpenCLConfigToDefault() maOpenCLSubsetOpCodes.insert(ocSum); maOpenCLSubsetOpCodes.insert(ocAverage); maOpenCLSubsetOpCodes.insert(ocSumIfs); - maOpenCLBlackList.insert(OpenCLImpl("Windows", "*", "Intel(R) Corporation", "*", "9.17.10.2884")); - maOpenCLBlackList.insert(OpenCLImpl("SuperOS", "*", "Big Corp, Inc.", "Whizz\\Grafix", "4.2/beta;3")); + maOpenCLBlackList.insert(OpenCLImplMatcher("Windows", "*", "Intel(R) Corporation", "*", "9.17.10.2884")); + maOpenCLBlackList.insert(OpenCLImplMatcher("SuperOS", "*", "Big Corp, Inc.", "Whizz\\Grafix", "4.2/beta;3")); } void ScCalcConfig::reset() @@ -82,7 +82,7 @@ bool ScCalcConfig::operator!= (const ScCalcConfig& r) const return !operator==(r); } -std::ostream& operator<<(std::ostream& rStream, const ScCalcConfig::OpenCLImpl& rImpl) +std::ostream& operator<<(std::ostream& rStream, const ScCalcConfig::OpenCLImplMatcher& rImpl) { rStream << "{" "OS=" << rImpl.maOS << "," @@ -95,7 +95,7 @@ std::ostream& operator<<(std::ostream& rStream, const ScCalcConfig::OpenCLImpl& return rStream; } -std::ostream& operator<<(std::ostream& rStream, const ScCalcConfig::OpenCLImplSet& rSet) +std::ostream& operator<<(std::ostream& rStream, const ScCalcConfig::OpenCLImplMatcherSet& rSet) { rStream << "{"; for (auto i = rSet.cbegin(); i != rSet.cend(); ++i) diff --git a/sc/source/core/tool/formulaopt.cxx b/sc/source/core/tool/formulaopt.cxx index bcf7282..f2cd325e 100644 --- a/sc/source/core/tool/formulaopt.cxx +++ b/sc/source/core/tool/formulaopt.cxx @@ -280,7 +280,7 @@ ScFormulaCfg::ScFormulaCfg() : namespace { -css::uno::Sequence<OUString> SetOfOpenCLImplToStringSequence(std::set<ScCalcConfig::OpenCLImpl>& rSet) +css::uno::Sequence<OUString> SetOfOpenCLImplMatcherToStringSequence(std::set<ScCalcConfig::OpenCLImplMatcher>& rSet) { css::uno::Sequence<OUString> result(rSet.size()); @@ -323,13 +323,13 @@ OUString getToken(const OUString& string, sal_Int32& index) return result; } -std::set<ScCalcConfig::OpenCLImpl> StringSequenceToSetOfOpenCLImpl(css::uno::Sequence<OUString>& rSequence) +std::set<ScCalcConfig::OpenCLImplMatcher> StringSequenceToSetOfOpenCLImplMatcher(css::uno::Sequence<OUString>& rSequence) { - std::set<ScCalcConfig::OpenCLImpl> result; + std::set<ScCalcConfig::OpenCLImplMatcher> result; for (auto i = rSequence.begin(); i != rSequence.end(); ++i) { - ScCalcConfig::OpenCLImpl m; + ScCalcConfig::OpenCLImplMatcher m; sal_Int32 index(0); m.maOS = getToken(*i, index); m.maOSVersion = getToken(*i, index); @@ -589,16 +589,16 @@ void ScFormulaCfg::UpdateFromProperties( const Sequence<OUString>& aNames ) break; case SCFORMULAOPT_OPENCL_WHITELIST: { - css::uno::Sequence<OUString> sVal = SetOfOpenCLImplToStringSequence(GetCalcConfig().maOpenCLWhiteList); + css::uno::Sequence<OUString> sVal = SetOfOpenCLImplMatcherToStringSequence(GetCalcConfig().maOpenCLWhiteList); pValues[nProp] >>= sVal; - GetCalcConfig().maOpenCLWhiteList = StringSequenceToSetOfOpenCLImpl(sVal); + GetCalcConfig().maOpenCLWhiteList = StringSequenceToSetOfOpenCLImplMatcher(sVal); } break; case SCFORMULAOPT_OPENCL_BLACKLIST: { - css::uno::Sequence<OUString> sVal = SetOfOpenCLImplToStringSequence(GetCalcConfig().maOpenCLBlackList); + css::uno::Sequence<OUString> sVal = SetOfOpenCLImplMatcherToStringSequence(GetCalcConfig().maOpenCLBlackList); pValues[nProp] >>= sVal; - GetCalcConfig().maOpenCLBlackList = StringSequenceToSetOfOpenCLImpl(sVal); + GetCalcConfig().maOpenCLBlackList = StringSequenceToSetOfOpenCLImplMatcher(sVal); } break; } @@ -756,13 +756,13 @@ void ScFormulaCfg::Commit() break; case SCFORMULAOPT_OPENCL_WHITELIST: { - css::uno::Sequence<OUString> sVal = SetOfOpenCLImplToStringSequence(GetCalcConfig().maOpenCLWhiteList); + css::uno::Sequence<OUString> sVal = SetOfOpenCLImplMatcherToStringSequence(GetCalcConfig().maOpenCLWhiteList); pValues[nProp] <<= sVal; } break; case SCFORMULAOPT_OPENCL_BLACKLIST: { - css::uno::Sequence<OUString> sVal = SetOfOpenCLImplToStringSequence(GetCalcConfig().maOpenCLBlackList); + css::uno::Sequence<OUString> sVal = SetOfOpenCLImplMatcherToStringSequence(GetCalcConfig().maOpenCLBlackList); pValues[nProp] <<= sVal; } break; diff --git a/sc/source/ui/optdlg/calcoptionsdlg.cxx b/sc/source/ui/optdlg/calcoptionsdlg.cxx index 1510411..338f565 100644 --- a/sc/source/ui/optdlg/calcoptionsdlg.cxx +++ b/sc/source/ui/optdlg/calcoptionsdlg.cxx @@ -308,7 +308,7 @@ void ScCalcOptionsDialog::fillOpenCLList() namespace { -OUString format(const ScCalcConfig::OpenCLImpl& rImpl) +OUString format(const ScCalcConfig::OpenCLImplMatcher& rImpl) { return (rImpl.maOS + " " + rImpl.maOSVersion + " " + @@ -317,7 +317,7 @@ OUString format(const ScCalcConfig::OpenCLImpl& rImpl) rImpl.maDriverVersion); } -void fillListBox(ListBox* pListBox, const ScCalcConfig::OpenCLImplSet& rSet) +void fillListBox(ListBox* pListBox, const ScCalcConfig::OpenCLImplMatcherSet& rSet) { pListBox->SetUpdateMode(false); pListBox->Clear(); @@ -736,14 +736,14 @@ void ScCalcOptionsDialog::SpinButtonValueChanged() maConfig.mnOpenCLMinimumFormulaGroupSize = nVal; } -ScCalcConfig::OpenCLImplSet& ScCalcOptionsDialog::CurrentWhiteOrBlackList() +ScCalcConfig::OpenCLImplMatcherSet& ScCalcOptionsDialog::CurrentWhiteOrBlackList() { return (mpLbSettings->GetSelectEntryPos() == CALC_OPTION_OPENCL_WHITELIST ? maConfig.maOpenCLWhiteList : maConfig.maOpenCLBlackList); } -const ScCalcConfig::OpenCLImpl& ScCalcOptionsDialog::CurrentWhiteOrBlackListEntry() +const ScCalcConfig::OpenCLImplMatcher& ScCalcOptionsDialog::CurrentWhiteOrBlackListEntry() { - ScCalcConfig::OpenCLImplSet& rSet(CurrentWhiteOrBlackList()); + ScCalcConfig::OpenCLImplMatcherSet& rSet(CurrentWhiteOrBlackList()); auto i = rSet.begin(); int n(mpOpenCLWhiteAndBlackListBox->GetSelectEntryPos()); @@ -775,8 +775,8 @@ void ScCalcOptionsDialog::EditFieldValueChanged(Control *pCtrl) // We know that this handler is otherwise currently used only // for the OpenCL white/blacklists - const ScCalcConfig::OpenCLImpl& impl(CurrentWhiteOrBlackListEntry()); - ScCalcConfig::OpenCLImpl newImpl(impl); + const ScCalcConfig::OpenCLImplMatcher& impl(CurrentWhiteOrBlackListEntry()); + ScCalcConfig::OpenCLImplMatcher newImpl(impl); if (pEdit == mpOS) { @@ -801,7 +801,7 @@ void ScCalcOptionsDialog::EditFieldValueChanged(Control *pCtrl) else assert(false && "pEdit does not match any of the Edit fields"); - ScCalcConfig::OpenCLImplSet& rSet(CurrentWhiteOrBlackList()); + ScCalcConfig::OpenCLImplMatcherSet& rSet(CurrentWhiteOrBlackList()); rSet.erase(impl); rSet.insert(newImpl); @@ -899,7 +899,7 @@ IMPL_LINK(ScCalcOptionsDialog, OpenCLWhiteAndBlackListSelHdl, Control*, ) { // We know this handler is used for the mpOpenCLWhiteAndBlackListBox - const ScCalcConfig::OpenCLImpl& impl(CurrentWhiteOrBlackListEntry()); + const ScCalcConfig::OpenCLImplMatcher& impl(CurrentWhiteOrBlackListEntry()); mpOS->SetText(impl.maOS); mpOSVersion->SetText(impl.maOSVersion); diff --git a/sc/source/ui/optdlg/calcoptionsdlg.hxx b/sc/source/ui/optdlg/calcoptionsdlg.hxx index bc52291..290d470 100644 --- a/sc/source/ui/optdlg/calcoptionsdlg.hxx +++ b/sc/source/ui/optdlg/calcoptionsdlg.hxx @@ -63,8 +63,8 @@ private: OUString toString(sal_Int32 nVal) const; SvTreeListEntry *createItem(const OUString &rCaption, const OUString& sValue) const; void setValueAt(size_t nPos, const OUString &rString); - std::set<ScCalcConfig::OpenCLImpl>& CurrentWhiteOrBlackList(); - const ScCalcConfig::OpenCLImpl& CurrentWhiteOrBlackListEntry(); + std::set<ScCalcConfig::OpenCLImplMatcher>& CurrentWhiteOrBlackList(); + const ScCalcConfig::OpenCLImplMatcher& CurrentWhiteOrBlackListEntry(); private: SvxCheckListBox* mpLbSettings; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits