diff options
Diffstat (limited to 'thirdparty/bullet/Bullet3OpenCL/Initialize')
3 files changed, 352 insertions, 401 deletions
diff --git a/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLInclude.h b/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLInclude.h index e79182d7cb..6146538263 100644 --- a/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLInclude.h +++ b/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLInclude.h @@ -17,7 +17,7 @@ subject to the following restrictions: #define B3_OPENCL_INCLUDE_H #ifdef B3_USE_CLEW - #include "clew/clew.h" +#include "clew/clew.h" #else #ifdef __APPLE__ @@ -25,7 +25,7 @@ subject to the following restrictions: #include <MiniCL/cl.h> #else #include <OpenCL/cl.h> -#include <OpenCL/cl_ext.h> //clLogMessagesToStderrAPPLE +#include <OpenCL/cl_ext.h> //clLogMessagesToStderrAPPLE #endif #else #ifdef USE_MINICL @@ -34,15 +34,18 @@ subject to the following restrictions: #include <CL/cl.h> #ifdef _WIN32 #include "CL/cl_gl.h" -#endif //_WIN32 +#endif //_WIN32 #endif -#endif //__APPLE__ -#endif //B3_USE_CLEW +#endif //__APPLE__ +#endif //B3_USE_CLEW #include <assert.h> #include <stdio.h> -#define oclCHECKERROR(a, b) if((a)!=(b)) { printf("OCL Error : %d\n", (a)); assert((a) == (b)); } - - -#endif //B3_OPENCL_INCLUDE_H - +#define oclCHECKERROR(a, b) \ + if ((a) != (b)) \ + { \ + printf("OCL Error : %d\n", (a)); \ + assert((a) == (b)); \ + } + +#endif //B3_OPENCL_INCLUDE_H diff --git a/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLUtils.cpp b/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLUtils.cpp index 896191c89c..fe54ea5ec9 100644 --- a/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLUtils.cpp +++ b/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLUtils.cpp @@ -16,7 +16,6 @@ subject to the following restrictions: //Original author: Roman Ponomarev //Mostly Reimplemented by Erwin Coumans - bool gDebugForceLoadingFromSource = false; bool gDebugSkipLoadingBinary = false; @@ -25,7 +24,7 @@ bool gDebugSkipLoadingBinary = false; #include <string.h> #ifdef _WIN32 -#pragma warning (disable:4996) +#pragma warning(disable : 4996) #endif #include "b3OpenCLUtils.h" //#include "b3OpenCLInclude.h" @@ -33,7 +32,7 @@ bool gDebugSkipLoadingBinary = false; #include <stdio.h> #include <stdlib.h> -#define B3_MAX_CL_DEVICES 16 //who needs 16 devices? +#define B3_MAX_CL_DEVICES 16 //who needs 16 devices? #ifdef _WIN32 #include <windows.h> @@ -46,53 +45,49 @@ bool gDebugSkipLoadingBinary = false; #endif -static const char* sCachedBinaryPath="cache"; - +static const char* sCachedBinaryPath = "cache"; //Set the preferred platform vendor using the OpenCL SDK static const char* spPlatformVendor = #if defined(CL_PLATFORM_MINI_CL) -"MiniCL, SCEA"; + "MiniCL, SCEA"; #elif defined(CL_PLATFORM_AMD) -"Advanced Micro Devices, Inc."; + "Advanced Micro Devices, Inc."; #elif defined(CL_PLATFORM_NVIDIA) -"NVIDIA Corporation"; + "NVIDIA Corporation"; #elif defined(CL_PLATFORM_INTEL) -"Intel(R) Corporation"; + "Intel(R) Corporation"; #elif defined(B3_USE_CLEW) -"clew (OpenCL Extension Wrangler library)"; + "clew (OpenCL Extension Wrangler library)"; #else -"Unknown Vendor"; + "Unknown Vendor"; #endif #ifndef CL_PLATFORM_MINI_CL #ifdef _WIN32 #ifndef B3_USE_CLEW #include "CL/cl_gl.h" -#endif //B3_USE_CLEW -#endif //_WIN32 +#endif //B3_USE_CLEW +#endif //_WIN32 #endif - -void MyFatalBreakAPPLE( const char * errstr , - const void * private_info , - size_t cb , - void * user_data ) +void MyFatalBreakAPPLE(const char* errstr, + const void* private_info, + size_t cb, + void* user_data) { - - - const char* patloc = strstr(errstr, "Warning"); - //find out if it is a warning or error, exit if error + const char* patloc = strstr(errstr, "Warning"); + //find out if it is a warning or error, exit if error - if (patloc) - { + if (patloc) + { b3Warning("Warning: %s\n", errstr); - } else - { + } + else + { b3Error("Error: %s\n", errstr); - b3Assert(0); - } - + b3Assert(0); + } } #ifdef B3_USE_CLEW @@ -102,30 +97,31 @@ int b3OpenCLUtils_clewInit() int result = -1; #ifdef _WIN32 - const char* cl = "OpenCL.dll"; + const char* cl = "OpenCL.dll"; #elif defined __APPLE__ - const char* cl = "/System/Library/Frameworks/OpenCL.framework/Versions/Current/OpenCL"; -#else//presumable Linux? - //linux (tested on Ubuntu 12.10 with Catalyst 13.4 beta drivers, not that there is no symbolic link from libOpenCL.so - const char* cl = "libOpenCL.so.1"; - result = clewInit(cl); - if (result != CLEW_SUCCESS) - { - cl = "libOpenCL.so"; - } else - { - clewExit(); - } + const char* cl = "/System/Library/Frameworks/OpenCL.framework/Versions/Current/OpenCL"; +#else //presumable Linux? \ + //linux (tested on Ubuntu 12.10 with Catalyst 13.4 beta drivers, not that there is no symbolic link from libOpenCL.so + const char* cl = "libOpenCL.so.1"; + result = clewInit(cl); + if (result != CLEW_SUCCESS) + { + cl = "libOpenCL.so"; + } + else + { + clewExit(); + } #endif - result = clewInit(cl); - if (result!=CLEW_SUCCESS) - { - b3Error("clewInit failed with error code %d\n",result); - } - else - { - b3Printf("clewInit succesfull using %s\n",cl); - } + result = clewInit(cl); + if (result != CLEW_SUCCESS) + { + b3Error("clewInit failed with error code %d\n", result); + } + else + { + b3Printf("clewInit succesfull using %s\n", cl); + } return result; } #endif @@ -136,19 +132,18 @@ int b3OpenCLUtils_getNumPlatforms(cl_int* pErrNum) b3OpenCLUtils_clewInit(); #endif - cl_platform_id pPlatforms[10] = { 0 }; + cl_platform_id pPlatforms[10] = {0}; - cl_uint numPlatforms = 0; - cl_int ciErrNum = clGetPlatformIDs(10, pPlatforms, &numPlatforms); + cl_uint numPlatforms = 0; + cl_int ciErrNum = clGetPlatformIDs(10, pPlatforms, &numPlatforms); //cl_int ciErrNum = clGetPlatformIDs(0, NULL, &numPlatforms); - if(ciErrNum != CL_SUCCESS) + if (ciErrNum != CL_SUCCESS) { - if(pErrNum != NULL) + if (pErrNum != NULL) *pErrNum = ciErrNum; } return numPlatforms; - } const char* b3OpenCLUtils_getSdkVendorName() @@ -164,28 +159,28 @@ void b3OpenCLUtils_setCachePath(const char* path) cl_platform_id b3OpenCLUtils_getPlatform(int platformIndex0, cl_int* pErrNum) { #ifdef B3_USE_CLEW - b3OpenCLUtils_clewInit(); + b3OpenCLUtils_clewInit(); #endif cl_platform_id platform = 0; - unsigned int platformIndex = (unsigned int )platformIndex0; + unsigned int platformIndex = (unsigned int)platformIndex0; cl_uint numPlatforms; cl_int ciErrNum = clGetPlatformIDs(0, NULL, &numPlatforms); - if (platformIndex<numPlatforms) + if (platformIndex < numPlatforms) { - cl_platform_id* platforms = (cl_platform_id*) malloc (sizeof(cl_platform_id)*numPlatforms); + cl_platform_id* platforms = (cl_platform_id*)malloc(sizeof(cl_platform_id) * numPlatforms); ciErrNum = clGetPlatformIDs(numPlatforms, platforms, NULL); - if(ciErrNum != CL_SUCCESS) + if (ciErrNum != CL_SUCCESS) { - if(pErrNum != NULL) + if (pErrNum != NULL) *pErrNum = ciErrNum; return platform; } platform = platforms[platformIndex]; - free (platforms); + free(platforms); } return platform; @@ -195,30 +190,28 @@ void b3OpenCLUtils::getPlatformInfo(cl_platform_id platform, b3OpenCLPlatformInf { b3Assert(platform); cl_int ciErrNum; - ciErrNum = clGetPlatformInfo( platform,CL_PLATFORM_VENDOR,B3_MAX_STRING_LENGTH,platformInfo->m_platformVendor,NULL); - oclCHECKERROR(ciErrNum,CL_SUCCESS); - ciErrNum = clGetPlatformInfo( platform,CL_PLATFORM_NAME,B3_MAX_STRING_LENGTH,platformInfo->m_platformName,NULL); - oclCHECKERROR(ciErrNum,CL_SUCCESS); - ciErrNum = clGetPlatformInfo( platform,CL_PLATFORM_VERSION,B3_MAX_STRING_LENGTH,platformInfo->m_platformVersion,NULL); - oclCHECKERROR(ciErrNum,CL_SUCCESS); + ciErrNum = clGetPlatformInfo(platform, CL_PLATFORM_VENDOR, B3_MAX_STRING_LENGTH, platformInfo->m_platformVendor, NULL); + oclCHECKERROR(ciErrNum, CL_SUCCESS); + ciErrNum = clGetPlatformInfo(platform, CL_PLATFORM_NAME, B3_MAX_STRING_LENGTH, platformInfo->m_platformName, NULL); + oclCHECKERROR(ciErrNum, CL_SUCCESS); + ciErrNum = clGetPlatformInfo(platform, CL_PLATFORM_VERSION, B3_MAX_STRING_LENGTH, platformInfo->m_platformVersion, NULL); + oclCHECKERROR(ciErrNum, CL_SUCCESS); } -void b3OpenCLUtils_printPlatformInfo( cl_platform_id platform) +void b3OpenCLUtils_printPlatformInfo(cl_platform_id platform) { b3OpenCLPlatformInfo platformInfo; - b3OpenCLUtils::getPlatformInfo (platform, &platformInfo); + b3OpenCLUtils::getPlatformInfo(platform, &platformInfo); b3Printf("Platform info:\n"); - b3Printf(" CL_PLATFORM_VENDOR: \t\t\t%s\n",platformInfo.m_platformVendor); - b3Printf(" CL_PLATFORM_NAME: \t\t\t%s\n",platformInfo.m_platformName); - b3Printf(" CL_PLATFORM_VERSION: \t\t\t%s\n",platformInfo.m_platformVersion); + b3Printf(" CL_PLATFORM_VENDOR: \t\t\t%s\n", platformInfo.m_platformVendor); + b3Printf(" CL_PLATFORM_NAME: \t\t\t%s\n", platformInfo.m_platformName); + b3Printf(" CL_PLATFORM_VERSION: \t\t\t%s\n", platformInfo.m_platformVersion); } - - cl_context b3OpenCLUtils_createContextFromPlatform(cl_platform_id platform, cl_device_type deviceType, cl_int* pErrNum, void* pGLContext, void* pGLDC, int preferredDeviceIndex, int preferredPlatformIndex) { cl_context retContext = 0; - cl_int ciErrNum=0; + cl_int ciErrNum = 0; cl_uint num_entries; cl_device_id devices[B3_MAX_CL_DEVICES]; cl_uint num_devices; @@ -228,7 +221,7 @@ cl_context b3OpenCLUtils_createContextFromPlatform(cl_platform_id platform, cl_d * If we could find our platform, use it. Otherwise pass a NULL and get whatever the * implementation thinks we should be using. */ - cl_context_properties cps[7] = {0,0,0,0,0,0,0}; + cl_context_properties cps[7] = {0, 0, 0, 0, 0, 0, 0}; cps[0] = CL_CONTEXT_PLATFORM; cps[1] = (cl_context_properties)platform; #ifdef _WIN32 @@ -240,25 +233,24 @@ cl_context b3OpenCLUtils_createContextFromPlatform(cl_platform_id platform, cl_d cps[4] = CL_WGL_HDC_KHR; cps[5] = (cl_context_properties)pGLDC; } -#endif //B3_USE_CLEW -#endif //_WIN32 +#endif //B3_USE_CLEW +#endif //_WIN32 num_entries = B3_MAX_CL_DEVICES; - - num_devices=-1; + num_devices = -1; ciErrNum = clGetDeviceIDs( platform, deviceType, - num_entries, - devices, - &num_devices); - - if (ciErrNum<0) - { - b3Printf("clGetDeviceIDs returned %d\n",ciErrNum); - return 0; - } + num_entries, + devices, + &num_devices); + + if (ciErrNum < 0) + { + b3Printf("clGetDeviceIDs returned %d\n", ciErrNum); + return 0; + } cprops = (NULL == platform) ? NULL : cps; if (!num_devices) @@ -268,32 +260,33 @@ cl_context b3OpenCLUtils_createContextFromPlatform(cl_platform_id platform, cl_d { //search for the GPU that relates to the OpenCL context unsigned int i; - for (i=0;i<num_devices;i++) + for (i = 0; i < num_devices; i++) { - retContext = clCreateContext(cprops,1,&devices[i],NULL,NULL,&ciErrNum); - if (ciErrNum==CL_SUCCESS) + retContext = clCreateContext(cprops, 1, &devices[i], NULL, NULL, &ciErrNum); + if (ciErrNum == CL_SUCCESS) break; } } else { - if (preferredDeviceIndex>=0 && (unsigned int)preferredDeviceIndex<num_devices) + if (preferredDeviceIndex >= 0 && (unsigned int)preferredDeviceIndex < num_devices) { //create a context of the preferred device index - retContext = clCreateContext(cprops,1,&devices[preferredDeviceIndex],NULL,NULL,&ciErrNum); - } else + retContext = clCreateContext(cprops, 1, &devices[preferredDeviceIndex], NULL, NULL, &ciErrNum); + } + else { //create a context of all devices -#if defined (__APPLE__) - retContext = clCreateContext(cprops,num_devices,devices,MyFatalBreakAPPLE,NULL,&ciErrNum); +#if defined(__APPLE__) + retContext = clCreateContext(cprops, num_devices, devices, MyFatalBreakAPPLE, NULL, &ciErrNum); #else - b3Printf("numDevices=%d\n",num_devices); + b3Printf("numDevices=%d\n", num_devices); - retContext = clCreateContext(cprops,num_devices,devices,NULL,NULL,&ciErrNum); + retContext = clCreateContext(cprops, num_devices, devices, NULL, NULL, &ciErrNum); #endif } } - if(pErrNum != NULL) + if (pErrNum != NULL) { *pErrNum = ciErrNum; }; @@ -301,60 +294,58 @@ cl_context b3OpenCLUtils_createContextFromPlatform(cl_platform_id platform, cl_d return retContext; } -cl_context b3OpenCLUtils_createContextFromType(cl_device_type deviceType, cl_int* pErrNum, void* pGLContext, void* pGLDC , int preferredDeviceIndex, int preferredPlatformIndex, cl_platform_id* retPlatformId) +cl_context b3OpenCLUtils_createContextFromType(cl_device_type deviceType, cl_int* pErrNum, void* pGLContext, void* pGLDC, int preferredDeviceIndex, int preferredPlatformIndex, cl_platform_id* retPlatformId) { #ifdef B3_USE_CLEW - b3OpenCLUtils_clewInit(); + b3OpenCLUtils_clewInit(); #endif - cl_uint numPlatforms; cl_context retContext = 0; unsigned int i; cl_int ciErrNum = clGetPlatformIDs(0, NULL, &numPlatforms); - if(ciErrNum != CL_SUCCESS) + if (ciErrNum != CL_SUCCESS) { - if(pErrNum != NULL) *pErrNum = ciErrNum; + if (pErrNum != NULL) *pErrNum = ciErrNum; return NULL; } - if(numPlatforms > 0) + if (numPlatforms > 0) { - cl_platform_id* platforms = (cl_platform_id*) malloc (sizeof(cl_platform_id)*numPlatforms); + cl_platform_id* platforms = (cl_platform_id*)malloc(sizeof(cl_platform_id) * numPlatforms); ciErrNum = clGetPlatformIDs(numPlatforms, platforms, NULL); - if(ciErrNum != CL_SUCCESS) + if (ciErrNum != CL_SUCCESS) { - if(pErrNum != NULL) + if (pErrNum != NULL) *pErrNum = ciErrNum; free(platforms); return NULL; } - - - for ( i = 0; i < numPlatforms; ++i) + for (i = 0; i < numPlatforms; ++i) { char pbuf[128]; - ciErrNum = clGetPlatformInfo( platforms[i], - CL_PLATFORM_VENDOR, - sizeof(pbuf), - pbuf, - NULL); - if(ciErrNum != CL_SUCCESS) + ciErrNum = clGetPlatformInfo(platforms[i], + CL_PLATFORM_VENDOR, + sizeof(pbuf), + pbuf, + NULL); + if (ciErrNum != CL_SUCCESS) { - if(pErrNum != NULL) *pErrNum = ciErrNum; + if (pErrNum != NULL) *pErrNum = ciErrNum; return NULL; } - if (preferredPlatformIndex>=0 && i==preferredPlatformIndex) + if (preferredPlatformIndex >= 0 && i == preferredPlatformIndex) { cl_platform_id tmpPlatform = platforms[0]; platforms[0] = platforms[i]; platforms[i] = tmpPlatform; break; - } else + } + else { - if(!strcmp(pbuf, spPlatformVendor)) + if (!strcmp(pbuf, spPlatformVendor)) { cl_platform_id tmpPlatform = platforms[0]; platforms[0] = platforms[i]; @@ -368,11 +359,11 @@ cl_context b3OpenCLUtils_createContextFromType(cl_device_type deviceType, cl_int cl_platform_id platform = platforms[i]; assert(platform); - retContext = b3OpenCLUtils_createContextFromPlatform(platform,deviceType,pErrNum,pGLContext,pGLDC,preferredDeviceIndex,preferredPlatformIndex); + retContext = b3OpenCLUtils_createContextFromPlatform(platform, deviceType, pErrNum, pGLContext, pGLDC, preferredDeviceIndex, preferredPlatformIndex); if (retContext) { -// printf("OpenCL platform details:\n"); + // printf("OpenCL platform details:\n"); b3OpenCLPlatformInfo platformInfo; b3OpenCLUtils::getPlatformInfo(platform, &platformInfo); @@ -384,12 +375,11 @@ cl_context b3OpenCLUtils_createContextFromType(cl_device_type deviceType, cl_int } } - free (platforms); + free(platforms); } return retContext; } - ////////////////////////////////////////////////////////////////////////////// //! Gets the id of the nth device from the context //! @@ -403,16 +393,17 @@ cl_device_id b3OpenCLUtils_getDevice(cl_context cxMainContext, int deviceIndex) size_t szParmDataBytes; cl_device_id* cdDevices; - cl_device_id device ; + cl_device_id device; // get the list of devices associated with context clGetContextInfo(cxMainContext, CL_CONTEXT_DEVICES, 0, NULL, &szParmDataBytes); - if( szParmDataBytes / sizeof(cl_device_id) < (unsigned int)deviceIndex ) { + if (szParmDataBytes / sizeof(cl_device_id) < (unsigned int)deviceIndex) + { return (cl_device_id)-1; } - cdDevices = (cl_device_id*) malloc(szParmDataBytes); + cdDevices = (cl_device_id*)malloc(szParmDataBytes); clGetContextInfo(cxMainContext, CL_CONTEXT_DEVICES, szParmDataBytes, cdDevices, NULL); @@ -427,12 +418,10 @@ int b3OpenCLUtils_getNumDevices(cl_context cxMainContext) size_t szParamDataBytes; int device_count; clGetContextInfo(cxMainContext, CL_CONTEXT_DEVICES, 0, NULL, &szParamDataBytes); - device_count = (int) szParamDataBytes/ sizeof(cl_device_id); + device_count = (int)szParamDataBytes / sizeof(cl_device_id); return device_count; } - - void b3OpenCLUtils::getDeviceInfo(cl_device_id device, b3OpenCLDeviceInfo* info) { // CL_DEVICE_NAME @@ -514,23 +503,22 @@ void b3OpenCLUtils::getDeviceInfo(cl_device_id device, b3OpenCLDeviceInfo* info) clGetDeviceInfo(device, CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE, sizeof(cl_uint), &info->m_vecWidthDouble, NULL); } - void b3OpenCLUtils_printDeviceInfo(cl_device_id device) { b3OpenCLDeviceInfo info; - b3OpenCLUtils::getDeviceInfo(device,&info); + b3OpenCLUtils::getDeviceInfo(device, &info); b3Printf("Device Info:\n"); b3Printf(" CL_DEVICE_NAME: \t\t\t%s\n", info.m_deviceName); b3Printf(" CL_DEVICE_VENDOR: \t\t\t%s\n", info.m_deviceVendor); b3Printf(" CL_DRIVER_VERSION: \t\t\t%s\n", info.m_driverVersion); - if( info.m_deviceType & CL_DEVICE_TYPE_CPU ) + if (info.m_deviceType & CL_DEVICE_TYPE_CPU) b3Printf(" CL_DEVICE_TYPE:\t\t\t%s\n", "CL_DEVICE_TYPE_CPU"); - if( info.m_deviceType & CL_DEVICE_TYPE_GPU ) + if (info.m_deviceType & CL_DEVICE_TYPE_GPU) b3Printf(" CL_DEVICE_TYPE:\t\t\t%s\n", "CL_DEVICE_TYPE_GPU"); - if( info.m_deviceType & CL_DEVICE_TYPE_ACCELERATOR ) + if (info.m_deviceType & CL_DEVICE_TYPE_ACCELERATOR) b3Printf(" CL_DEVICE_TYPE:\t\t\t%s\n", "CL_DEVICE_TYPE_ACCELERATOR"); - if( info.m_deviceType & CL_DEVICE_TYPE_DEFAULT ) + if (info.m_deviceType & CL_DEVICE_TYPE_DEFAULT) b3Printf(" CL_DEVICE_TYPE:\t\t\t%s\n", "CL_DEVICE_TYPE_DEFAULT"); b3Printf(" CL_DEVICE_MAX_COMPUTE_UNITS:\t\t%u\n", info.m_computeUnits); @@ -539,15 +527,15 @@ void b3OpenCLUtils_printDeviceInfo(cl_device_id device) b3Printf(" CL_DEVICE_MAX_WORK_GROUP_SIZE:\t%u\n", info.m_workgroupSize); b3Printf(" CL_DEVICE_MAX_CLOCK_FREQUENCY:\t%u MHz\n", info.m_clockFrequency); b3Printf(" CL_DEVICE_ADDRESS_BITS:\t\t%u\n", info.m_addressBits); - b3Printf(" CL_DEVICE_MAX_MEM_ALLOC_SIZE:\t\t%u MByte\n", (unsigned int)(info.m_maxMemAllocSize/ (1024 * 1024))); - b3Printf(" CL_DEVICE_GLOBAL_MEM_SIZE:\t\t%u MByte\n", (unsigned int)(info.m_globalMemSize/ (1024 * 1024))); - b3Printf(" CL_DEVICE_ERROR_CORRECTION_SUPPORT:\t%s\n", info.m_errorCorrectionSupport== CL_TRUE ? "yes" : "no"); + b3Printf(" CL_DEVICE_MAX_MEM_ALLOC_SIZE:\t\t%u MByte\n", (unsigned int)(info.m_maxMemAllocSize / (1024 * 1024))); + b3Printf(" CL_DEVICE_GLOBAL_MEM_SIZE:\t\t%u MByte\n", (unsigned int)(info.m_globalMemSize / (1024 * 1024))); + b3Printf(" CL_DEVICE_ERROR_CORRECTION_SUPPORT:\t%s\n", info.m_errorCorrectionSupport == CL_TRUE ? "yes" : "no"); b3Printf(" CL_DEVICE_LOCAL_MEM_TYPE:\t\t%s\n", info.m_localMemType == 1 ? "local" : "global"); b3Printf(" CL_DEVICE_LOCAL_MEM_SIZE:\t\t%u KByte\n", (unsigned int)(info.m_localMemSize / 1024)); b3Printf(" CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE:\t%u KByte\n", (unsigned int)(info.m_constantBufferSize / 1024)); - if( info.m_queueProperties & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE ) + if (info.m_queueProperties & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE) b3Printf(" CL_DEVICE_QUEUE_PROPERTIES:\t\t%s\n", "CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE"); - if( info.m_queueProperties & CL_QUEUE_PROFILING_ENABLE ) + if (info.m_queueProperties & CL_QUEUE_PROFILING_ENABLE) b3Printf(" CL_DEVICE_QUEUE_PROPERTIES:\t\t%s\n", "CL_QUEUE_PROFILING_ENABLE"); b3Printf(" CL_DEVICE_IMAGE_SUPPORT:\t\t%u\n", info.m_imageSupport); @@ -562,7 +550,7 @@ void b3OpenCLUtils_printDeviceInfo(cl_device_id device) b3Printf("\t\t\t\t\t3D_MAX_DEPTH\t %u\n", info.m_image3dMaxDepth); if (*info.m_deviceExtensions != 0) { - b3Printf("\n CL_DEVICE_EXTENSIONS:%s\n",info.m_deviceExtensions); + b3Printf("\n CL_DEVICE_EXTENSIONS:%s\n", info.m_deviceExtensions); } else { @@ -570,36 +558,33 @@ void b3OpenCLUtils_printDeviceInfo(cl_device_id device) } b3Printf(" CL_DEVICE_PREFERRED_VECTOR_WIDTH_<t>\t"); b3Printf("CHAR %u, SHORT %u, INT %u,LONG %u, FLOAT %u, DOUBLE %u\n\n\n", - info.m_vecWidthChar, info.m_vecWidthShort, info.m_vecWidthInt, info.m_vecWidthLong,info.m_vecWidthFloat, info.m_vecWidthDouble); - - + info.m_vecWidthChar, info.m_vecWidthShort, info.m_vecWidthInt, info.m_vecWidthLong, info.m_vecWidthFloat, info.m_vecWidthDouble); } - static const char* strip2(const char* name, const char* pattern) { - size_t const patlen = strlen(pattern); - size_t patcnt = 0; - const char * oriptr; - const char * patloc; - // find how many times the pattern occurs in the original string - for (oriptr = name; (patloc = strstr(oriptr, pattern)); oriptr = patloc + patlen) - { + size_t const patlen = strlen(pattern); + size_t patcnt = 0; + const char* oriptr; + const char* patloc; + // find how many times the pattern occurs in the original string + for (oriptr = name; (patloc = strstr(oriptr, pattern)); oriptr = patloc + patlen) + { patcnt++; - } - return oriptr; + } + return oriptr; } -cl_program b3OpenCLUtils_compileCLProgramFromString(cl_context clContext, cl_device_id device, const char* kernelSourceOrg, cl_int* pErrNum, const char* additionalMacrosArg , const char* clFileNameForCaching, bool disableBinaryCaching) +cl_program b3OpenCLUtils_compileCLProgramFromString(cl_context clContext, cl_device_id device, const char* kernelSourceOrg, cl_int* pErrNum, const char* additionalMacrosArg, const char* clFileNameForCaching, bool disableBinaryCaching) { - const char* additionalMacros = additionalMacrosArg?additionalMacrosArg:""; + const char* additionalMacros = additionalMacrosArg ? additionalMacrosArg : ""; if (disableBinaryCaching) { //kernelSourceOrg = 0; } - cl_program m_cpProgram=0; + cl_program m_cpProgram = 0; cl_int status; char binaryFileName[B3_MAX_STRING_LENGTH]; @@ -609,67 +594,64 @@ cl_program b3OpenCLUtils_compileCLProgramFromString(cl_context clContext, cl_dev const char* strippedName; int fileUpToDate = 0; #ifdef _WIN32 - int binaryFileValid=0; -#endif + int binaryFileValid = 0; +#endif if (!disableBinaryCaching && clFileNameForCaching) { clGetDeviceInfo(device, CL_DEVICE_NAME, 256, &deviceName, NULL); clGetDeviceInfo(device, CL_DRIVER_VERSION, 256, &driverVersion, NULL); - - strippedName = strip2(clFileNameForCaching,"\\"); - strippedName = strip2(strippedName,"/"); - + + strippedName = strip2(clFileNameForCaching, "\\"); + strippedName = strip2(strippedName, "/"); + #ifdef _MSC_VER - sprintf_s(binaryFileName,B3_MAX_STRING_LENGTH,"%s/%s.%s.%s.bin",sCachedBinaryPath,strippedName, deviceName,driverVersion ); + sprintf_s(binaryFileName, B3_MAX_STRING_LENGTH, "%s/%s.%s.%s.bin", sCachedBinaryPath, strippedName, deviceName, driverVersion); #else - sprintf(binaryFileName,"%s/%s.%s.%s.bin",sCachedBinaryPath,strippedName, deviceName,driverVersion ); + sprintf(binaryFileName, "%s/%s.%s.%s.bin", sCachedBinaryPath, strippedName, deviceName, driverVersion); #endif } - if (clFileNameForCaching && !(disableBinaryCaching || gDebugSkipLoadingBinary||gDebugForceLoadingFromSource) ) + if (clFileNameForCaching && !(disableBinaryCaching || gDebugSkipLoadingBinary || gDebugForceLoadingFromSource)) { - #ifdef _WIN32 - char* bla=0; - - + char* bla = 0; //printf("searching for %s\n", binaryFileName); - FILETIME modtimeBinary; - CreateDirectoryA(sCachedBinaryPath,0); + CreateDirectoryA(sCachedBinaryPath, 0); { - - HANDLE binaryFileHandle = CreateFileA(binaryFileName,GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); - if (binaryFileHandle ==INVALID_HANDLE_VALUE) + HANDLE binaryFileHandle = CreateFileA(binaryFileName, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); + if (binaryFileHandle == INVALID_HANDLE_VALUE) { DWORD errorCode; errorCode = GetLastError(); switch (errorCode) { - case ERROR_FILE_NOT_FOUND: + case ERROR_FILE_NOT_FOUND: { b3Warning("\nCached file not found %s\n", binaryFileName); break; } - case ERROR_PATH_NOT_FOUND: + case ERROR_PATH_NOT_FOUND: { b3Warning("\nCached file path not found %s\n", binaryFileName); break; } - default: + default: { b3Warning("\nFailed reading cached file with errorCode = %d\n", errorCode); } } - } else + } + else { - if (GetFileTime(binaryFileHandle, NULL, NULL, &modtimeBinary)==0) + if (GetFileTime(binaryFileHandle, NULL, NULL, &modtimeBinary) == 0) { DWORD errorCode; errorCode = GetLastError(); b3Warning("\nGetFileTime errorCode = %d\n", errorCode); - } else + } + else { binaryFileValid = 1; } @@ -678,37 +660,35 @@ cl_program b3OpenCLUtils_compileCLProgramFromString(cl_context clContext, cl_dev if (binaryFileValid) { - HANDLE srcFileHandle = CreateFileA(clFileNameForCaching,GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); + HANDLE srcFileHandle = CreateFileA(clFileNameForCaching, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); - if (srcFileHandle==INVALID_HANDLE_VALUE) + if (srcFileHandle == INVALID_HANDLE_VALUE) { - const char* prefix[]={"./","../","../../","../../../","../../../../"}; - for (int i=0;(srcFileHandle==INVALID_HANDLE_VALUE) && i<5;i++) + const char* prefix[] = {"./", "../", "../../", "../../../", "../../../../"}; + for (int i = 0; (srcFileHandle == INVALID_HANDLE_VALUE) && i < 5; i++) { char relativeFileName[1024]; - sprintf(relativeFileName,"%s%s",prefix[i],clFileNameForCaching); - srcFileHandle = CreateFileA(relativeFileName,GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); + sprintf(relativeFileName, "%s%s", prefix[i], clFileNameForCaching); + srcFileHandle = CreateFileA(relativeFileName, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); } - } - - if (srcFileHandle!=INVALID_HANDLE_VALUE) + if (srcFileHandle != INVALID_HANDLE_VALUE) { FILETIME modtimeSrc; - if (GetFileTime(srcFileHandle, NULL, NULL, &modtimeSrc)==0) + if (GetFileTime(srcFileHandle, NULL, NULL, &modtimeSrc) == 0) { DWORD errorCode; errorCode = GetLastError(); b3Warning("\nGetFileTime errorCode = %d\n", errorCode); } - if ( ( modtimeSrc.dwHighDateTime < modtimeBinary.dwHighDateTime) - ||(( modtimeSrc.dwHighDateTime == modtimeBinary.dwHighDateTime)&&(modtimeSrc.dwLowDateTime <= modtimeBinary.dwLowDateTime))) + if ((modtimeSrc.dwHighDateTime < modtimeBinary.dwHighDateTime) || ((modtimeSrc.dwHighDateTime == modtimeBinary.dwHighDateTime) && (modtimeSrc.dwLowDateTime <= modtimeBinary.dwLowDateTime))) { - fileUpToDate=1; - } else + fileUpToDate = 1; + } + else { - b3Warning("\nCached binary file out-of-date (%s)\n",binaryFileName); + b3Warning("\nCached binary file out-of-date (%s)\n", binaryFileName); } CloseHandle(srcFileHandle); } @@ -719,25 +699,25 @@ cl_program b3OpenCLUtils_compileCLProgramFromString(cl_context clContext, cl_dev errorCode = GetLastError(); switch (errorCode) { - case ERROR_FILE_NOT_FOUND: + case ERROR_FILE_NOT_FOUND: { b3Warning("\nSrc file not found %s\n", clFileNameForCaching); break; } - case ERROR_PATH_NOT_FOUND: + case ERROR_PATH_NOT_FOUND: { b3Warning("\nSrc path not found %s\n", clFileNameForCaching); break; } - default: + default: { b3Warning("\nnSrc file reading errorCode = %d\n", errorCode); } } //we should make sure the src file exists so we can verify the timestamp with binary -// assert(0); - b3Warning("Warning: cannot find OpenCL kernel %s to verify timestamp of binary cached kernel %s\n",clFileNameForCaching, binaryFileName); + // assert(0); + b3Warning("Warning: cannot find OpenCL kernel %s to verify timestamp of binary cached kernel %s\n", clFileNameForCaching, binaryFileName); fileUpToDate = true; #else //if we cannot find the source, assume it is OK in release builds @@ -745,126 +725,109 @@ cl_program b3OpenCLUtils_compileCLProgramFromString(cl_context clContext, cl_dev #endif } } - - } - - #else - fileUpToDate = true; - if (mkdir(sCachedBinaryPath,0777) == -1) - { - } - else - { - b3Printf("Succesfully created cache directory: %s\n", sCachedBinaryPath); - } -#endif //_WIN32 + fileUpToDate = true; + if (mkdir(sCachedBinaryPath, 0777) == -1) + { + } + else + { + b3Printf("Succesfully created cache directory: %s\n", sCachedBinaryPath); + } +#endif //_WIN32 } - - - if( fileUpToDate) + + if (fileUpToDate) { #ifdef _MSC_VER FILE* file; - if (fopen_s(&file,binaryFileName, "rb")!=0) - file=0; + if (fopen_s(&file, binaryFileName, "rb") != 0) + file = 0; #else FILE* file = fopen(binaryFileName, "rb"); #endif - + if (file) { - size_t binarySize=0; - char* binary =0; - - fseek( file, 0L, SEEK_END ); - binarySize = ftell( file ); - rewind( file ); - binary = (char*)malloc(sizeof(char)*binarySize); + size_t binarySize = 0; + char* binary = 0; + + fseek(file, 0L, SEEK_END); + binarySize = ftell(file); + rewind(file); + binary = (char*)malloc(sizeof(char) * binarySize); int bytesRead; - bytesRead = fread( binary, sizeof(char), binarySize, file ); - fclose( file ); - - m_cpProgram = clCreateProgramWithBinary( clContext, 1,&device, &binarySize, (const unsigned char**)&binary, 0, &status ); - b3Assert( status == CL_SUCCESS ); - status = clBuildProgram( m_cpProgram, 1, &device, additionalMacros, 0, 0 ); - b3Assert( status == CL_SUCCESS ); - - if( status != CL_SUCCESS ) + bytesRead = fread(binary, sizeof(char), binarySize, file); + fclose(file); + + m_cpProgram = clCreateProgramWithBinary(clContext, 1, &device, &binarySize, (const unsigned char**)&binary, 0, &status); + b3Assert(status == CL_SUCCESS); + status = clBuildProgram(m_cpProgram, 1, &device, additionalMacros, 0, 0); + b3Assert(status == CL_SUCCESS); + + if (status != CL_SUCCESS) { - char *build_log; + char* build_log; size_t ret_val_size; clGetProgramBuildInfo(m_cpProgram, device, CL_PROGRAM_BUILD_LOG, 0, NULL, &ret_val_size); - build_log = (char*)malloc(sizeof(char)*(ret_val_size+1)); + build_log = (char*)malloc(sizeof(char) * (ret_val_size + 1)); clGetProgramBuildInfo(m_cpProgram, device, CL_PROGRAM_BUILD_LOG, ret_val_size, build_log, NULL); build_log[ret_val_size] = '\0'; b3Error("%s\n", build_log); - free (build_log); + free(build_log); b3Assert(0); m_cpProgram = 0; - b3Warning("clBuildProgram reported failure on cached binary: %s\n",binaryFileName); - - } else + b3Warning("clBuildProgram reported failure on cached binary: %s\n", binaryFileName); + } + else { - b3Printf("clBuildProgram successfully compiled cached binary: %s\n",binaryFileName); + b3Printf("clBuildProgram successfully compiled cached binary: %s\n", binaryFileName); } - free (binary); - - } else + free(binary); + } + else { - b3Warning("Cannot open cached binary: %s\n",binaryFileName); + b3Warning("Cannot open cached binary: %s\n", binaryFileName); } } - - - - - - - - - + if (!m_cpProgram) { - cl_int localErrNum; char* compileFlags; int flagsize; - - const char* kernelSource = kernelSourceOrg; if (!kernelSourceOrg || gDebugForceLoadingFromSource) { if (clFileNameForCaching) { - FILE* file = fopen(clFileNameForCaching, "rb"); //in many cases the relative path is a few levels up the directory hierarchy, so try it if (!file) { - const char* prefix[]={"../","../../","../../../","../../../../"}; - for (int i=0;!file && i<3;i++) + const char* prefix[] = {"../", "../../", "../../../", "../../../../"}; + for (int i = 0; !file && i < 3; i++) { char relativeFileName[1024]; - sprintf(relativeFileName,"%s%s",prefix[i],clFileNameForCaching); + sprintf(relativeFileName, "%s%s", prefix[i], clFileNameForCaching); file = fopen(relativeFileName, "rb"); } } if (file) { - char* kernelSrc=0; - fseek( file, 0L, SEEK_END ); - int kernelSize = ftell( file ); - rewind( file ); - kernelSrc = (char*)malloc(kernelSize+1); + char* kernelSrc = 0; + fseek(file, 0L, SEEK_END); + int kernelSize = ftell(file); + rewind(file); + kernelSrc = (char*)malloc(kernelSize + 1); int readBytes; - readBytes = fread((void*)kernelSrc,1,kernelSize, file); + readBytes = fread((void*)kernelSrc, 1, kernelSize, file); kernelSrc[kernelSize] = 0; fclose(file); kernelSource = kernelSrc; @@ -873,15 +836,14 @@ cl_program b3OpenCLUtils_compileCLProgramFromString(cl_context clContext, cl_dev } size_t program_length = kernelSource ? strlen(kernelSource) : 0; -#ifdef MAC //or __APPLE__? +#ifdef MAC //or __APPLE__? char* flags = "-cl-mad-enable -DMAC "; #else const char* flags = ""; #endif - m_cpProgram = clCreateProgramWithSource(clContext, 1, (const char**)&kernelSource, &program_length, &localErrNum); - if (localErrNum!= CL_SUCCESS) + if (localErrNum != CL_SUCCESS) { if (pErrNum) *pErrNum = localErrNum; @@ -890,108 +852,100 @@ cl_program b3OpenCLUtils_compileCLProgramFromString(cl_context clContext, cl_dev // Build the program with 'mad' Optimization option - - - flagsize = sizeof(char)*(strlen(additionalMacros) + strlen(flags) + 5); - compileFlags = (char*) malloc(flagsize); + flagsize = sizeof(char) * (strlen(additionalMacros) + strlen(flags) + 5); + compileFlags = (char*)malloc(flagsize); #ifdef _MSC_VER - sprintf_s(compileFlags,flagsize, "%s %s", flags, additionalMacros); + sprintf_s(compileFlags, flagsize, "%s %s", flags, additionalMacros); #else sprintf(compileFlags, "%s %s", flags, additionalMacros); #endif localErrNum = clBuildProgram(m_cpProgram, 1, &device, compileFlags, NULL, NULL); - if (localErrNum!= CL_SUCCESS) + if (localErrNum != CL_SUCCESS) { - char *build_log; + char* build_log; size_t ret_val_size; clGetProgramBuildInfo(m_cpProgram, device, CL_PROGRAM_BUILD_LOG, 0, NULL, &ret_val_size); - build_log = (char*) malloc(sizeof(char)*(ret_val_size+1)); + build_log = (char*)malloc(sizeof(char) * (ret_val_size + 1)); clGetProgramBuildInfo(m_cpProgram, device, CL_PROGRAM_BUILD_LOG, ret_val_size, build_log, NULL); // to be carefully, terminate with \0 // there's no information in the reference whether the string is 0 terminated or not build_log[ret_val_size] = '\0'; - b3Error("Error in clBuildProgram, Line %u in file %s, Log: \n%s\n !!!\n\n", __LINE__, __FILE__, build_log); - free (build_log); + free(build_log); if (pErrNum) *pErrNum = localErrNum; return 0; } - - if( !disableBinaryCaching && clFileNameForCaching ) - { // write to binary + if (!disableBinaryCaching && clFileNameForCaching) + { // write to binary cl_uint numAssociatedDevices; - status = clGetProgramInfo( m_cpProgram, CL_PROGRAM_NUM_DEVICES, sizeof(cl_uint), &numAssociatedDevices, 0 ); - b3Assert( status == CL_SUCCESS ); - if (numAssociatedDevices==1) + status = clGetProgramInfo(m_cpProgram, CL_PROGRAM_NUM_DEVICES, sizeof(cl_uint), &numAssociatedDevices, 0); + b3Assert(status == CL_SUCCESS); + if (numAssociatedDevices == 1) { - size_t binarySize; - char* binary ; + char* binary; - status = clGetProgramInfo( m_cpProgram, CL_PROGRAM_BINARY_SIZES, sizeof(size_t), &binarySize, 0 ); - b3Assert( status == CL_SUCCESS ); + status = clGetProgramInfo(m_cpProgram, CL_PROGRAM_BINARY_SIZES, sizeof(size_t), &binarySize, 0); + b3Assert(status == CL_SUCCESS); - binary = (char*)malloc(sizeof(char)*binarySize); + binary = (char*)malloc(sizeof(char) * binarySize); - status = clGetProgramInfo( m_cpProgram, CL_PROGRAM_BINARIES, sizeof(char*), &binary, 0 ); - b3Assert( status == CL_SUCCESS ); + status = clGetProgramInfo(m_cpProgram, CL_PROGRAM_BINARIES, sizeof(char*), &binary, 0); + b3Assert(status == CL_SUCCESS); { - FILE* file=0; + FILE* file = 0; #ifdef _MSC_VER - if (fopen_s(&file,binaryFileName, "wb")!=0) - file=0; + if (fopen_s(&file, binaryFileName, "wb") != 0) + file = 0; #else file = fopen(binaryFileName, "wb"); #endif if (file) { - fwrite( binary, sizeof(char), binarySize, file ); - fclose( file ); - } else + fwrite(binary, sizeof(char), binarySize, file); + fclose(file); + } + else { b3Warning("cannot write file %s\n", binaryFileName); } } - free (binary); + free(binary); } } free(compileFlags); - } return m_cpProgram; } - -cl_kernel b3OpenCLUtils_compileCLKernelFromString(cl_context clContext, cl_device_id device, const char* kernelSource, const char* kernelName, cl_int* pErrNum, cl_program prog, const char* additionalMacros ) +cl_kernel b3OpenCLUtils_compileCLKernelFromString(cl_context clContext, cl_device_id device, const char* kernelSource, const char* kernelName, cl_int* pErrNum, cl_program prog, const char* additionalMacros) { - cl_kernel kernel; cl_int localErrNum; cl_program m_cpProgram = prog; - b3Printf("compiling kernel %s ",kernelName); + b3Printf("compiling kernel %s ", kernelName); if (!m_cpProgram) { - m_cpProgram = b3OpenCLUtils_compileCLProgramFromString(clContext,device,kernelSource,pErrNum, additionalMacros,0, false); + m_cpProgram = b3OpenCLUtils_compileCLProgramFromString(clContext, device, kernelSource, pErrNum, additionalMacros, 0, false); } - // Create the kernel kernel = clCreateKernel(m_cpProgram, kernelName, &localErrNum); if (localErrNum != CL_SUCCESS) { b3Error("Error in clCreateKernel, Line %u in file %s, cannot find kernel function %s !!!\n\n", __LINE__, __FILE__, kernelName); - assert(0); + assert(0); if (pErrNum) *pErrNum = localErrNum; return 0; @@ -1003,9 +957,7 @@ cl_kernel b3OpenCLUtils_compileCLKernelFromString(cl_context clContext, cl_devic } b3Printf("ready. \n"); - if (pErrNum) - *pErrNum = CL_SUCCESS; + *pErrNum = CL_SUCCESS; return kernel; - } diff --git a/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLUtils.h b/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLUtils.h index db6466e76b..6c82eed2a6 100644 --- a/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLUtils.h +++ b/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLUtils.h @@ -22,42 +22,41 @@ subject to the following restrictions: #include "b3OpenCLInclude.h" #ifdef __cplusplus -extern "C" { +extern "C" +{ #endif + ///C API for OpenCL utilities: convenience functions, see below for C++ API -///C API for OpenCL utilities: convenience functions, see below for C++ API + /// CL Context optionally takes a GL context. This is a generic type because we don't really want this code + /// to have to understand GL types. It is a HGLRC in _WIN32 or a GLXContext otherwise. + cl_context b3OpenCLUtils_createContextFromType(cl_device_type deviceType, cl_int* pErrNum, void* pGLCtx, void* pGLDC, int preferredDeviceIndex, int preferredPlatformIndex, cl_platform_id* platformId); -/// CL Context optionally takes a GL context. This is a generic type because we don't really want this code -/// to have to understand GL types. It is a HGLRC in _WIN32 or a GLXContext otherwise. -cl_context b3OpenCLUtils_createContextFromType(cl_device_type deviceType, cl_int* pErrNum, void* pGLCtx , void* pGLDC , int preferredDeviceIndex , int preferredPlatformIndex, cl_platform_id* platformId); - -int b3OpenCLUtils_getNumDevices(cl_context cxMainContext); + int b3OpenCLUtils_getNumDevices(cl_context cxMainContext); -cl_device_id b3OpenCLUtils_getDevice(cl_context cxMainContext, int nr); + cl_device_id b3OpenCLUtils_getDevice(cl_context cxMainContext, int nr); -void b3OpenCLUtils_printDeviceInfo(cl_device_id device); + void b3OpenCLUtils_printDeviceInfo(cl_device_id device); -cl_kernel b3OpenCLUtils_compileCLKernelFromString( cl_context clContext,cl_device_id device, const char* kernelSource, const char* kernelName, cl_int* pErrNum, cl_program prog,const char* additionalMacros); + cl_kernel b3OpenCLUtils_compileCLKernelFromString(cl_context clContext, cl_device_id device, const char* kernelSource, const char* kernelName, cl_int* pErrNum, cl_program prog, const char* additionalMacros); -//optional -cl_program b3OpenCLUtils_compileCLProgramFromString( cl_context clContext,cl_device_id device, const char* kernelSource, cl_int* pErrNum,const char* additionalMacros , const char* srcFileNameForCaching, bool disableBinaryCaching); + //optional + cl_program b3OpenCLUtils_compileCLProgramFromString(cl_context clContext, cl_device_id device, const char* kernelSource, cl_int* pErrNum, const char* additionalMacros, const char* srcFileNameForCaching, bool disableBinaryCaching); -//the following optional APIs provide access using specific platform information -int b3OpenCLUtils_getNumPlatforms(cl_int* pErrNum); + //the following optional APIs provide access using specific platform information + int b3OpenCLUtils_getNumPlatforms(cl_int* pErrNum); + + ///get the nr'th platform, where nr is in the range [0..getNumPlatforms) + cl_platform_id b3OpenCLUtils_getPlatform(int nr, cl_int* pErrNum); -///get the nr'th platform, where nr is in the range [0..getNumPlatforms) -cl_platform_id b3OpenCLUtils_getPlatform(int nr, cl_int* pErrNum); + void b3OpenCLUtils_printPlatformInfo(cl_platform_id platform); + const char* b3OpenCLUtils_getSdkVendorName(); -void b3OpenCLUtils_printPlatformInfo(cl_platform_id platform); + ///set the path (directory/folder) where the compiled OpenCL kernel are stored + void b3OpenCLUtils_setCachePath(const char* path); -const char* b3OpenCLUtils_getSdkVendorName(); - -///set the path (directory/folder) where the compiled OpenCL kernel are stored -void b3OpenCLUtils_setCachePath(const char* path); - -cl_context b3OpenCLUtils_createContextFromPlatform(cl_platform_id platform, cl_device_type deviceType, cl_int* pErrNum, void* pGLCtx , void* pGLDC ,int preferredDeviceIndex , int preferredPlatformIndex); + cl_context b3OpenCLUtils_createContextFromPlatform(cl_platform_id platform, cl_device_type deviceType, cl_int* pErrNum, void* pGLCtx, void* pGLDC, int preferredDeviceIndex, int preferredPlatformIndex); #ifdef __cplusplus } @@ -71,37 +70,35 @@ typedef struct char m_driverVersion[B3_MAX_STRING_LENGTH]; char m_deviceExtensions[B3_MAX_STRING_LENGTH]; - cl_device_type m_deviceType; - cl_uint m_computeUnits; - size_t m_workitemDims; - size_t m_workItemSize[3]; - size_t m_image2dMaxWidth; - size_t m_image2dMaxHeight; - size_t m_image3dMaxWidth; - size_t m_image3dMaxHeight; - size_t m_image3dMaxDepth; - size_t m_workgroupSize; - cl_uint m_clockFrequency; - cl_ulong m_constantBufferSize; - cl_ulong m_localMemSize; - cl_ulong m_globalMemSize; - cl_bool m_errorCorrectionSupport; + cl_device_type m_deviceType; + cl_uint m_computeUnits; + size_t m_workitemDims; + size_t m_workItemSize[3]; + size_t m_image2dMaxWidth; + size_t m_image2dMaxHeight; + size_t m_image3dMaxWidth; + size_t m_image3dMaxHeight; + size_t m_image3dMaxDepth; + size_t m_workgroupSize; + cl_uint m_clockFrequency; + cl_ulong m_constantBufferSize; + cl_ulong m_localMemSize; + cl_ulong m_globalMemSize; + cl_bool m_errorCorrectionSupport; cl_device_local_mem_type m_localMemType; - cl_uint m_maxReadImageArgs; - cl_uint m_maxWriteImageArgs; + cl_uint m_maxReadImageArgs; + cl_uint m_maxWriteImageArgs; - - - cl_uint m_addressBits; - cl_ulong m_maxMemAllocSize; + cl_uint m_addressBits; + cl_ulong m_maxMemAllocSize; cl_command_queue_properties m_queueProperties; - cl_bool m_imageSupport; - cl_uint m_vecWidthChar; - cl_uint m_vecWidthShort; - cl_uint m_vecWidthInt; - cl_uint m_vecWidthLong; - cl_uint m_vecWidthFloat; - cl_uint m_vecWidthDouble; + cl_bool m_imageSupport; + cl_uint m_vecWidthChar; + cl_uint m_vecWidthShort; + cl_uint m_vecWidthInt; + cl_uint m_vecWidthLong; + cl_uint m_vecWidthFloat; + cl_uint m_vecWidthDouble; } b3OpenCLDeviceInfo; @@ -110,33 +107,32 @@ struct b3OpenCLPlatformInfo char m_platformVendor[B3_MAX_STRING_LENGTH]; char m_platformName[B3_MAX_STRING_LENGTH]; char m_platformVersion[B3_MAX_STRING_LENGTH]; - + b3OpenCLPlatformInfo() { - m_platformVendor[0]=0; - m_platformName[0]=0; - m_platformVersion[0]=0; + m_platformVendor[0] = 0; + m_platformName[0] = 0; + m_platformVersion[0] = 0; } }; - ///C++ API for OpenCL utilities: convenience functions struct b3OpenCLUtils { /// CL Context optionally takes a GL context. This is a generic type because we don't really want this code /// to have to understand GL types. It is a HGLRC in _WIN32 or a GLXContext otherwise. - static inline cl_context createContextFromType(cl_device_type deviceType, cl_int* pErrNum, void* pGLCtx = 0, void* pGLDC = 0, int preferredDeviceIndex = -1, int preferredPlatformIndex= - 1, cl_platform_id* platformId=0) + static inline cl_context createContextFromType(cl_device_type deviceType, cl_int* pErrNum, void* pGLCtx = 0, void* pGLDC = 0, int preferredDeviceIndex = -1, int preferredPlatformIndex = -1, cl_platform_id* platformId = 0) { - return b3OpenCLUtils_createContextFromType(deviceType, pErrNum, pGLCtx , pGLDC , preferredDeviceIndex, preferredPlatformIndex, platformId); + return b3OpenCLUtils_createContextFromType(deviceType, pErrNum, pGLCtx, pGLDC, preferredDeviceIndex, preferredPlatformIndex, platformId); } - + static inline int getNumDevices(cl_context cxMainContext) { return b3OpenCLUtils_getNumDevices(cxMainContext); } static inline cl_device_id getDevice(cl_context cxMainContext, int nr) { - return b3OpenCLUtils_getDevice(cxMainContext,nr); + return b3OpenCLUtils_getDevice(cxMainContext, nr); } static void getDeviceInfo(cl_device_id device, b3OpenCLDeviceInfo* info); @@ -146,28 +142,28 @@ struct b3OpenCLUtils b3OpenCLUtils_printDeviceInfo(device); } - static inline cl_kernel compileCLKernelFromString( cl_context clContext,cl_device_id device, const char* kernelSource, const char* kernelName, cl_int* pErrNum=0, cl_program prog=0,const char* additionalMacros = "" ) + static inline cl_kernel compileCLKernelFromString(cl_context clContext, cl_device_id device, const char* kernelSource, const char* kernelName, cl_int* pErrNum = 0, cl_program prog = 0, const char* additionalMacros = "") { - return b3OpenCLUtils_compileCLKernelFromString(clContext,device, kernelSource, kernelName, pErrNum, prog,additionalMacros); + return b3OpenCLUtils_compileCLKernelFromString(clContext, device, kernelSource, kernelName, pErrNum, prog, additionalMacros); } //optional - static inline cl_program compileCLProgramFromString( cl_context clContext,cl_device_id device, const char* kernelSource, cl_int* pErrNum=0,const char* additionalMacros = "" , const char* srcFileNameForCaching=0, bool disableBinaryCaching=false) + static inline cl_program compileCLProgramFromString(cl_context clContext, cl_device_id device, const char* kernelSource, cl_int* pErrNum = 0, const char* additionalMacros = "", const char* srcFileNameForCaching = 0, bool disableBinaryCaching = false) { - return b3OpenCLUtils_compileCLProgramFromString(clContext,device, kernelSource, pErrNum,additionalMacros, srcFileNameForCaching, disableBinaryCaching); + return b3OpenCLUtils_compileCLProgramFromString(clContext, device, kernelSource, pErrNum, additionalMacros, srcFileNameForCaching, disableBinaryCaching); } //the following optional APIs provide access using specific platform information - static inline int getNumPlatforms(cl_int* pErrNum=0) + static inline int getNumPlatforms(cl_int* pErrNum = 0) { return b3OpenCLUtils_getNumPlatforms(pErrNum); } ///get the nr'th platform, where nr is in the range [0..getNumPlatforms) - static inline cl_platform_id getPlatform(int nr, cl_int* pErrNum=0) + static inline cl_platform_id getPlatform(int nr, cl_int* pErrNum = 0) { - return b3OpenCLUtils_getPlatform(nr,pErrNum); + return b3OpenCLUtils_getPlatform(nr, pErrNum); } - + static void getPlatformInfo(cl_platform_id platform, b3OpenCLPlatformInfo* platformInfo); static inline void printPlatformInfo(cl_platform_id platform) @@ -179,9 +175,9 @@ struct b3OpenCLUtils { return b3OpenCLUtils_getSdkVendorName(); } - static inline cl_context createContextFromPlatform(cl_platform_id platform, cl_device_type deviceType, cl_int* pErrNum, void* pGLCtx = 0, void* pGLDC = 0,int preferredDeviceIndex = -1, int preferredPlatformIndex= -1) + static inline cl_context createContextFromPlatform(cl_platform_id platform, cl_device_type deviceType, cl_int* pErrNum, void* pGLCtx = 0, void* pGLDC = 0, int preferredDeviceIndex = -1, int preferredPlatformIndex = -1) { - return b3OpenCLUtils_createContextFromPlatform(platform, deviceType, pErrNum, pGLCtx,pGLDC,preferredDeviceIndex, preferredPlatformIndex); + return b3OpenCLUtils_createContextFromPlatform(platform, deviceType, pErrNum, pGLCtx, pGLDC, preferredDeviceIndex, preferredPlatformIndex); } static void setCachePath(const char* path) { @@ -189,6 +185,6 @@ struct b3OpenCLUtils } }; -#endif //__cplusplus +#endif //__cplusplus -#endif // B3_OPENCL_UTILS_H +#endif // B3_OPENCL_UTILS_H |