diff options
Diffstat (limited to 'thirdparty/bullet/Bullet3OpenCL/Initialize')
3 files changed, 0 insertions, 1204 deletions
diff --git a/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLInclude.h b/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLInclude.h deleted file mode 100644 index 6146538263..0000000000 --- a/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLInclude.h +++ /dev/null @@ -1,51 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2011 Advanced Micro Devices, Inc. http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef B3_OPENCL_INCLUDE_H -#define B3_OPENCL_INCLUDE_H - -#ifdef B3_USE_CLEW -#include "clew/clew.h" -#else - -#ifdef __APPLE__ -#ifdef USE_MINICL -#include <MiniCL/cl.h> -#else -#include <OpenCL/cl.h> -#include <OpenCL/cl_ext.h> //clLogMessagesToStderrAPPLE -#endif -#else -#ifdef USE_MINICL -#include <MiniCL/cl.h> -#else -#include <CL/cl.h> -#ifdef _WIN32 -#include "CL/cl_gl.h" -#endif //_WIN32 -#endif -#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 diff --git a/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLUtils.cpp b/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLUtils.cpp deleted file mode 100644 index fe54ea5ec9..0000000000 --- a/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLUtils.cpp +++ /dev/null @@ -1,963 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org -Copyright (C) 2006 - 2011 Sony Computer Entertainment Inc. - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -//Original author: Roman Ponomarev -//Mostly Reimplemented by Erwin Coumans - -bool gDebugForceLoadingFromSource = false; -bool gDebugSkipLoadingBinary = false; - -#include "Bullet3Common/b3Logging.h" - -#include <string.h> - -#ifdef _WIN32 -#pragma warning(disable : 4996) -#endif -#include "b3OpenCLUtils.h" -//#include "b3OpenCLInclude.h" - -#include <stdio.h> -#include <stdlib.h> - -#define B3_MAX_CL_DEVICES 16 //who needs 16 devices? - -#ifdef _WIN32 -#include <windows.h> -#endif - -#include <assert.h> -#define b3Assert assert -#ifndef _WIN32 -#include <sys/stat.h> - -#endif - -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"; -#elif defined(CL_PLATFORM_AMD) - "Advanced Micro Devices, Inc."; -#elif defined(CL_PLATFORM_NVIDIA) - "NVIDIA Corporation"; -#elif defined(CL_PLATFORM_INTEL) - "Intel(R) Corporation"; -#elif defined(B3_USE_CLEW) - "clew (OpenCL Extension Wrangler library)"; -#else - "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 - -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 - - if (patloc) - { - b3Warning("Warning: %s\n", errstr); - } - else - { - b3Error("Error: %s\n", errstr); - b3Assert(0); - } -} - -#ifdef B3_USE_CLEW - -int b3OpenCLUtils_clewInit() -{ - int result = -1; - -#ifdef _WIN32 - 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(); - } -#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); - } - return result; -} -#endif - -int b3OpenCLUtils_getNumPlatforms(cl_int* pErrNum) -{ -#ifdef B3_USE_CLEW - b3OpenCLUtils_clewInit(); -#endif - - cl_platform_id pPlatforms[10] = {0}; - - cl_uint numPlatforms = 0; - cl_int ciErrNum = clGetPlatformIDs(10, pPlatforms, &numPlatforms); - //cl_int ciErrNum = clGetPlatformIDs(0, NULL, &numPlatforms); - - if (ciErrNum != CL_SUCCESS) - { - if (pErrNum != NULL) - *pErrNum = ciErrNum; - } - return numPlatforms; -} - -const char* b3OpenCLUtils_getSdkVendorName() -{ - return spPlatformVendor; -} - -void b3OpenCLUtils_setCachePath(const char* path) -{ - sCachedBinaryPath = path; -} - -cl_platform_id b3OpenCLUtils_getPlatform(int platformIndex0, cl_int* pErrNum) -{ -#ifdef B3_USE_CLEW - b3OpenCLUtils_clewInit(); -#endif - - cl_platform_id platform = 0; - unsigned int platformIndex = (unsigned int)platformIndex0; - cl_uint numPlatforms; - cl_int ciErrNum = clGetPlatformIDs(0, NULL, &numPlatforms); - - if (platformIndex < numPlatforms) - { - cl_platform_id* platforms = (cl_platform_id*)malloc(sizeof(cl_platform_id) * numPlatforms); - ciErrNum = clGetPlatformIDs(numPlatforms, platforms, NULL); - if (ciErrNum != CL_SUCCESS) - { - if (pErrNum != NULL) - *pErrNum = ciErrNum; - return platform; - } - - platform = platforms[platformIndex]; - - free(platforms); - } - - return platform; -} - -void b3OpenCLUtils::getPlatformInfo(cl_platform_id platform, b3OpenCLPlatformInfo* platformInfo) -{ - 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); -} - -void b3OpenCLUtils_printPlatformInfo(cl_platform_id platform) -{ - b3OpenCLPlatformInfo 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); -} - -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_uint num_entries; - cl_device_id devices[B3_MAX_CL_DEVICES]; - cl_uint num_devices; - cl_context_properties* cprops; - - /* - * 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}; - cps[0] = CL_CONTEXT_PLATFORM; - cps[1] = (cl_context_properties)platform; -#ifdef _WIN32 -#ifndef B3_USE_CLEW - if (pGLContext && pGLDC) - { - cps[2] = CL_GL_CONTEXT_KHR; - cps[3] = (cl_context_properties)pGLContext; - cps[4] = CL_WGL_HDC_KHR; - cps[5] = (cl_context_properties)pGLDC; - } -#endif //B3_USE_CLEW -#endif //_WIN32 - num_entries = B3_MAX_CL_DEVICES; - - num_devices = -1; - - ciErrNum = clGetDeviceIDs( - platform, - deviceType, - num_entries, - devices, - &num_devices); - - if (ciErrNum < 0) - { - b3Printf("clGetDeviceIDs returned %d\n", ciErrNum); - return 0; - } - cprops = (NULL == platform) ? NULL : cps; - - if (!num_devices) - return 0; - - if (pGLContext) - { - //search for the GPU that relates to the OpenCL context - unsigned int i; - for (i = 0; i < num_devices; i++) - { - retContext = clCreateContext(cprops, 1, &devices[i], NULL, NULL, &ciErrNum); - if (ciErrNum == CL_SUCCESS) - break; - } - } - else - { - 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 - { - //create a context of all devices -#if defined(__APPLE__) - retContext = clCreateContext(cprops, num_devices, devices, MyFatalBreakAPPLE, NULL, &ciErrNum); -#else - b3Printf("numDevices=%d\n", num_devices); - - retContext = clCreateContext(cprops, num_devices, devices, NULL, NULL, &ciErrNum); -#endif - } - } - if (pErrNum != NULL) - { - *pErrNum = ciErrNum; - }; - - 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) -{ -#ifdef B3_USE_CLEW - 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 (pErrNum != NULL) *pErrNum = ciErrNum; - return NULL; - } - if (numPlatforms > 0) - { - cl_platform_id* platforms = (cl_platform_id*)malloc(sizeof(cl_platform_id) * numPlatforms); - ciErrNum = clGetPlatformIDs(numPlatforms, platforms, NULL); - if (ciErrNum != CL_SUCCESS) - { - if (pErrNum != NULL) - *pErrNum = ciErrNum; - free(platforms); - return NULL; - } - - for (i = 0; i < numPlatforms; ++i) - { - char pbuf[128]; - ciErrNum = clGetPlatformInfo(platforms[i], - CL_PLATFORM_VENDOR, - sizeof(pbuf), - pbuf, - NULL); - if (ciErrNum != CL_SUCCESS) - { - if (pErrNum != NULL) *pErrNum = ciErrNum; - return NULL; - } - - if (preferredPlatformIndex >= 0 && i == preferredPlatformIndex) - { - cl_platform_id tmpPlatform = platforms[0]; - platforms[0] = platforms[i]; - platforms[i] = tmpPlatform; - break; - } - else - { - if (!strcmp(pbuf, spPlatformVendor)) - { - cl_platform_id tmpPlatform = platforms[0]; - platforms[0] = platforms[i]; - platforms[i] = tmpPlatform; - } - } - } - - for (i = 0; i < numPlatforms; ++i) - { - cl_platform_id platform = platforms[i]; - assert(platform); - - retContext = b3OpenCLUtils_createContextFromPlatform(platform, deviceType, pErrNum, pGLContext, pGLDC, preferredDeviceIndex, preferredPlatformIndex); - - if (retContext) - { - // printf("OpenCL platform details:\n"); - b3OpenCLPlatformInfo platformInfo; - - b3OpenCLUtils::getPlatformInfo(platform, &platformInfo); - - if (retPlatformId) - *retPlatformId = platform; - - break; - } - } - - free(platforms); - } - return retContext; -} - -////////////////////////////////////////////////////////////////////////////// -//! Gets the id of the nth device from the context -//! -//! @return the id or -1 when out of range -//! @param cxMainContext OpenCL context -//! @param device_idx index of the device of interest -////////////////////////////////////////////////////////////////////////////// -cl_device_id b3OpenCLUtils_getDevice(cl_context cxMainContext, int deviceIndex) -{ - assert(cxMainContext); - - size_t szParmDataBytes; - cl_device_id* cdDevices; - 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) - { - return (cl_device_id)-1; - } - - cdDevices = (cl_device_id*)malloc(szParmDataBytes); - - clGetContextInfo(cxMainContext, CL_CONTEXT_DEVICES, szParmDataBytes, cdDevices, NULL); - - device = cdDevices[deviceIndex]; - free(cdDevices); - - return device; -} - -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); - return device_count; -} - -void b3OpenCLUtils::getDeviceInfo(cl_device_id device, b3OpenCLDeviceInfo* info) -{ - // CL_DEVICE_NAME - clGetDeviceInfo(device, CL_DEVICE_NAME, B3_MAX_STRING_LENGTH, &info->m_deviceName, NULL); - - // CL_DEVICE_VENDOR - clGetDeviceInfo(device, CL_DEVICE_VENDOR, B3_MAX_STRING_LENGTH, &info->m_deviceVendor, NULL); - - // CL_DRIVER_VERSION - clGetDeviceInfo(device, CL_DRIVER_VERSION, B3_MAX_STRING_LENGTH, &info->m_driverVersion, NULL); - - // CL_DEVICE_INFO - clGetDeviceInfo(device, CL_DEVICE_TYPE, sizeof(cl_device_type), &info->m_deviceType, NULL); - - // CL_DEVICE_MAX_COMPUTE_UNITS - clGetDeviceInfo(device, CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(info->m_computeUnits), &info->m_computeUnits, NULL); - - // CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS - clGetDeviceInfo(device, CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS, sizeof(info->m_workitemDims), &info->m_workitemDims, NULL); - - // CL_DEVICE_MAX_WORK_ITEM_SIZES - clGetDeviceInfo(device, CL_DEVICE_MAX_WORK_ITEM_SIZES, sizeof(info->m_workItemSize), &info->m_workItemSize, NULL); - - // CL_DEVICE_MAX_WORK_GROUP_SIZE - clGetDeviceInfo(device, CL_DEVICE_MAX_WORK_GROUP_SIZE, sizeof(info->m_workgroupSize), &info->m_workgroupSize, NULL); - - // CL_DEVICE_MAX_CLOCK_FREQUENCY - clGetDeviceInfo(device, CL_DEVICE_MAX_CLOCK_FREQUENCY, sizeof(info->m_clockFrequency), &info->m_clockFrequency, NULL); - - // CL_DEVICE_ADDRESS_BITS - clGetDeviceInfo(device, CL_DEVICE_ADDRESS_BITS, sizeof(info->m_addressBits), &info->m_addressBits, NULL); - - // CL_DEVICE_MAX_MEM_ALLOC_SIZE - clGetDeviceInfo(device, CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof(info->m_maxMemAllocSize), &info->m_maxMemAllocSize, NULL); - - // CL_DEVICE_GLOBAL_MEM_SIZE - clGetDeviceInfo(device, CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(info->m_globalMemSize), &info->m_globalMemSize, NULL); - - // CL_DEVICE_ERROR_CORRECTION_SUPPORT - clGetDeviceInfo(device, CL_DEVICE_ERROR_CORRECTION_SUPPORT, sizeof(info->m_errorCorrectionSupport), &info->m_errorCorrectionSupport, NULL); - - // CL_DEVICE_LOCAL_MEM_TYPE - clGetDeviceInfo(device, CL_DEVICE_LOCAL_MEM_TYPE, sizeof(info->m_localMemType), &info->m_localMemType, NULL); - - // CL_DEVICE_LOCAL_MEM_SIZE - clGetDeviceInfo(device, CL_DEVICE_LOCAL_MEM_SIZE, sizeof(info->m_localMemSize), &info->m_localMemSize, NULL); - - // CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE - clGetDeviceInfo(device, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, sizeof(info->m_constantBufferSize), &info->m_constantBufferSize, NULL); - - // CL_DEVICE_QUEUE_PROPERTIES - clGetDeviceInfo(device, CL_DEVICE_QUEUE_PROPERTIES, sizeof(info->m_queueProperties), &info->m_queueProperties, NULL); - - // CL_DEVICE_IMAGE_SUPPORT - clGetDeviceInfo(device, CL_DEVICE_IMAGE_SUPPORT, sizeof(info->m_imageSupport), &info->m_imageSupport, NULL); - - // CL_DEVICE_MAX_READ_IMAGE_ARGS - clGetDeviceInfo(device, CL_DEVICE_MAX_READ_IMAGE_ARGS, sizeof(info->m_maxReadImageArgs), &info->m_maxReadImageArgs, NULL); - - // CL_DEVICE_MAX_WRITE_IMAGE_ARGS - clGetDeviceInfo(device, CL_DEVICE_MAX_WRITE_IMAGE_ARGS, sizeof(info->m_maxWriteImageArgs), &info->m_maxWriteImageArgs, NULL); - - // CL_DEVICE_IMAGE2D_MAX_WIDTH, CL_DEVICE_IMAGE2D_MAX_HEIGHT, CL_DEVICE_IMAGE3D_MAX_WIDTH, CL_DEVICE_IMAGE3D_MAX_HEIGHT, CL_DEVICE_IMAGE3D_MAX_DEPTH - clGetDeviceInfo(device, CL_DEVICE_IMAGE2D_MAX_WIDTH, sizeof(size_t), &info->m_image2dMaxWidth, NULL); - clGetDeviceInfo(device, CL_DEVICE_IMAGE2D_MAX_HEIGHT, sizeof(size_t), &info->m_image2dMaxHeight, NULL); - clGetDeviceInfo(device, CL_DEVICE_IMAGE3D_MAX_WIDTH, sizeof(size_t), &info->m_image3dMaxWidth, NULL); - clGetDeviceInfo(device, CL_DEVICE_IMAGE3D_MAX_HEIGHT, sizeof(size_t), &info->m_image3dMaxHeight, NULL); - clGetDeviceInfo(device, CL_DEVICE_IMAGE3D_MAX_DEPTH, sizeof(size_t), &info->m_image3dMaxDepth, NULL); - - // CL_DEVICE_EXTENSIONS: get device extensions, and if any then parse & log the string onto separate lines - clGetDeviceInfo(device, CL_DEVICE_EXTENSIONS, B3_MAX_STRING_LENGTH, &info->m_deviceExtensions, NULL); - - // CL_DEVICE_PREFERRED_VECTOR_WIDTH_<type> - clGetDeviceInfo(device, CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR, sizeof(cl_uint), &info->m_vecWidthChar, NULL); - clGetDeviceInfo(device, CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT, sizeof(cl_uint), &info->m_vecWidthShort, NULL); - clGetDeviceInfo(device, CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT, sizeof(cl_uint), &info->m_vecWidthInt, NULL); - clGetDeviceInfo(device, CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG, sizeof(cl_uint), &info->m_vecWidthLong, NULL); - clGetDeviceInfo(device, CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT, sizeof(cl_uint), &info->m_vecWidthFloat, NULL); - 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); - 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) - b3Printf(" CL_DEVICE_TYPE:\t\t\t%s\n", "CL_DEVICE_TYPE_CPU"); - 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) - b3Printf(" CL_DEVICE_TYPE:\t\t\t%s\n", "CL_DEVICE_TYPE_ACCELERATOR"); - 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); - b3Printf(" CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS:\t%u\n", info.m_workitemDims); - b3Printf(" CL_DEVICE_MAX_WORK_ITEM_SIZES:\t%u / %u / %u \n", info.m_workItemSize[0], info.m_workItemSize[1], info.m_workItemSize[2]); - 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_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) - 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) - 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); - - b3Printf(" CL_DEVICE_MAX_READ_IMAGE_ARGS:\t%u\n", info.m_maxReadImageArgs); - b3Printf(" CL_DEVICE_MAX_WRITE_IMAGE_ARGS:\t%u\n", info.m_maxWriteImageArgs); - b3Printf("\n CL_DEVICE_IMAGE <dim>"); - b3Printf("\t\t\t2D_MAX_WIDTH\t %u\n", info.m_image2dMaxWidth); - b3Printf("\t\t\t\t\t2D_MAX_HEIGHT\t %u\n", info.m_image2dMaxHeight); - b3Printf("\t\t\t\t\t3D_MAX_WIDTH\t %u\n", info.m_image3dMaxWidth); - b3Printf("\t\t\t\t\t3D_MAX_HEIGHT\t %u\n", info.m_image3dMaxHeight); - 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); - } - else - { - b3Printf(" CL_DEVICE_EXTENSIONS: None\n"); - } - 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); -} - -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) - { - patcnt++; - } - 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) -{ - const char* additionalMacros = additionalMacrosArg ? additionalMacrosArg : ""; - - if (disableBinaryCaching) - { - //kernelSourceOrg = 0; - } - - cl_program m_cpProgram = 0; - cl_int status; - - char binaryFileName[B3_MAX_STRING_LENGTH]; - - char deviceName[256]; - char driverVersion[256]; - const char* strippedName; - int fileUpToDate = 0; -#ifdef _WIN32 - 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, "/"); - -#ifdef _MSC_VER - 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); -#endif - } - if (clFileNameForCaching && !(disableBinaryCaching || gDebugSkipLoadingBinary || gDebugForceLoadingFromSource)) - { -#ifdef _WIN32 - char* bla = 0; - - //printf("searching for %s\n", binaryFileName); - - FILETIME modtimeBinary; - CreateDirectoryA(sCachedBinaryPath, 0); - { - 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: - { - b3Warning("\nCached file not found %s\n", binaryFileName); - break; - } - case ERROR_PATH_NOT_FOUND: - { - b3Warning("\nCached file path not found %s\n", binaryFileName); - break; - } - default: - { - b3Warning("\nFailed reading cached file with errorCode = %d\n", errorCode); - } - } - } - else - { - if (GetFileTime(binaryFileHandle, NULL, NULL, &modtimeBinary) == 0) - { - DWORD errorCode; - errorCode = GetLastError(); - b3Warning("\nGetFileTime errorCode = %d\n", errorCode); - } - else - { - binaryFileValid = 1; - } - CloseHandle(binaryFileHandle); - } - - if (binaryFileValid) - { - HANDLE srcFileHandle = CreateFileA(clFileNameForCaching, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); - - if (srcFileHandle == INVALID_HANDLE_VALUE) - { - 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); - } - } - - if (srcFileHandle != INVALID_HANDLE_VALUE) - { - FILETIME modtimeSrc; - 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))) - { - fileUpToDate = 1; - } - else - { - b3Warning("\nCached binary file out-of-date (%s)\n", binaryFileName); - } - CloseHandle(srcFileHandle); - } - else - { -#ifdef _DEBUG - DWORD errorCode; - errorCode = GetLastError(); - switch (errorCode) - { - case ERROR_FILE_NOT_FOUND: - { - b3Warning("\nSrc file not found %s\n", clFileNameForCaching); - break; - } - case ERROR_PATH_NOT_FOUND: - { - b3Warning("\nSrc path not found %s\n", clFileNameForCaching); - break; - } - 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); - fileUpToDate = true; -#else - //if we cannot find the source, assume it is OK in release builds - fileUpToDate = true; -#endif - } - } - } - -#else - fileUpToDate = true; - if (mkdir(sCachedBinaryPath, 0777) == -1) - { - } - else - { - b3Printf("Succesfully created cache directory: %s\n", sCachedBinaryPath); - } -#endif //_WIN32 - } - - if (fileUpToDate) - { -#ifdef _MSC_VER - FILE* file; - 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); - 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) - { - 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)); - 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); - b3Assert(0); - m_cpProgram = 0; - - b3Warning("clBuildProgram reported failure on cached binary: %s\n", binaryFileName); - } - else - { - b3Printf("clBuildProgram successfully compiled cached binary: %s\n", binaryFileName); - } - free(binary); - } - else - { - 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++) - { - char relativeFileName[1024]; - 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); - int readBytes; - readBytes = fread((void*)kernelSrc, 1, kernelSize, file); - kernelSrc[kernelSize] = 0; - fclose(file); - kernelSource = kernelSrc; - } - } - } - - size_t program_length = kernelSource ? strlen(kernelSource) : 0; -#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 (pErrNum) - *pErrNum = localErrNum; - return 0; - } - - // Build the program with 'mad' Optimization option - - flagsize = sizeof(char) * (strlen(additionalMacros) + strlen(flags) + 5); - compileFlags = (char*)malloc(flagsize); -#ifdef _MSC_VER - 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) - { - 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)); - 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); - if (pErrNum) - *pErrNum = localErrNum; - return 0; - } - - 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) - { - size_t binarySize; - char* binary; - - status = clGetProgramInfo(m_cpProgram, CL_PROGRAM_BINARY_SIZES, sizeof(size_t), &binarySize, 0); - b3Assert(status == CL_SUCCESS); - - binary = (char*)malloc(sizeof(char) * binarySize); - - status = clGetProgramInfo(m_cpProgram, CL_PROGRAM_BINARIES, sizeof(char*), &binary, 0); - b3Assert(status == CL_SUCCESS); - - { - FILE* file = 0; -#ifdef _MSC_VER - 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 - { - b3Warning("cannot write file %s\n", binaryFileName); - } - } - - 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 kernel; - cl_int localErrNum; - - cl_program m_cpProgram = prog; - - b3Printf("compiling kernel %s ", kernelName); - - if (!m_cpProgram) - { - 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); - if (pErrNum) - *pErrNum = localErrNum; - return 0; - } - - if (!prog && m_cpProgram) - { - clReleaseProgram(m_cpProgram); - } - b3Printf("ready. \n"); - - if (pErrNum) - *pErrNum = CL_SUCCESS; - return kernel; -} diff --git a/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLUtils.h b/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLUtils.h deleted file mode 100644 index 6c82eed2a6..0000000000 --- a/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLUtils.h +++ /dev/null @@ -1,190 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org -Copyright (C) 2006 - 2011 Sony Computer Entertainment Inc. - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -//original author: Roman Ponomarev -//cleanup by Erwin Coumans - -#ifndef B3_OPENCL_UTILS_H -#define B3_OPENCL_UTILS_H - -#include "b3OpenCLInclude.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - - ///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); - - int b3OpenCLUtils_getNumDevices(cl_context cxMainContext); - - cl_device_id b3OpenCLUtils_getDevice(cl_context cxMainContext, int nr); - - 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); - - //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); - - ///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(); - - ///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); - -#ifdef __cplusplus -} - -#define B3_MAX_STRING_LENGTH 1024 - -typedef struct -{ - char m_deviceName[B3_MAX_STRING_LENGTH]; - char m_deviceVendor[B3_MAX_STRING_LENGTH]; - 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_local_mem_type m_localMemType; - cl_uint m_maxReadImageArgs; - cl_uint m_maxWriteImageArgs; - - 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; - -} b3OpenCLDeviceInfo; - -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; - } -}; - -///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) - { - 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); - } - - static void getDeviceInfo(cl_device_id device, b3OpenCLDeviceInfo* info); - - static inline void printDeviceInfo(cl_device_id device) - { - 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 = "") - { - 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) - { - 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) - { - 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) - { - return b3OpenCLUtils_getPlatform(nr, pErrNum); - } - - static void getPlatformInfo(cl_platform_id platform, b3OpenCLPlatformInfo* platformInfo); - - static inline void printPlatformInfo(cl_platform_id platform) - { - b3OpenCLUtils_printPlatformInfo(platform); - } - - static inline const char* getSdkVendorName() - { - 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) - { - return b3OpenCLUtils_createContextFromPlatform(platform, deviceType, pErrNum, pGLCtx, pGLDC, preferredDeviceIndex, preferredPlatformIndex); - } - static void setCachePath(const char* path) - { - b3OpenCLUtils_setCachePath(path); - } -}; - -#endif //__cplusplus - -#endif // B3_OPENCL_UTILS_H |