configure.ac                            |   17 ++++++++---------
 sc/source/core/opencl/openclwrapper.cxx |   16 ++++++++--------
 sc/source/core/opencl/openclwrapper.hxx |   14 ++++++++++++++
 3 files changed, 30 insertions(+), 17 deletions(-)

New commits:
commit 46894ec48eb33dc99dab807c9fcaf0caa7c6cd84
Author: Tor Lillqvist <t...@iki.fi>
Date:   Sat Jul 13 22:54:17 2013 +0300

    Use CL_MAP_WRITE_INVALIDATE_REGION only if defined (in OpenCL 1.2)
    
    Can again turn on OpenCL by default for OS X then, hopefully.
    
    Change-Id: Id84b2c17c8431080261be45923d8c153f3822e8b

diff --git a/configure.ac b/configure.ac
index 6f5fe8dd..cc439e0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -9811,15 +9811,14 @@ OPENCL_LIBS=
 OPENCL_CFLAGS=
 ENABLE_OPENCL=
 AC_MSG_CHECKING([OpenCL])
-dnl if test \( -z "$with_opencl_sdk" -o "$with_opencl_sdk" = yes \) -a $_os = 
Darwin; then
-dnl    # OS X
-dnl    AC_MSG_RESULT([yes, always on OS X])
-dnl    ENABLE_OPENCL=TRUE
-dnl    OPENCL_CFLAGS=
-dnl    OPENCL_LIBS="-framework OpenCL"
-dnl    AC_DEFINE(HAVE_FEATURE_OPENCL)
-dnl
-if test -z "$with_opencl_sdk" -o "$with_opencl_sdk" = no; then
+if test \( -z "$with_opencl_sdk" -o "$with_opencl_sdk" = yes \) -a $_os = 
Darwin; then
+   # OS X
+   AC_MSG_RESULT([yes, always on OS X])
+   ENABLE_OPENCL=TRUE
+   OPENCL_CFLAGS=
+   OPENCL_LIBS="-framework OpenCL"
+   AC_DEFINE(HAVE_FEATURE_OPENCL)
+elif test -z "$with_opencl_sdk" -o "$with_opencl_sdk" = no; then
     AC_MSG_RESULT([no])
 else
     if test -d "$with_opencl_sdk/include"; then
diff --git a/sc/source/core/opencl/openclwrapper.cxx 
b/sc/source/core/opencl/openclwrapper.cxx
index f767479..584d533 100644
--- a/sc/source/core/opencl/openclwrapper.cxx
+++ b/sc/source/core/opencl/openclwrapper.cxx
@@ -1115,9 +1115,9 @@ int OclCalc::OclHostFormulaAverage(double *srcData,int 
*start,int *end,double *o
     cl_mem outputCl = clCreateBuffer(kEnv.mpkContext, (cl_mem_flags) 
(CL_MEM_READ_WRITE),
                                      size* sizeof(float), NULL, &ret);
 
-    float * hostMapSrc = (float 
*)clEnqueueMapBuffer(kEnv.mpkCmdQueue,inputCl,CL_TRUE,CL_MAP_WRITE_INVALIDATE_REGION,0,alignSize
 * sizeof(float),0,NULL,NULL,NULL);
-    int * hostMapStart = (int 
*)clEnqueueMapBuffer(kEnv.mpkCmdQueue,startCl,CL_TRUE,CL_MAP_WRITE_INVALIDATE_REGION,0,size
 * sizeof(unsigned int),0,NULL,NULL,NULL);
-    int * hostMapEnd   = (int 
*)clEnqueueMapBuffer(kEnv.mpkCmdQueue,endCl,CL_TRUE,CL_MAP_WRITE_INVALIDATE_REGION,0,size
 * sizeof(unsigned int),0,NULL,NULL,NULL);
+    float * hostMapSrc = (float 
*)clEnqueueMapBuffer(kEnv.mpkCmdQueue,inputCl,CL_TRUE,OPENCLWRAPPER_CL_MAP_WRITE_FLAG,0,alignSize
 * sizeof(float),0,NULL,NULL,NULL);
+    int * hostMapStart = (int 
*)clEnqueueMapBuffer(kEnv.mpkCmdQueue,startCl,CL_TRUE,OPENCLWRAPPER_CL_MAP_WRITE_FLAG,0,size
 * sizeof(unsigned int),0,NULL,NULL,NULL);
+    int * hostMapEnd   = (int 
*)clEnqueueMapBuffer(kEnv.mpkCmdQueue,endCl,CL_TRUE,OPENCLWRAPPER_CL_MAP_WRITE_FLAG,0,size
 * sizeof(unsigned int),0,NULL,NULL,NULL);
 #if 1
     for(int i=0;i<size;i++)
     {
@@ -1440,11 +1440,11 @@ int OclCalc::CreateBuffer(float *&fpSrcData,uint 
*&npStartPos,uint *&npEndPos,in
                              nBufferSize * sizeof(unsigned int), NULL, 
&clStatus);
     CHECK_OPENCL(clStatus);
 
-    fpSrcData  = (float 
*)clEnqueueMapBuffer(kEnv.mpkCmdQueue,mpClmemSrcData,CL_TRUE,CL_MAP_WRITE_INVALIDATE_REGION,0,nBufferSize
 * sizeof(float),0,NULL,NULL,&clStatus);
+    fpSrcData  = (float 
*)clEnqueueMapBuffer(kEnv.mpkCmdQueue,mpClmemSrcData,CL_TRUE,OPENCLWRAPPER_CL_MAP_WRITE_FLAG,0,nBufferSize
 * sizeof(float),0,NULL,NULL,&clStatus);
     CHECK_OPENCL(clStatus);
-    npStartPos = (uint 
*)clEnqueueMapBuffer(kEnv.mpkCmdQueue,mpClmemStartPos,CL_TRUE,CL_MAP_WRITE_INVALIDATE_REGION,0,nBufferSize
 * sizeof(uint),0,NULL,NULL,&clStatus);
+    npStartPos = (uint 
*)clEnqueueMapBuffer(kEnv.mpkCmdQueue,mpClmemStartPos,CL_TRUE,OPENCLWRAPPER_CL_MAP_WRITE_FLAG,0,nBufferSize
 * sizeof(uint),0,NULL,NULL,&clStatus);
     CHECK_OPENCL(clStatus);
-    npEndPos   = (uint 
*)clEnqueueMapBuffer(kEnv.mpkCmdQueue,mpClmemEndPos,CL_TRUE,CL_MAP_WRITE_INVALIDATE_REGION,0,nBufferSize
 * sizeof(uint),0,NULL,NULL,&clStatus);
+    npEndPos   = (uint 
*)clEnqueueMapBuffer(kEnv.mpkCmdQueue,mpClmemEndPos,CL_TRUE,OPENCLWRAPPER_CL_MAP_WRITE_FLAG,0,nBufferSize
 * sizeof(uint),0,NULL,NULL,&clStatus);
     CHECK_OPENCL(clStatus);
     //printf("In CreateBuffer, pptrr is 
%d,%d,%d\n",fpSrcData,npStartPos,npEndPos);
     return 0;
@@ -1461,9 +1461,9 @@ int OclCalc::CreateBuffer(float *&fpLeftData,float 
*&fpRightData,int nBufferSize
     mpClmemRightData = clCreateBuffer(kEnv.mpkContext, (cl_mem_flags) 
(CL_MEM_READ_WRITE | CL_MEM_ALLOC_HOST_PTR),
                              nBufferSize * sizeof(unsigned int), NULL, 
&clStatus);
     CHECK_OPENCL(clStatus);
-    fpLeftData    = (float 
*)clEnqueueMapBuffer(kEnv.mpkCmdQueue,mpClmemLeftData,CL_TRUE,CL_MAP_WRITE_INVALIDATE_REGION,0,nBufferSize
 * sizeof(float),0,NULL,NULL,&clStatus);
+    fpLeftData    = (float 
*)clEnqueueMapBuffer(kEnv.mpkCmdQueue,mpClmemLeftData,CL_TRUE,OPENCLWRAPPER_CL_MAP_WRITE_FLAG,0,nBufferSize
 * sizeof(float),0,NULL,NULL,&clStatus);
     CHECK_OPENCL(clStatus);
-    fpRightData = (float 
*)clEnqueueMapBuffer(kEnv.mpkCmdQueue,mpClmemRightData,CL_TRUE,CL_MAP_WRITE_INVALIDATE_REGION,0,nBufferSize
 * sizeof(float),0,NULL,NULL,&clStatus);
+    fpRightData = (float 
*)clEnqueueMapBuffer(kEnv.mpkCmdQueue,mpClmemRightData,CL_TRUE,OPENCLWRAPPER_CL_MAP_WRITE_FLAG,0,nBufferSize
 * sizeof(float),0,NULL,NULL,&clStatus);
     CHECK_OPENCL(clStatus);
     //printf("In CreateBuffer, pptrr is 
%d,%d,%d\n",fpSrcData,npStartPos,npEndPos);
     return 0;
diff --git a/sc/source/core/opencl/openclwrapper.hxx 
b/sc/source/core/opencl/openclwrapper.hxx
index d83b7c8..1c798f1 100644
--- a/sc/source/core/opencl/openclwrapper.hxx
+++ b/sc/source/core/opencl/openclwrapper.hxx
@@ -20,6 +20,20 @@
 #include <CL/cl.h>
 #endif
 
+// CL_MAP_WRITE_INVALIDATE_REGION is new in OpenCL 1.2.
+
+// When compiling against an older OpenCL, use CL_MAP_WRITE.
+
+// FIXME: But what if this code has been compiled against OpenCL 1.2
+// headers but then runs against an OpenCL 1.1 implementation?
+// Probably the code should check at run-time the version of the
+// OpenCL implementation and choose which flag to use based on that.
+#ifdef CL_MAP_WRITE_INVALIDATE_REGION
+#define OPENCLWRAPPER_CL_MAP_WRITE_FLAG CL_MAP_WRITE_INVALIDATE_REGION
+#else
+#define OPENCLWRAPPER_CL_MAP_WRITE_FLAG CL_MAP_WRITE
+#endif
+
 #if defined(_MSC_VER)
 #ifndef strcasecmp
 #define strcasecmp strcmp
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to