Kaydet (Commit) 46894ec4 authored tarafından Tor Lillqvist's avatar Tor Lillqvist

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
üst 542b45af
...@@ -9811,15 +9811,14 @@ OPENCL_LIBS= ...@@ -9811,15 +9811,14 @@ OPENCL_LIBS=
OPENCL_CFLAGS= OPENCL_CFLAGS=
ENABLE_OPENCL= ENABLE_OPENCL=
AC_MSG_CHECKING([OpenCL]) AC_MSG_CHECKING([OpenCL])
dnl if test \( -z "$with_opencl_sdk" -o "$with_opencl_sdk" = yes \) -a $_os = Darwin; then if test \( -z "$with_opencl_sdk" -o "$with_opencl_sdk" = yes \) -a $_os = Darwin; then
dnl # OS X # OS X
dnl AC_MSG_RESULT([yes, always on OS X]) AC_MSG_RESULT([yes, always on OS X])
dnl ENABLE_OPENCL=TRUE ENABLE_OPENCL=TRUE
dnl OPENCL_CFLAGS= OPENCL_CFLAGS=
dnl OPENCL_LIBS="-framework OpenCL" OPENCL_LIBS="-framework OpenCL"
dnl AC_DEFINE(HAVE_FEATURE_OPENCL) AC_DEFINE(HAVE_FEATURE_OPENCL)
dnl elif test -z "$with_opencl_sdk" -o "$with_opencl_sdk" = no; then
if test -z "$with_opencl_sdk" -o "$with_opencl_sdk" = no; then
AC_MSG_RESULT([no]) AC_MSG_RESULT([no])
else else
if test -d "$with_opencl_sdk/include"; then if test -d "$with_opencl_sdk/include"; then
......
...@@ -1115,9 +1115,9 @@ int OclCalc::OclHostFormulaAverage(double *srcData,int *start,int *end,double *o ...@@ -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), cl_mem outputCl = clCreateBuffer(kEnv.mpkContext, (cl_mem_flags) (CL_MEM_READ_WRITE),
size* sizeof(float), NULL, &ret); 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); 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,CL_MAP_WRITE_INVALIDATE_REGION,0,size * sizeof(unsigned int),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,CL_MAP_WRITE_INVALIDATE_REGION,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 #if 1
for(int i=0;i<size;i++) for(int i=0;i<size;i++)
{ {
...@@ -1440,11 +1440,11 @@ int OclCalc::CreateBuffer(float *&fpSrcData,uint *&npStartPos,uint *&npEndPos,in ...@@ -1440,11 +1440,11 @@ int OclCalc::CreateBuffer(float *&fpSrcData,uint *&npStartPos,uint *&npEndPos,in
nBufferSize * sizeof(unsigned int), NULL, &clStatus); nBufferSize * sizeof(unsigned int), NULL, &clStatus);
CHECK_OPENCL(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); 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); 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); CHECK_OPENCL(clStatus);
//printf("In CreateBuffer, pptrr is %d,%d,%d\n",fpSrcData,npStartPos,npEndPos); //printf("In CreateBuffer, pptrr is %d,%d,%d\n",fpSrcData,npStartPos,npEndPos);
return 0; return 0;
...@@ -1461,9 +1461,9 @@ int OclCalc::CreateBuffer(float *&fpLeftData,float *&fpRightData,int nBufferSize ...@@ -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), mpClmemRightData = clCreateBuffer(kEnv.mpkContext, (cl_mem_flags) (CL_MEM_READ_WRITE | CL_MEM_ALLOC_HOST_PTR),
nBufferSize * sizeof(unsigned int), NULL, &clStatus); nBufferSize * sizeof(unsigned int), NULL, &clStatus);
CHECK_OPENCL(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); 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); CHECK_OPENCL(clStatus);
//printf("In CreateBuffer, pptrr is %d,%d,%d\n",fpSrcData,npStartPos,npEndPos); //printf("In CreateBuffer, pptrr is %d,%d,%d\n",fpSrcData,npStartPos,npEndPos);
return 0; return 0;
......
...@@ -20,6 +20,20 @@ ...@@ -20,6 +20,20 @@
#include <CL/cl.h> #include <CL/cl.h>
#endif #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) #if defined(_MSC_VER)
#ifndef strcasecmp #ifndef strcasecmp
#define strcasecmp strcmp #define strcasecmp strcmp
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment