summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2013-10-01 00:55:27 +0200
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2013-10-01 01:49:16 +0200
commit19e48764f7396e4a462d3a97c4bbe7848572b7d5 (patch)
tree508d3c147fbac492e34cde1d712caabbe751f9e3 /sc
parent25580075e08f2e20f0c842cf7da96e280884c9de (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.cxx37
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";
}
}