diff options
author | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2013-10-01 00:55:27 +0200 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2013-10-01 01:49:16 +0200 |
commit | 19e48764f7396e4a462d3a97c4bbe7848572b7d5 (patch) | |
tree | 508d3c147fbac492e34cde1d712caabbe751f9e3 /sc | |
parent | 25580075e08f2e20f0c842cf7da96e280884c9de (diff) |
hash platform version, device name, driver version into binary name
Change-Id: Id34e7c6dad0587e2a8ea583c6df9bdc145f193bc
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/core/opencl/openclwrapper.cxx | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/sc/source/core/opencl/openclwrapper.cxx b/sc/source/core/opencl/openclwrapper.cxx index 58850cad4773..6d92708886e1 100644 --- a/sc/source/core/opencl/openclwrapper.cxx +++ b/sc/source/core/opencl/openclwrapper.cxx @@ -36,6 +36,8 @@ #endif #define DEVICE_NAME_LENGTH 1024 +#define DRIVER_VERSION_LENGTH 1024 +#define PLATFORM_VERSION_LENGTH 1024 using namespace std; @@ -48,16 +50,12 @@ int OpenclDevice::isInited =0; namespace { -OString generateHashForSource() +OString generateMD5(const void* pData, size_t length) { sal_uInt8 pBuffer[RTL_DIGEST_LENGTH_MD5]; - -#ifndef NDEBUG - size_t nLength = strlen(kernel_src); - rtlDigestError aError = rtl_digest_MD5(kernel_src, nLength, + rtlDigestError aError = rtl_digest_MD5(pData, length, pBuffer, RTL_DIGEST_LENGTH_MD5); - assert(aError == rtl_Digest_E_None); -#endif + SAL_WARN_IF(aError != rtl_Digest_E_None, "sc", "md5 generation failed"); OStringBuffer aBuffer; const char* pString = "0123456789ABCDEF"; @@ -70,6 +68,12 @@ OString generateHashForSource() return aBuffer.makeStringAndClear(); } +OString generateHashForSource() +{ + size_t nLength = strlen(kernel_src); + return generateMD5(kernel_src, nLength); +} + OString getCacheFolder() { OUString url("${$BRAND_BASE_DIR/" LIBO_ETC_FOLDER "/" SAL_CONFIGFILE("bootstrap") ":UserInstallation}/cache/"); @@ -230,8 +234,25 @@ OString createFileName(cl_device_id deviceId, const char* clFileName) char deviceName[DEVICE_NAME_LENGTH] = {0}; clGetDeviceInfo(deviceId, CL_DEVICE_NAME, sizeof(deviceName), deviceName, NULL); + + char driverVersion[DRIVER_VERSION_LENGTH] = {0}; + clGetDeviceInfo(deviceId, CL_DRIVER_VERSION, + sizeof(driverVersion), driverVersion, NULL); + + cl_platform_id platformId; + clGetDeviceInfo(deviceId, CL_DEVICE_PLATFORM, + sizeof(platformId), &platformId, NULL); + + char platformVersion[PLATFORM_VERSION_LENGTH] = {0}; + clGetPlatformInfo(platformId, CL_PLATFORM_VERSION, sizeof(platformVersion), + platformVersion, NULL); + + // create hash for deviceName + driver version + platform version + OString aString = OString(deviceName) + driverVersion + platformVersion; + OString aHash = generateMD5(aString.getStr(), aString.getLength()); + return OpenclDevice::maCacheFolder + fileName + "-" + - deviceName + "-" + OpenclDevice::maSourceHash + ".bin"; + aHash + "-" + OpenclDevice::maSourceHash + ".bin"; } } |