399#if !defined(CL_HPP_USE_DX_INTEROP) && defined(USE_DX_INTEROP)
400# pragma message("opencl.hpp: USE_DX_INTEROP is deprecated. Define CL_HPP_USE_DX_INTEROP instead")
401# define CL_HPP_USE_DX_INTEROP
403#if !defined(CL_HPP_ENABLE_EXCEPTIONS) && defined(__CL_ENABLE_EXCEPTIONS)
404# pragma message("opencl.hpp: __CL_ENABLE_EXCEPTIONS is deprecated. Define CL_HPP_ENABLE_EXCEPTIONS instead")
405# define CL_HPP_ENABLE_EXCEPTIONS
407#if !defined(CL_HPP_NO_STD_VECTOR) && defined(__NO_STD_VECTOR)
408# pragma message("opencl.hpp: __NO_STD_VECTOR is deprecated. Define CL_HPP_NO_STD_VECTOR instead")
409# define CL_HPP_NO_STD_VECTOR
411#if !defined(CL_HPP_NO_STD_STRING) && defined(__NO_STD_STRING)
412# pragma message("opencl.hpp: __NO_STD_STRING is deprecated. Define CL_HPP_NO_STD_STRING instead")
413# define CL_HPP_NO_STD_STRING
415#if defined(VECTOR_CLASS)
416# pragma message("opencl.hpp: VECTOR_CLASS is deprecated. Alias cl::vector instead")
418#if defined(STRING_CLASS)
419# pragma message("opencl.hpp: STRING_CLASS is deprecated. Alias cl::string instead.")
421#if !defined(CL_HPP_USER_OVERRIDE_ERROR_STRINGS) && defined(__CL_USER_OVERRIDE_ERROR_STRINGS)
422# pragma message("opencl.hpp: __CL_USER_OVERRIDE_ERROR_STRINGS is deprecated. Define CL_HPP_USER_OVERRIDE_ERROR_STRINGS instead")
423# define CL_HPP_USER_OVERRIDE_ERROR_STRINGS
428#if defined(__USE_DEV_VECTOR)
429# pragma message("opencl.hpp: __USE_DEV_VECTOR is no longer supported. Expect compilation errors")
431#if defined(__USE_DEV_STRING)
432# pragma message("opencl.hpp: __USE_DEV_STRING is no longer supported. Expect compilation errors")
436#if !defined(CL_HPP_TARGET_OPENCL_VERSION)
437# pragma message("opencl.hpp: CL_HPP_TARGET_OPENCL_VERSION is not defined. It will default to 300 (OpenCL 3.0)")
438# define CL_HPP_TARGET_OPENCL_VERSION 300
440#if CL_HPP_TARGET_OPENCL_VERSION != 100 && \
441 CL_HPP_TARGET_OPENCL_VERSION != 110 && \
442 CL_HPP_TARGET_OPENCL_VERSION != 120 && \
443 CL_HPP_TARGET_OPENCL_VERSION != 200 && \
444 CL_HPP_TARGET_OPENCL_VERSION != 210 && \
445 CL_HPP_TARGET_OPENCL_VERSION != 220 && \
446 CL_HPP_TARGET_OPENCL_VERSION != 300
447# pragma message("opencl.hpp: CL_HPP_TARGET_OPENCL_VERSION is not a valid value (100, 110, 120, 200, 210, 220 or 300). It will be set to 300 (OpenCL 3.0).")
448# undef CL_HPP_TARGET_OPENCL_VERSION
449# define CL_HPP_TARGET_OPENCL_VERSION 300
453#if defined(CL_TARGET_OPENCL_VERSION)
456#if CL_TARGET_OPENCL_VERSION < CL_HPP_TARGET_OPENCL_VERSION
457# pragma message("CL_TARGET_OPENCL_VERSION is already defined as is lower than CL_HPP_TARGET_OPENCL_VERSION")
460# define CL_TARGET_OPENCL_VERSION CL_HPP_TARGET_OPENCL_VERSION
463#if !defined(CL_HPP_MINIMUM_OPENCL_VERSION)
464# define CL_HPP_MINIMUM_OPENCL_VERSION 200
466#if CL_HPP_MINIMUM_OPENCL_VERSION != 100 && \
467 CL_HPP_MINIMUM_OPENCL_VERSION != 110 && \
468 CL_HPP_MINIMUM_OPENCL_VERSION != 120 && \
469 CL_HPP_MINIMUM_OPENCL_VERSION != 200 && \
470 CL_HPP_MINIMUM_OPENCL_VERSION != 210 && \
471 CL_HPP_MINIMUM_OPENCL_VERSION != 220 && \
472 CL_HPP_MINIMUM_OPENCL_VERSION != 300
473# pragma message("opencl.hpp: CL_HPP_MINIMUM_OPENCL_VERSION is not a valid value (100, 110, 120, 200, 210, 220 or 300). It will be set to 100")
474# undef CL_HPP_MINIMUM_OPENCL_VERSION
475# define CL_HPP_MINIMUM_OPENCL_VERSION 100
477#if CL_HPP_MINIMUM_OPENCL_VERSION > CL_HPP_TARGET_OPENCL_VERSION
478# error "CL_HPP_MINIMUM_OPENCL_VERSION must not be greater than CL_HPP_TARGET_OPENCL_VERSION"
481#if CL_HPP_MINIMUM_OPENCL_VERSION <= 100 && !defined(CL_USE_DEPRECATED_OPENCL_1_0_APIS)
482# define CL_USE_DEPRECATED_OPENCL_1_0_APIS
484#if CL_HPP_MINIMUM_OPENCL_VERSION <= 110 && !defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
485# define CL_USE_DEPRECATED_OPENCL_1_1_APIS
487#if CL_HPP_MINIMUM_OPENCL_VERSION <= 120 && !defined(CL_USE_DEPRECATED_OPENCL_1_2_APIS)
488# define CL_USE_DEPRECATED_OPENCL_1_2_APIS
490#if CL_HPP_MINIMUM_OPENCL_VERSION <= 200 && !defined(CL_USE_DEPRECATED_OPENCL_2_0_APIS)
491# define CL_USE_DEPRECATED_OPENCL_2_0_APIS
493#if CL_HPP_MINIMUM_OPENCL_VERSION <= 210 && !defined(CL_USE_DEPRECATED_OPENCL_2_1_APIS)
494# define CL_USE_DEPRECATED_OPENCL_2_1_APIS
496#if CL_HPP_MINIMUM_OPENCL_VERSION <= 220 && !defined(CL_USE_DEPRECATED_OPENCL_2_2_APIS)
497# define CL_USE_DEPRECATED_OPENCL_2_2_APIS
504#if defined(CL_HPP_USE_DX_INTEROP)
505#include <CL/cl_d3d10.h>
506#include <CL/cl_dx9_media_sharing.h>
518#if (!defined(_MSC_VER) && __cplusplus < 201103L) || (defined(_MSC_VER) && _MSC_VER < 1700)
519#error Visual studio 2013 or another C++11-supporting compiler required
522#if defined(__APPLE__) || defined(__MACOSX)
523#include <OpenCL/opencl.h>
525#include <CL/opencl.h>
528#if __cplusplus >= 201703L
529# define CL_HPP_DEFINE_STATIC_MEMBER_ inline
530#elif defined(_MSC_VER)
531# define CL_HPP_DEFINE_STATIC_MEMBER_ __declspec(selectany)
532#elif defined(__MINGW32__)
533# define CL_HPP_DEFINE_STATIC_MEMBER_ __attribute__((selectany))
535# define CL_HPP_DEFINE_STATIC_MEMBER_ __attribute__((weak))
540#if !defined(CL_API_PREFIX__VERSION_1_1_DEPRECATED)
541#define CL_API_PREFIX__VERSION_1_1_DEPRECATED
543#if !defined(CL_API_SUFFIX__VERSION_1_1_DEPRECATED)
544#define CL_API_SUFFIX__VERSION_1_1_DEPRECATED
547#if !defined(CL_API_PREFIX__VERSION_1_2_DEPRECATED)
548#define CL_API_PREFIX__VERSION_1_2_DEPRECATED
550#if !defined(CL_API_SUFFIX__VERSION_1_2_DEPRECATED)
551#define CL_API_SUFFIX__VERSION_1_2_DEPRECATED
554#if !defined(CL_API_PREFIX__VERSION_2_2_DEPRECATED)
555#define CL_API_PREFIX__VERSION_2_2_DEPRECATED
557#if !defined(CL_API_SUFFIX__VERSION_2_2_DEPRECATED)
558#define CL_API_SUFFIX__VERSION_2_2_DEPRECATED
561#if !defined(CL_CALLBACK)
574#if defined(CL_HPP_ENABLE_SIZE_T_COMPATIBILITY)
576 using size_type = ::size_t;
580 using size_type = size_t;
585#if defined(CL_HPP_ENABLE_EXCEPTIONS)
589#if !defined(CL_HPP_NO_STD_VECTOR)
592 template <
class T,
class Alloc = std::allocator<T> >
593 using vector = std::vector<T, Alloc>;
597#if !defined(CL_HPP_NO_STD_STRING)
600 using string = std::string;
604#if CL_HPP_TARGET_OPENCL_VERSION >= 200
606#if !defined(CL_HPP_NO_STD_UNIQUE_PTR)
611 template<
class T,
class D>
612 using pointer = std::unique_ptr<T, D>;
616#if !defined(CL_HPP_NO_STD_ARRAY)
619 template <
class T,
size_type N >
620 using array = std::array<T, N>;
626#if defined(CL_HPP_ENABLE_SIZE_T_COMPATIBILITY)
628 namespace compatibility {
643 for (
int i = 0; i < N; ++i) {
648 size_t(
const array<size_type, N> &rhs)
650 for (
int i = 0; i < N; ++i) {
655 size_type& operator[](
int index)
660 const size_type& operator[](
int index)
const
666 operator size_type* () {
return data_; }
669 operator const size_type* ()
const {
return data_; }
671 operator array<size_type, N>()
const
673 array<size_type, N> ret;
675 for (
int i = 0; i < N; ++i) {
684 using size_t = compatibility::size_t<N>;
691 using size_t_array = array<size_type, 3>;
703#define CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(name) \
704 using PFN_##name = name##_fn
706#define CL_HPP_INIT_CL_EXT_FCN_PTR_(name) \
708 pfn_##name = (PFN_##name)clGetExtensionFunctionAddress(#name); \
711#define CL_HPP_INIT_CL_EXT_FCN_PTR_PLATFORM_(platform, name) \
713 pfn_##name = (PFN_##name) \
714 clGetExtensionFunctionAddressForPlatform(platform, #name); \
717#ifdef cl_khr_external_memory
718 enum class ExternalMemoryType : cl_external_memory_handle_type_khr;
727 class DeviceCommandQueue;
731#ifdef cl_khr_semaphore
734#if defined(cl_khr_command_buffer)
735 class CommandBufferKhr;
736 class MutableCommandKhr;
739#if defined(CL_HPP_ENABLE_EXCEPTIONS)
744 class Error :
public std::exception
748 const char * errStr_;
759 Error(cl_int err,
const char * errStr =
nullptr) : err_(err), errStr_(errStr)
766 const char * what() const noexcept
override
768 if (errStr_ ==
nullptr) {
780 cl_int err(
void)
const {
return err_; }
782#define CL_HPP_ERR_STR_(x) #x
784#define CL_HPP_ERR_STR_(x) nullptr
790#if defined(CL_HPP_ENABLE_EXCEPTIONS)
791static inline cl_int errHandler (
793 const char * errStr =
nullptr)
795 if (err != CL_SUCCESS) {
796 throw Error(err, errStr);
801static inline cl_int errHandler (cl_int err,
const char * errStr =
nullptr)
812#if !defined(CL_HPP_USER_OVERRIDE_ERROR_STRINGS)
813#define __GET_DEVICE_INFO_ERR CL_HPP_ERR_STR_(clGetDeviceInfo)
814#define __GET_PLATFORM_INFO_ERR CL_HPP_ERR_STR_(clGetPlatformInfo)
815#define __GET_DEVICE_IDS_ERR CL_HPP_ERR_STR_(clGetDeviceIDs)
816#define __GET_PLATFORM_IDS_ERR CL_HPP_ERR_STR_(clGetPlatformIDs)
817#define __GET_CONTEXT_INFO_ERR CL_HPP_ERR_STR_(clGetContextInfo)
818#define __GET_EVENT_INFO_ERR CL_HPP_ERR_STR_(clGetEventInfo)
819#define __GET_EVENT_PROFILE_INFO_ERR CL_HPP_ERR_STR_(clGetEventProfileInfo)
820#define __GET_MEM_OBJECT_INFO_ERR CL_HPP_ERR_STR_(clGetMemObjectInfo)
821#define __GET_IMAGE_INFO_ERR CL_HPP_ERR_STR_(clGetImageInfo)
822#define __GET_SAMPLER_INFO_ERR CL_HPP_ERR_STR_(clGetSamplerInfo)
823#define __GET_KERNEL_INFO_ERR CL_HPP_ERR_STR_(clGetKernelInfo)
824#if CL_HPP_TARGET_OPENCL_VERSION >= 120
825#define __GET_KERNEL_ARG_INFO_ERR CL_HPP_ERR_STR_(clGetKernelArgInfo)
827#if CL_HPP_TARGET_OPENCL_VERSION >= 210
828#define __GET_KERNEL_SUB_GROUP_INFO_ERR CL_HPP_ERR_STR_(clGetKernelSubGroupInfo)
830#define __GET_KERNEL_SUB_GROUP_INFO_ERR CL_HPP_ERR_STR_(clGetKernelSubGroupInfoKHR)
832#define __GET_KERNEL_WORK_GROUP_INFO_ERR CL_HPP_ERR_STR_(clGetKernelWorkGroupInfo)
833#define __GET_PROGRAM_INFO_ERR CL_HPP_ERR_STR_(clGetProgramInfo)
834#define __GET_PROGRAM_BUILD_INFO_ERR CL_HPP_ERR_STR_(clGetProgramBuildInfo)
835#define __GET_COMMAND_QUEUE_INFO_ERR CL_HPP_ERR_STR_(clGetCommandQueueInfo)
837#define __CREATE_CONTEXT_ERR CL_HPP_ERR_STR_(clCreateContext)
838#define __CREATE_CONTEXT_FROM_TYPE_ERR CL_HPP_ERR_STR_(clCreateContextFromType)
839#define __GET_SUPPORTED_IMAGE_FORMATS_ERR CL_HPP_ERR_STR_(clGetSupportedImageFormats)
840#if CL_HPP_TARGET_OPENCL_VERSION >= 300
841#define __SET_CONTEXT_DESCTRUCTOR_CALLBACK_ERR CL_HPP_ERR_STR_(clSetContextDestructorCallback)
844#define __CREATE_BUFFER_ERR CL_HPP_ERR_STR_(clCreateBuffer)
845#define __COPY_ERR CL_HPP_ERR_STR_(cl::copy)
846#define __CREATE_SUBBUFFER_ERR CL_HPP_ERR_STR_(clCreateSubBuffer)
847#define __CREATE_GL_BUFFER_ERR CL_HPP_ERR_STR_(clCreateFromGLBuffer)
848#define __CREATE_GL_RENDER_BUFFER_ERR CL_HPP_ERR_STR_(clCreateFromGLBuffer)
849#define __GET_GL_OBJECT_INFO_ERR CL_HPP_ERR_STR_(clGetGLObjectInfo)
850#if CL_HPP_TARGET_OPENCL_VERSION >= 120
851#define __CREATE_IMAGE_ERR CL_HPP_ERR_STR_(clCreateImage)
852#define __CREATE_GL_TEXTURE_ERR CL_HPP_ERR_STR_(clCreateFromGLTexture)
853#define __IMAGE_DIMENSION_ERR CL_HPP_ERR_STR_(Incorrect image dimensions)
855#define __SET_MEM_OBJECT_DESTRUCTOR_CALLBACK_ERR CL_HPP_ERR_STR_(clSetMemObjectDestructorCallback)
857#define __CREATE_USER_EVENT_ERR CL_HPP_ERR_STR_(clCreateUserEvent)
858#define __SET_USER_EVENT_STATUS_ERR CL_HPP_ERR_STR_(clSetUserEventStatus)
859#define __SET_EVENT_CALLBACK_ERR CL_HPP_ERR_STR_(clSetEventCallback)
860#define __WAIT_FOR_EVENTS_ERR CL_HPP_ERR_STR_(clWaitForEvents)
862#define __CREATE_KERNEL_ERR CL_HPP_ERR_STR_(clCreateKernel)
863#define __SET_KERNEL_ARGS_ERR CL_HPP_ERR_STR_(clSetKernelArg)
864#define __CREATE_PROGRAM_WITH_SOURCE_ERR CL_HPP_ERR_STR_(clCreateProgramWithSource)
865#define __CREATE_PROGRAM_WITH_BINARY_ERR CL_HPP_ERR_STR_(clCreateProgramWithBinary)
866#if CL_HPP_TARGET_OPENCL_VERSION >= 210
867#define __CREATE_PROGRAM_WITH_IL_ERR CL_HPP_ERR_STR_(clCreateProgramWithIL)
869#define __CREATE_PROGRAM_WITH_IL_ERR CL_HPP_ERR_STR_(clCreateProgramWithILKHR)
871#if CL_HPP_TARGET_OPENCL_VERSION >= 120
872#define __CREATE_PROGRAM_WITH_BUILT_IN_KERNELS_ERR CL_HPP_ERR_STR_(clCreateProgramWithBuiltInKernels)
874#define __BUILD_PROGRAM_ERR CL_HPP_ERR_STR_(clBuildProgram)
875#if CL_HPP_TARGET_OPENCL_VERSION >= 120
876#define __COMPILE_PROGRAM_ERR CL_HPP_ERR_STR_(clCompileProgram)
877#define __LINK_PROGRAM_ERR CL_HPP_ERR_STR_(clLinkProgram)
879#define __CREATE_KERNELS_IN_PROGRAM_ERR CL_HPP_ERR_STR_(clCreateKernelsInProgram)
881#if CL_HPP_TARGET_OPENCL_VERSION >= 200
882#define __CREATE_COMMAND_QUEUE_WITH_PROPERTIES_ERR CL_HPP_ERR_STR_(clCreateCommandQueueWithProperties)
883#define __CREATE_SAMPLER_WITH_PROPERTIES_ERR CL_HPP_ERR_STR_(clCreateSamplerWithProperties)
885#define __SET_COMMAND_QUEUE_PROPERTY_ERR CL_HPP_ERR_STR_(clSetCommandQueueProperty)
886#define __ENQUEUE_READ_BUFFER_ERR CL_HPP_ERR_STR_(clEnqueueReadBuffer)
887#define __ENQUEUE_READ_BUFFER_RECT_ERR CL_HPP_ERR_STR_(clEnqueueReadBufferRect)
888#define __ENQUEUE_WRITE_BUFFER_ERR CL_HPP_ERR_STR_(clEnqueueWriteBuffer)
889#define __ENQUEUE_WRITE_BUFFER_RECT_ERR CL_HPP_ERR_STR_(clEnqueueWriteBufferRect)
890#define __ENQEUE_COPY_BUFFER_ERR CL_HPP_ERR_STR_(clEnqueueCopyBuffer)
891#define __ENQEUE_COPY_BUFFER_RECT_ERR CL_HPP_ERR_STR_(clEnqueueCopyBufferRect)
892#define __ENQUEUE_FILL_BUFFER_ERR CL_HPP_ERR_STR_(clEnqueueFillBuffer)
893#define __ENQUEUE_READ_IMAGE_ERR CL_HPP_ERR_STR_(clEnqueueReadImage)
894#define __ENQUEUE_WRITE_IMAGE_ERR CL_HPP_ERR_STR_(clEnqueueWriteImage)
895#define __ENQUEUE_COPY_IMAGE_ERR CL_HPP_ERR_STR_(clEnqueueCopyImage)
896#define __ENQUEUE_FILL_IMAGE_ERR CL_HPP_ERR_STR_(clEnqueueFillImage)
897#define __ENQUEUE_COPY_IMAGE_TO_BUFFER_ERR CL_HPP_ERR_STR_(clEnqueueCopyImageToBuffer)
898#define __ENQUEUE_COPY_BUFFER_TO_IMAGE_ERR CL_HPP_ERR_STR_(clEnqueueCopyBufferToImage)
899#define __ENQUEUE_MAP_BUFFER_ERR CL_HPP_ERR_STR_(clEnqueueMapBuffer)
900#define __ENQUEUE_MAP_SVM_ERR CL_HPP_ERR_STR_(clEnqueueSVMMap)
901#define __ENQUEUE_FILL_SVM_ERR CL_HPP_ERR_STR_(clEnqueueSVMMemFill)
902#define __ENQUEUE_COPY_SVM_ERR CL_HPP_ERR_STR_(clEnqueueSVMMemcpy)
903#define __ENQUEUE_UNMAP_SVM_ERR CL_HPP_ERR_STR_(clEnqueueSVMUnmap)
904#define __ENQUEUE_MAP_IMAGE_ERR CL_HPP_ERR_STR_(clEnqueueMapImage)
905#define __ENQUEUE_UNMAP_MEM_OBJECT_ERR CL_HPP_ERR_STR_(clEnqueueUnMapMemObject)
906#define __ENQUEUE_NDRANGE_KERNEL_ERR CL_HPP_ERR_STR_(clEnqueueNDRangeKernel)
907#define __ENQUEUE_NATIVE_KERNEL CL_HPP_ERR_STR_(clEnqueueNativeKernel)
908#if CL_HPP_TARGET_OPENCL_VERSION >= 120
909#define __ENQUEUE_MIGRATE_MEM_OBJECTS_ERR CL_HPP_ERR_STR_(clEnqueueMigrateMemObjects)
911#if CL_HPP_TARGET_OPENCL_VERSION >= 210
912#define __ENQUEUE_MIGRATE_SVM_ERR CL_HPP_ERR_STR_(clEnqueueSVMMigrateMem)
913#define __SET_DEFAULT_DEVICE_COMMAND_QUEUE_ERR CL_HPP_ERR_STR_(clSetDefaultDeviceCommandQueue)
917#define __ENQUEUE_ACQUIRE_GL_ERR CL_HPP_ERR_STR_(clEnqueueAcquireGLObjects)
918#define __ENQUEUE_RELEASE_GL_ERR CL_HPP_ERR_STR_(clEnqueueReleaseGLObjects)
920#define __CREATE_PIPE_ERR CL_HPP_ERR_STR_(clCreatePipe)
921#define __GET_PIPE_INFO_ERR CL_HPP_ERR_STR_(clGetPipeInfo)
923#define __RETAIN_ERR CL_HPP_ERR_STR_(Retain Object)
924#define __RELEASE_ERR CL_HPP_ERR_STR_(Release Object)
925#define __FLUSH_ERR CL_HPP_ERR_STR_(clFlush)
926#define __FINISH_ERR CL_HPP_ERR_STR_(clFinish)
927#define __VECTOR_CAPACITY_ERR CL_HPP_ERR_STR_(Vector capacity error)
929#if CL_HPP_TARGET_OPENCL_VERSION >= 210
930#define __GET_HOST_TIMER_ERR CL_HPP_ERR_STR_(clGetHostTimer)
931#define __GET_DEVICE_AND_HOST_TIMER_ERR CL_HPP_ERR_STR_(clGetDeviceAndHostTimer)
933#if CL_HPP_TARGET_OPENCL_VERSION >= 220
934#define __SET_PROGRAM_RELEASE_CALLBACK_ERR CL_HPP_ERR_STR_(clSetProgramReleaseCallback)
935#define __SET_PROGRAM_SPECIALIZATION_CONSTANT_ERR CL_HPP_ERR_STR_(clSetProgramSpecializationConstant)
938#ifdef cl_khr_external_memory
939#define __ENQUEUE_ACQUIRE_EXTERNAL_MEMORY_ERR CL_HPP_ERR_STR_(clEnqueueAcquireExternalMemObjectsKHR)
940#define __ENQUEUE_RELEASE_EXTERNAL_MEMORY_ERR CL_HPP_ERR_STR_(clEnqueueReleaseExternalMemObjectsKHR)
943#ifdef cl_khr_semaphore
944#define __GET_SEMAPHORE_KHR_INFO_ERR CL_HPP_ERR_STR_(clGetSemaphoreInfoKHR)
945#define __CREATE_SEMAPHORE_KHR_WITH_PROPERTIES_ERR CL_HPP_ERR_STR_(clCreateSemaphoreWithPropertiesKHR)
946#define __ENQUEUE_WAIT_SEMAPHORE_KHR_ERR CL_HPP_ERR_STR_(clEnqueueWaitSemaphoresKHR)
947#define __ENQUEUE_SIGNAL_SEMAPHORE_KHR_ERR CL_HPP_ERR_STR_(clEnqueueSignalSemaphoresKHR)
948#define __RETAIN_SEMAPHORE_KHR_ERR CL_HPP_ERR_STR_(clRetainSemaphoreKHR)
949#define __RELEASE_SEMAPHORE_KHR_ERR CL_HPP_ERR_STR_(clReleaseSemaphoreKHR)
952#ifdef cl_khr_external_semaphore
953#define __GET_SEMAPHORE_HANDLE_FOR_TYPE_KHR_ERR CL_HPP_ERR_STR_(clGetSemaphoreHandleForTypeKHR)
956#if defined(cl_khr_command_buffer)
957#define __CREATE_COMMAND_BUFFER_KHR_ERR CL_HPP_ERR_STR_(clCreateCommandBufferKHR)
958#define __GET_COMMAND_BUFFER_INFO_KHR_ERR CL_HPP_ERR_STR_(clGetCommandBufferInfoKHR)
959#define __FINALIZE_COMMAND_BUFFER_KHR_ERR CL_HPP_ERR_STR_(clFinalizeCommandBufferKHR)
960#define __ENQUEUE_COMMAND_BUFFER_KHR_ERR CL_HPP_ERR_STR_(clEnqueueCommandBufferKHR)
961#define __COMMAND_BARRIER_WITH_WAIT_LIST_KHR_ERR CL_HPP_ERR_STR_(clCommandBarrierWithWaitListKHR)
962#define __COMMAND_COPY_BUFFER_KHR_ERR CL_HPP_ERR_STR_(clCommandCopyBufferKHR)
963#define __COMMAND_COPY_BUFFER_RECT_KHR_ERR CL_HPP_ERR_STR_(clCommandCopyBufferRectKHR)
964#define __COMMAND_COPY_BUFFER_TO_IMAGE_KHR_ERR CL_HPP_ERR_STR_(clCommandCopyBufferToImageKHR)
965#define __COMMAND_COPY_IMAGE_KHR_ERR CL_HPP_ERR_STR_(clCommandCopyImageKHR)
966#define __COMMAND_COPY_IMAGE_TO_BUFFER_KHR_ERR CL_HPP_ERR_STR_(clCommandCopyImageToBufferKHR)
967#define __COMMAND_FILL_BUFFER_KHR_ERR CL_HPP_ERR_STR_(clCommandFillBufferKHR)
968#define __COMMAND_FILL_IMAGE_KHR_ERR CL_HPP_ERR_STR_(clCommandFillImageKHR)
969#define __COMMAND_NDRANGE_KERNEL_KHR_ERR CL_HPP_ERR_STR_(clCommandNDRangeKernelKHR)
970#define __UPDATE_MUTABLE_COMMANDS_KHR_ERR CL_HPP_ERR_STR_(clUpdateMutableCommandsKHR)
971#define __GET_MUTABLE_COMMAND_INFO_KHR_ERR CL_HPP_ERR_STR_(clGetMutableCommandInfoKHR)
972#define __RETAIN_COMMAND_BUFFER_KHR_ERR CL_HPP_ERR_STR_(clRetainCommandBufferKHR)
973#define __RELEASE_COMMAND_BUFFER_KHR_ERR CL_HPP_ERR_STR_(clReleaseCommandBufferKHR)
976#if defined(cl_ext_image_requirements_info)
977#define __GET_IMAGE_REQUIREMENT_INFO_EXT_ERR CL_HPP_ERR_STR_(clGetImageRequirementsInfoEXT)
983#if CL_HPP_TARGET_OPENCL_VERSION >= 120
984#define __CREATE_SUB_DEVICES_ERR CL_HPP_ERR_STR_(clCreateSubDevices)
986#define __CREATE_SUB_DEVICES_ERR CL_HPP_ERR_STR_(clCreateSubDevicesEXT)
992#if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
993#define __ENQUEUE_MARKER_ERR CL_HPP_ERR_STR_(clEnqueueMarker)
994#define __ENQUEUE_WAIT_FOR_EVENTS_ERR CL_HPP_ERR_STR_(clEnqueueWaitForEvents)
995#define __ENQUEUE_BARRIER_ERR CL_HPP_ERR_STR_(clEnqueueBarrier)
996#define __UNLOAD_COMPILER_ERR CL_HPP_ERR_STR_(clUnloadCompiler)
997#define __CREATE_GL_TEXTURE_2D_ERR CL_HPP_ERR_STR_(clCreateFromGLTexture2D)
998#define __CREATE_GL_TEXTURE_3D_ERR CL_HPP_ERR_STR_(clCreateFromGLTexture3D)
999#define __CREATE_IMAGE2D_ERR CL_HPP_ERR_STR_(clCreateImage2D)
1000#define __CREATE_IMAGE3D_ERR CL_HPP_ERR_STR_(clCreateImage3D)
1006#if defined(CL_USE_DEPRECATED_OPENCL_1_2_APIS)
1007#define __CREATE_COMMAND_QUEUE_ERR CL_HPP_ERR_STR_(clCreateCommandQueue)
1008#define __ENQUEUE_TASK_ERR CL_HPP_ERR_STR_(clEnqueueTask)
1009#define __CREATE_SAMPLER_ERR CL_HPP_ERR_STR_(clCreateSampler)
1015#if CL_HPP_TARGET_OPENCL_VERSION >= 120
1016#define __ENQUEUE_MARKER_WAIT_LIST_ERR CL_HPP_ERR_STR_(clEnqueueMarkerWithWaitList)
1017#define __ENQUEUE_BARRIER_WAIT_LIST_ERR CL_HPP_ERR_STR_(clEnqueueBarrierWithWaitList)
1020#if CL_HPP_TARGET_OPENCL_VERSION >= 210
1021#define __CLONE_KERNEL_ERR CL_HPP_ERR_STR_(clCloneKernel)
1027#ifdef cl_khr_external_memory
1028CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clEnqueueAcquireExternalMemObjectsKHR);
1029CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clEnqueueReleaseExternalMemObjectsKHR);
1031CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clEnqueueAcquireExternalMemObjectsKHR pfn_clEnqueueAcquireExternalMemObjectsKHR =
nullptr;
1032CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clEnqueueReleaseExternalMemObjectsKHR pfn_clEnqueueReleaseExternalMemObjectsKHR =
nullptr;
1035#ifdef cl_khr_semaphore
1036CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clCreateSemaphoreWithPropertiesKHR);
1037CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clReleaseSemaphoreKHR);
1038CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clRetainSemaphoreKHR);
1039CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clEnqueueWaitSemaphoresKHR);
1040CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clEnqueueSignalSemaphoresKHR);
1041CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clGetSemaphoreInfoKHR);
1043CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clCreateSemaphoreWithPropertiesKHR pfn_clCreateSemaphoreWithPropertiesKHR =
nullptr;
1044CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clReleaseSemaphoreKHR pfn_clReleaseSemaphoreKHR =
nullptr;
1045CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clRetainSemaphoreKHR pfn_clRetainSemaphoreKHR =
nullptr;
1046CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clEnqueueWaitSemaphoresKHR pfn_clEnqueueWaitSemaphoresKHR =
nullptr;
1047CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clEnqueueSignalSemaphoresKHR pfn_clEnqueueSignalSemaphoresKHR =
nullptr;
1048CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clGetSemaphoreInfoKHR pfn_clGetSemaphoreInfoKHR =
nullptr;
1051#ifdef cl_khr_external_semaphore
1052CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clGetSemaphoreHandleForTypeKHR);
1053CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clGetSemaphoreHandleForTypeKHR pfn_clGetSemaphoreHandleForTypeKHR =
nullptr;
1056#if defined(cl_khr_command_buffer)
1057CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clCreateCommandBufferKHR);
1058CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clFinalizeCommandBufferKHR);
1059CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clRetainCommandBufferKHR);
1060CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clReleaseCommandBufferKHR);
1061CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clGetCommandBufferInfoKHR);
1062CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clEnqueueCommandBufferKHR);
1063CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clCommandBarrierWithWaitListKHR);
1064CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clCommandCopyBufferKHR);
1065CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clCommandCopyBufferRectKHR);
1066CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clCommandCopyBufferToImageKHR);
1067CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clCommandCopyImageKHR);
1068CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clCommandCopyImageToBufferKHR);
1069CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clCommandFillBufferKHR);
1070CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clCommandFillImageKHR);
1071CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clCommandNDRangeKernelKHR);
1073CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clCreateCommandBufferKHR pfn_clCreateCommandBufferKHR =
nullptr;
1074CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clFinalizeCommandBufferKHR pfn_clFinalizeCommandBufferKHR =
nullptr;
1075CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clRetainCommandBufferKHR pfn_clRetainCommandBufferKHR =
nullptr;
1076CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clReleaseCommandBufferKHR pfn_clReleaseCommandBufferKHR =
nullptr;
1077CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clGetCommandBufferInfoKHR pfn_clGetCommandBufferInfoKHR =
nullptr;
1078CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clEnqueueCommandBufferKHR pfn_clEnqueueCommandBufferKHR =
nullptr;
1079CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clCommandBarrierWithWaitListKHR pfn_clCommandBarrierWithWaitListKHR =
nullptr;
1080CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clCommandCopyBufferKHR pfn_clCommandCopyBufferKHR =
nullptr;
1081CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clCommandCopyBufferRectKHR pfn_clCommandCopyBufferRectKHR =
nullptr;
1082CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clCommandCopyBufferToImageKHR pfn_clCommandCopyBufferToImageKHR =
nullptr;
1083CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clCommandCopyImageKHR pfn_clCommandCopyImageKHR =
nullptr;
1084CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clCommandCopyImageToBufferKHR pfn_clCommandCopyImageToBufferKHR =
nullptr;
1085CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clCommandFillBufferKHR pfn_clCommandFillBufferKHR =
nullptr;
1086CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clCommandFillImageKHR pfn_clCommandFillImageKHR =
nullptr;
1087CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clCommandNDRangeKernelKHR pfn_clCommandNDRangeKernelKHR =
nullptr;
1090#if defined(cl_khr_command_buffer_mutable_dispatch)
1091CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clUpdateMutableCommandsKHR);
1092CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clGetMutableCommandInfoKHR);
1094CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clUpdateMutableCommandsKHR pfn_clUpdateMutableCommandsKHR =
nullptr;
1095CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clGetMutableCommandInfoKHR pfn_clGetMutableCommandInfoKHR =
nullptr;
1098#if defined(cl_ext_image_requirements_info)
1099CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clGetImageRequirementsInfoEXT);
1100CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clGetImageRequirementsInfoEXT pfn_clGetImageRequirementsInfoEXT =
nullptr;
1103#if defined(cl_ext_device_fission)
1104CL_HPP_CREATE_CL_EXT_FCN_PTR_ALIAS_(clCreateSubDevicesEXT);
1105CL_HPP_DEFINE_STATIC_MEMBER_ PFN_clCreateSubDevicesEXT
1106 pfn_clCreateSubDevicesEXT =
nullptr;
1115template<
typename Functor,
typename T>
1116inline cl_int getInfoHelper(Functor f, cl_uint name, T* param,
long)
1118 return f(name,
sizeof(T), param,
nullptr);
1123template <
typename Func>
1124inline cl_int getInfoHelper(Func f, cl_uint name, vector<vector<unsigned char>>* param,
int)
1126 if (name != CL_PROGRAM_BINARIES) {
1127 return CL_INVALID_VALUE;
1131 size_type numBinaries = param->size();
1132 vector<unsigned char*> binariesPointers(numBinaries);
1134 for (size_type i = 0; i < numBinaries; ++i)
1136 binariesPointers[i] = (*param)[i].data();
1139 cl_int err = f(name, numBinaries *
sizeof(
unsigned char*), binariesPointers.data(),
nullptr);
1141 if (err != CL_SUCCESS) {
1150template <
typename Func,
typename T>
1151inline cl_int getInfoHelper(Func f, cl_uint name, vector<T>* param,
long)
1154 cl_int err = f(name, 0,
nullptr, &required);
1155 if (err != CL_SUCCESS) {
1158 const size_type elements = required /
sizeof(T);
1161 vector<T> localData(elements);
1162 err = f(name, required, localData.data(),
nullptr);
1163 if (err != CL_SUCCESS) {
1167 *param = std::move(localData);
1179template <
typename Func,
typename T>
1180inline cl_int getInfoHelper(
1181 Func f, cl_uint name, vector<T>* param,
int,
typename T::cl_type = 0)
1184 cl_int err = f(name, 0,
nullptr, &required);
1185 if (err != CL_SUCCESS) {
1189 const size_type elements = required /
sizeof(
typename T::cl_type);
1191 vector<typename T::cl_type> value(elements);
1192 err = f(name, required, value.data(),
nullptr);
1193 if (err != CL_SUCCESS) {
1199 param->resize(elements);
1203 for (size_type i = 0; i < elements; i++) {
1204 (*param)[i] = T(value[i],
true);
1211template <
typename Func>
1212inline cl_int getInfoHelper(Func f, cl_uint name,
string* param,
long)
1215 cl_int err = f(name, 0,
nullptr, &required);
1216 if (err != CL_SUCCESS) {
1223 vector<char> value(required);
1224 err = f(name, required, value.data(),
nullptr);
1225 if (err != CL_SUCCESS) {
1229 param->assign(value.begin(), value.end() - 1);
1239template <
typename Func,
size_type N>
1240inline cl_int getInfoHelper(Func f, cl_uint name, array<size_type, N>* param,
long)
1243 cl_int err = f(name, 0,
nullptr, &required);
1244 if (err != CL_SUCCESS) {
1248 size_type elements = required /
sizeof(size_type);
1249 vector<size_type> value(elements, 0);
1251 err = f(name, required, value.data(),
nullptr);
1252 if (err != CL_SUCCESS) {
1261 for (size_type i = 0; i < elements; ++i) {
1262 (*param)[i] = value[i];
1268template<
typename T>
struct ReferenceHandler;
1276template<
typename Func,
typename T>
1277inline cl_int getInfoHelper(Func f, cl_uint name, T* param,
int,
typename T::cl_type = 0)
1279 typename T::cl_type value;
1280 cl_int err = f(name,
sizeof(value), &value,
nullptr);
1281 if (err != CL_SUCCESS) {
1285 if (value !=
nullptr)
1287 err = param->retain();
1288 if (err != CL_SUCCESS) {
1295#define CL_HPP_PARAM_NAME_INFO_1_0_(F) \
1296 F(cl_platform_info, CL_PLATFORM_PROFILE, string) \
1297 F(cl_platform_info, CL_PLATFORM_VERSION, string) \
1298 F(cl_platform_info, CL_PLATFORM_NAME, string) \
1299 F(cl_platform_info, CL_PLATFORM_VENDOR, string) \
1300 F(cl_platform_info, CL_PLATFORM_EXTENSIONS, string) \
1302 F(cl_device_info, CL_DEVICE_TYPE, cl_device_type) \
1303 F(cl_device_info, CL_DEVICE_VENDOR_ID, cl_uint) \
1304 F(cl_device_info, CL_DEVICE_MAX_COMPUTE_UNITS, cl_uint) \
1305 F(cl_device_info, CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS, cl_uint) \
1306 F(cl_device_info, CL_DEVICE_MAX_WORK_GROUP_SIZE, size_type) \
1307 F(cl_device_info, CL_DEVICE_MAX_WORK_ITEM_SIZES, cl::vector<size_type>) \
1308 F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR, cl_uint) \
1309 F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT, cl_uint) \
1310 F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT, cl_uint) \
1311 F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG, cl_uint) \
1312 F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT, cl_uint) \
1313 F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE, cl_uint) \
1314 F(cl_device_info, CL_DEVICE_MAX_CLOCK_FREQUENCY, cl_uint) \
1315 F(cl_device_info, CL_DEVICE_ADDRESS_BITS, cl_uint) \
1316 F(cl_device_info, CL_DEVICE_MAX_READ_IMAGE_ARGS, cl_uint) \
1317 F(cl_device_info, CL_DEVICE_MAX_WRITE_IMAGE_ARGS, cl_uint) \
1318 F(cl_device_info, CL_DEVICE_MAX_MEM_ALLOC_SIZE, cl_ulong) \
1319 F(cl_device_info, CL_DEVICE_IMAGE2D_MAX_WIDTH, size_type) \
1320 F(cl_device_info, CL_DEVICE_IMAGE2D_MAX_HEIGHT, size_type) \
1321 F(cl_device_info, CL_DEVICE_IMAGE3D_MAX_WIDTH, size_type) \
1322 F(cl_device_info, CL_DEVICE_IMAGE3D_MAX_HEIGHT, size_type) \
1323 F(cl_device_info, CL_DEVICE_IMAGE3D_MAX_DEPTH, size_type) \
1324 F(cl_device_info, CL_DEVICE_IMAGE_SUPPORT, cl_bool) \
1325 F(cl_device_info, CL_DEVICE_MAX_PARAMETER_SIZE, size_type) \
1326 F(cl_device_info, CL_DEVICE_MAX_SAMPLERS, cl_uint) \
1327 F(cl_device_info, CL_DEVICE_MEM_BASE_ADDR_ALIGN, cl_uint) \
1328 F(cl_device_info, CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE, cl_uint) \
1329 F(cl_device_info, CL_DEVICE_SINGLE_FP_CONFIG, cl_device_fp_config) \
1330 F(cl_device_info, CL_DEVICE_DOUBLE_FP_CONFIG, cl_device_fp_config) \
1331 F(cl_device_info, CL_DEVICE_HALF_FP_CONFIG, cl_device_fp_config) \
1332 F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHE_TYPE, cl_device_mem_cache_type) \
1333 F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE, cl_uint)\
1334 F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHE_SIZE, cl_ulong) \
1335 F(cl_device_info, CL_DEVICE_GLOBAL_MEM_SIZE, cl_ulong) \
1336 F(cl_device_info, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, cl_ulong) \
1337 F(cl_device_info, CL_DEVICE_MAX_CONSTANT_ARGS, cl_uint) \
1338 F(cl_device_info, CL_DEVICE_LOCAL_MEM_TYPE, cl_device_local_mem_type) \
1339 F(cl_device_info, CL_DEVICE_LOCAL_MEM_SIZE, cl_ulong) \
1340 F(cl_device_info, CL_DEVICE_ERROR_CORRECTION_SUPPORT, cl_bool) \
1341 F(cl_device_info, CL_DEVICE_PROFILING_TIMER_RESOLUTION, size_type) \
1342 F(cl_device_info, CL_DEVICE_ENDIAN_LITTLE, cl_bool) \
1343 F(cl_device_info, CL_DEVICE_AVAILABLE, cl_bool) \
1344 F(cl_device_info, CL_DEVICE_COMPILER_AVAILABLE, cl_bool) \
1345 F(cl_device_info, CL_DEVICE_EXECUTION_CAPABILITIES, cl_device_exec_capabilities) \
1346 F(cl_device_info, CL_DEVICE_PLATFORM, cl::Platform) \
1347 F(cl_device_info, CL_DEVICE_NAME, string) \
1348 F(cl_device_info, CL_DEVICE_VENDOR, string) \
1349 F(cl_device_info, CL_DRIVER_VERSION, string) \
1350 F(cl_device_info, CL_DEVICE_PROFILE, string) \
1351 F(cl_device_info, CL_DEVICE_VERSION, string) \
1352 F(cl_device_info, CL_DEVICE_EXTENSIONS, string) \
1354 F(cl_context_info, CL_CONTEXT_REFERENCE_COUNT, cl_uint) \
1355 F(cl_context_info, CL_CONTEXT_DEVICES, cl::vector<Device>) \
1356 F(cl_context_info, CL_CONTEXT_PROPERTIES, cl::vector<cl_context_properties>) \
1358 F(cl_event_info, CL_EVENT_COMMAND_QUEUE, cl::CommandQueue) \
1359 F(cl_event_info, CL_EVENT_COMMAND_TYPE, cl_command_type) \
1360 F(cl_event_info, CL_EVENT_REFERENCE_COUNT, cl_uint) \
1361 F(cl_event_info, CL_EVENT_COMMAND_EXECUTION_STATUS, cl_int) \
1363 F(cl_profiling_info, CL_PROFILING_COMMAND_QUEUED, cl_ulong) \
1364 F(cl_profiling_info, CL_PROFILING_COMMAND_SUBMIT, cl_ulong) \
1365 F(cl_profiling_info, CL_PROFILING_COMMAND_START, cl_ulong) \
1366 F(cl_profiling_info, CL_PROFILING_COMMAND_END, cl_ulong) \
1368 F(cl_mem_info, CL_MEM_TYPE, cl_mem_object_type) \
1369 F(cl_mem_info, CL_MEM_FLAGS, cl_mem_flags) \
1370 F(cl_mem_info, CL_MEM_SIZE, size_type) \
1371 F(cl_mem_info, CL_MEM_HOST_PTR, void*) \
1372 F(cl_mem_info, CL_MEM_MAP_COUNT, cl_uint) \
1373 F(cl_mem_info, CL_MEM_REFERENCE_COUNT, cl_uint) \
1374 F(cl_mem_info, CL_MEM_CONTEXT, cl::Context) \
1376 F(cl_image_info, CL_IMAGE_FORMAT, cl_image_format) \
1377 F(cl_image_info, CL_IMAGE_ELEMENT_SIZE, size_type) \
1378 F(cl_image_info, CL_IMAGE_ROW_PITCH, size_type) \
1379 F(cl_image_info, CL_IMAGE_SLICE_PITCH, size_type) \
1380 F(cl_image_info, CL_IMAGE_WIDTH, size_type) \
1381 F(cl_image_info, CL_IMAGE_HEIGHT, size_type) \
1382 F(cl_image_info, CL_IMAGE_DEPTH, size_type) \
1384 F(cl_sampler_info, CL_SAMPLER_REFERENCE_COUNT, cl_uint) \
1385 F(cl_sampler_info, CL_SAMPLER_CONTEXT, cl::Context) \
1386 F(cl_sampler_info, CL_SAMPLER_NORMALIZED_COORDS, cl_bool) \
1387 F(cl_sampler_info, CL_SAMPLER_ADDRESSING_MODE, cl_addressing_mode) \
1388 F(cl_sampler_info, CL_SAMPLER_FILTER_MODE, cl_filter_mode) \
1390 F(cl_program_info, CL_PROGRAM_REFERENCE_COUNT, cl_uint) \
1391 F(cl_program_info, CL_PROGRAM_CONTEXT, cl::Context) \
1392 F(cl_program_info, CL_PROGRAM_NUM_DEVICES, cl_uint) \
1393 F(cl_program_info, CL_PROGRAM_DEVICES, cl::vector<Device>) \
1394 F(cl_program_info, CL_PROGRAM_SOURCE, string) \
1395 F(cl_program_info, CL_PROGRAM_BINARY_SIZES, cl::vector<size_type>) \
1396 F(cl_program_info, CL_PROGRAM_BINARIES, cl::vector<cl::vector<unsigned char>>) \
1398 F(cl_program_build_info, CL_PROGRAM_BUILD_STATUS, cl_build_status) \
1399 F(cl_program_build_info, CL_PROGRAM_BUILD_OPTIONS, string) \
1400 F(cl_program_build_info, CL_PROGRAM_BUILD_LOG, string) \
1402 F(cl_kernel_info, CL_KERNEL_FUNCTION_NAME, string) \
1403 F(cl_kernel_info, CL_KERNEL_NUM_ARGS, cl_uint) \
1404 F(cl_kernel_info, CL_KERNEL_REFERENCE_COUNT, cl_uint) \
1405 F(cl_kernel_info, CL_KERNEL_CONTEXT, cl::Context) \
1406 F(cl_kernel_info, CL_KERNEL_PROGRAM, cl::Program) \
1408 F(cl_kernel_work_group_info, CL_KERNEL_WORK_GROUP_SIZE, size_type) \
1409 F(cl_kernel_work_group_info, CL_KERNEL_COMPILE_WORK_GROUP_SIZE, cl::detail::size_t_array) \
1410 F(cl_kernel_work_group_info, CL_KERNEL_LOCAL_MEM_SIZE, cl_ulong) \
1412 F(cl_command_queue_info, CL_QUEUE_CONTEXT, cl::Context) \
1413 F(cl_command_queue_info, CL_QUEUE_DEVICE, cl::Device) \
1414 F(cl_command_queue_info, CL_QUEUE_REFERENCE_COUNT, cl_uint) \
1415 F(cl_command_queue_info, CL_QUEUE_PROPERTIES, cl_command_queue_properties)
1418#define CL_HPP_PARAM_NAME_INFO_1_1_(F) \
1419 F(cl_context_info, CL_CONTEXT_NUM_DEVICES, cl_uint)\
1420 F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF, cl_uint) \
1421 F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR, cl_uint) \
1422 F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT, cl_uint) \
1423 F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_INT, cl_uint) \
1424 F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG, cl_uint) \
1425 F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT, cl_uint) \
1426 F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE, cl_uint) \
1427 F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF, cl_uint) \
1428 F(cl_device_info, CL_DEVICE_OPENCL_C_VERSION, string) \
1430 F(cl_mem_info, CL_MEM_ASSOCIATED_MEMOBJECT, cl::Memory) \
1431 F(cl_mem_info, CL_MEM_OFFSET, size_type) \
1433 F(cl_kernel_work_group_info, CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, size_type) \
1434 F(cl_kernel_work_group_info, CL_KERNEL_PRIVATE_MEM_SIZE, cl_ulong) \
1436 F(cl_event_info, CL_EVENT_CONTEXT, cl::Context)
1438#define CL_HPP_PARAM_NAME_INFO_1_2_(F) \
1439 F(cl_program_info, CL_PROGRAM_NUM_KERNELS, size_type) \
1440 F(cl_program_info, CL_PROGRAM_KERNEL_NAMES, string) \
1442 F(cl_program_build_info, CL_PROGRAM_BINARY_TYPE, cl_program_binary_type) \
1444 F(cl_kernel_info, CL_KERNEL_ATTRIBUTES, string) \
1446 F(cl_kernel_arg_info, CL_KERNEL_ARG_ADDRESS_QUALIFIER, cl_kernel_arg_address_qualifier) \
1447 F(cl_kernel_arg_info, CL_KERNEL_ARG_ACCESS_QUALIFIER, cl_kernel_arg_access_qualifier) \
1448 F(cl_kernel_arg_info, CL_KERNEL_ARG_TYPE_NAME, string) \
1449 F(cl_kernel_arg_info, CL_KERNEL_ARG_NAME, string) \
1450 F(cl_kernel_arg_info, CL_KERNEL_ARG_TYPE_QUALIFIER, cl_kernel_arg_type_qualifier) \
1452 F(cl_kernel_work_group_info, CL_KERNEL_GLOBAL_WORK_SIZE, cl::detail::size_t_array) \
1454 F(cl_device_info, CL_DEVICE_LINKER_AVAILABLE, cl_bool) \
1455 F(cl_device_info, CL_DEVICE_IMAGE_MAX_BUFFER_SIZE, size_type) \
1456 F(cl_device_info, CL_DEVICE_IMAGE_MAX_ARRAY_SIZE, size_type) \
1457 F(cl_device_info, CL_DEVICE_PARENT_DEVICE, cl::Device) \
1458 F(cl_device_info, CL_DEVICE_PARTITION_MAX_SUB_DEVICES, cl_uint) \
1459 F(cl_device_info, CL_DEVICE_PARTITION_PROPERTIES, cl::vector<cl_device_partition_property>) \
1460 F(cl_device_info, CL_DEVICE_PARTITION_TYPE, cl::vector<cl_device_partition_property>) \
1461 F(cl_device_info, CL_DEVICE_REFERENCE_COUNT, cl_uint) \
1462 F(cl_device_info, CL_DEVICE_PREFERRED_INTEROP_USER_SYNC, cl_bool) \
1463 F(cl_device_info, CL_DEVICE_PARTITION_AFFINITY_DOMAIN, cl_device_affinity_domain) \
1464 F(cl_device_info, CL_DEVICE_BUILT_IN_KERNELS, string) \
1465 F(cl_device_info, CL_DEVICE_PRINTF_BUFFER_SIZE, size_type) \
1467 F(cl_image_info, CL_IMAGE_ARRAY_SIZE, size_type) \
1468 F(cl_image_info, CL_IMAGE_NUM_MIP_LEVELS, cl_uint) \
1469 F(cl_image_info, CL_IMAGE_NUM_SAMPLES, cl_uint)
1471#define CL_HPP_PARAM_NAME_INFO_2_0_(F) \
1472 F(cl_device_info, CL_DEVICE_QUEUE_ON_HOST_PROPERTIES, cl_command_queue_properties) \
1473 F(cl_device_info, CL_DEVICE_QUEUE_ON_DEVICE_PROPERTIES, cl_command_queue_properties) \
1474 F(cl_device_info, CL_DEVICE_QUEUE_ON_DEVICE_PREFERRED_SIZE, cl_uint) \
1475 F(cl_device_info, CL_DEVICE_QUEUE_ON_DEVICE_MAX_SIZE, cl_uint) \
1476 F(cl_device_info, CL_DEVICE_MAX_ON_DEVICE_QUEUES, cl_uint) \
1477 F(cl_device_info, CL_DEVICE_MAX_ON_DEVICE_EVENTS, cl_uint) \
1478 F(cl_device_info, CL_DEVICE_MAX_PIPE_ARGS, cl_uint) \
1479 F(cl_device_info, CL_DEVICE_PIPE_MAX_ACTIVE_RESERVATIONS, cl_uint) \
1480 F(cl_device_info, CL_DEVICE_PIPE_MAX_PACKET_SIZE, cl_uint) \
1481 F(cl_device_info, CL_DEVICE_SVM_CAPABILITIES, cl_device_svm_capabilities) \
1482 F(cl_device_info, CL_DEVICE_PREFERRED_PLATFORM_ATOMIC_ALIGNMENT, cl_uint) \
1483 F(cl_device_info, CL_DEVICE_PREFERRED_GLOBAL_ATOMIC_ALIGNMENT, cl_uint) \
1484 F(cl_device_info, CL_DEVICE_PREFERRED_LOCAL_ATOMIC_ALIGNMENT, cl_uint) \
1485 F(cl_device_info, CL_DEVICE_IMAGE_PITCH_ALIGNMENT, cl_uint) \
1486 F(cl_device_info, CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT, cl_uint) \
1487 F(cl_device_info, CL_DEVICE_MAX_READ_WRITE_IMAGE_ARGS, cl_uint ) \
1488 F(cl_device_info, CL_DEVICE_MAX_GLOBAL_VARIABLE_SIZE, size_type ) \
1489 F(cl_device_info, CL_DEVICE_GLOBAL_VARIABLE_PREFERRED_TOTAL_SIZE, size_type ) \
1490 F(cl_profiling_info, CL_PROFILING_COMMAND_COMPLETE, cl_ulong) \
1491 F(cl_kernel_exec_info, CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM, cl_bool) \
1492 F(cl_kernel_exec_info, CL_KERNEL_EXEC_INFO_SVM_PTRS, void**) \
1493 F(cl_command_queue_info, CL_QUEUE_SIZE, cl_uint) \
1494 F(cl_mem_info, CL_MEM_USES_SVM_POINTER, cl_bool) \
1495 F(cl_program_build_info, CL_PROGRAM_BUILD_GLOBAL_VARIABLE_TOTAL_SIZE, size_type) \
1496 F(cl_pipe_info, CL_PIPE_PACKET_SIZE, cl_uint) \
1497 F(cl_pipe_info, CL_PIPE_MAX_PACKETS, cl_uint)
1499#define CL_HPP_PARAM_NAME_INFO_SUBGROUP_KHR_(F) \
1500 F(cl_kernel_sub_group_info, CL_KERNEL_MAX_SUB_GROUP_SIZE_FOR_NDRANGE_KHR, size_type) \
1501 F(cl_kernel_sub_group_info, CL_KERNEL_SUB_GROUP_COUNT_FOR_NDRANGE_KHR, size_type)
1503#define CL_HPP_PARAM_NAME_INFO_IL_KHR_(F) \
1504 F(cl_device_info, CL_DEVICE_IL_VERSION_KHR, string) \
1505 F(cl_program_info, CL_PROGRAM_IL_KHR, cl::vector<unsigned char>)
1507#define CL_HPP_PARAM_NAME_INFO_2_1_(F) \
1508 F(cl_platform_info, CL_PLATFORM_HOST_TIMER_RESOLUTION, cl_ulong) \
1509 F(cl_program_info, CL_PROGRAM_IL, cl::vector<unsigned char>) \
1510 F(cl_device_info, CL_DEVICE_MAX_NUM_SUB_GROUPS, cl_uint) \
1511 F(cl_device_info, CL_DEVICE_IL_VERSION, string) \
1512 F(cl_device_info, CL_DEVICE_SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS, cl_bool) \
1513 F(cl_command_queue_info, CL_QUEUE_DEVICE_DEFAULT, cl::DeviceCommandQueue) \
1514 F(cl_kernel_sub_group_info, CL_KERNEL_MAX_SUB_GROUP_SIZE_FOR_NDRANGE, size_type) \
1515 F(cl_kernel_sub_group_info, CL_KERNEL_SUB_GROUP_COUNT_FOR_NDRANGE, size_type) \
1516 F(cl_kernel_sub_group_info, CL_KERNEL_LOCAL_SIZE_FOR_SUB_GROUP_COUNT, cl::detail::size_t_array) \
1517 F(cl_kernel_sub_group_info, CL_KERNEL_MAX_NUM_SUB_GROUPS, size_type) \
1518 F(cl_kernel_sub_group_info, CL_KERNEL_COMPILE_NUM_SUB_GROUPS, size_type)
1520#define CL_HPP_PARAM_NAME_INFO_2_2_(F) \
1521 F(cl_program_info, CL_PROGRAM_SCOPE_GLOBAL_CTORS_PRESENT, cl_bool) \
1522 F(cl_program_info, CL_PROGRAM_SCOPE_GLOBAL_DTORS_PRESENT, cl_bool)
1524#define CL_HPP_PARAM_NAME_DEVICE_FISSION_EXT_(F) \
1525 F(cl_device_info, CL_DEVICE_PARENT_DEVICE_EXT, cl::Device) \
1526 F(cl_device_info, CL_DEVICE_PARTITION_TYPES_EXT, cl::vector<cl_device_partition_property_ext>) \
1527 F(cl_device_info, CL_DEVICE_AFFINITY_DOMAINS_EXT, cl::vector<cl_device_partition_property_ext>) \
1528 F(cl_device_info, CL_DEVICE_REFERENCE_COUNT_EXT , cl_uint) \
1529 F(cl_device_info, CL_DEVICE_PARTITION_STYLE_EXT, cl::vector<cl_device_partition_property_ext>)
1531#define CL_HPP_PARAM_NAME_CL_KHR_EXTENDED_VERSIONING_CL3_SHARED_(F) \
1532 F(cl_platform_info, CL_PLATFORM_NUMERIC_VERSION_KHR, cl_version_khr) \
1533 F(cl_platform_info, CL_PLATFORM_EXTENSIONS_WITH_VERSION_KHR, cl::vector<cl_name_version_khr>) \
1535 F(cl_device_info, CL_DEVICE_NUMERIC_VERSION_KHR, cl_version_khr) \
1536 F(cl_device_info, CL_DEVICE_EXTENSIONS_WITH_VERSION_KHR, cl::vector<cl_name_version_khr>) \
1537 F(cl_device_info, CL_DEVICE_ILS_WITH_VERSION_KHR, cl::vector<cl_name_version_khr>) \
1538 F(cl_device_info, CL_DEVICE_BUILT_IN_KERNELS_WITH_VERSION_KHR, cl::vector<cl_name_version_khr>)
1540#define CL_HPP_PARAM_NAME_CL_KHR_EXTENDED_VERSIONING_KHRONLY_(F) \
1541 F(cl_device_info, CL_DEVICE_OPENCL_C_NUMERIC_VERSION_KHR, cl_version_khr)
1544#define CL_HPP_PARAM_NAME_CL_KHR_SEMAPHORE_(F) \
1545 F(cl_semaphore_info_khr, CL_SEMAPHORE_CONTEXT_KHR, cl::Context) \
1546 F(cl_semaphore_info_khr, CL_SEMAPHORE_REFERENCE_COUNT_KHR, cl_uint) \
1547 F(cl_semaphore_info_khr, CL_SEMAPHORE_PROPERTIES_KHR, cl::vector<cl_semaphore_properties_khr>) \
1548 F(cl_semaphore_info_khr, CL_SEMAPHORE_TYPE_KHR, cl_semaphore_type_khr) \
1549 F(cl_semaphore_info_khr, CL_SEMAPHORE_PAYLOAD_KHR, cl_semaphore_payload_khr) \
1550 F(cl_platform_info, CL_PLATFORM_SEMAPHORE_TYPES_KHR, cl::vector<cl_semaphore_type_khr>) \
1551 F(cl_device_info, CL_DEVICE_SEMAPHORE_TYPES_KHR, cl::vector<cl_semaphore_type_khr>) \
1553#define CL_HPP_PARAM_NAME_CL_KHR_EXTERNAL_MEMORY_(F) \
1554 F(cl_device_info, CL_DEVICE_EXTERNAL_MEMORY_IMPORT_HANDLE_TYPES_KHR, cl::vector<cl::ExternalMemoryType>) \
1555 F(cl_platform_info, CL_PLATFORM_EXTERNAL_MEMORY_IMPORT_HANDLE_TYPES_KHR, cl::vector<cl::ExternalMemoryType>)
1557#define CL_HPP_PARAM_NAME_CL_KHR_EXTERNAL_SEMAPHORE_(F) \
1558 F(cl_platform_info, CL_PLATFORM_SEMAPHORE_IMPORT_HANDLE_TYPES_KHR, cl::vector<cl_external_semaphore_handle_type_khr>) \
1559 F(cl_platform_info, CL_PLATFORM_SEMAPHORE_EXPORT_HANDLE_TYPES_KHR, cl::vector<cl_external_semaphore_handle_type_khr>) \
1560 F(cl_device_info, CL_DEVICE_SEMAPHORE_IMPORT_HANDLE_TYPES_KHR, cl::vector<cl_external_semaphore_handle_type_khr>) \
1561 F(cl_device_info, CL_DEVICE_SEMAPHORE_EXPORT_HANDLE_TYPES_KHR, cl::vector<cl_external_semaphore_handle_type_khr>) \
1562 F(cl_semaphore_info_khr, CL_SEMAPHORE_EXPORT_HANDLE_TYPES_KHR, cl::vector<cl_external_semaphore_handle_type_khr>) \
1564#define CL_HPP_PARAM_NAME_CL_KHR_EXTERNAL_SEMAPHORE_OPAQUE_FD_EXT(F) \
1565 F(cl_external_semaphore_handle_type_khr, CL_SEMAPHORE_HANDLE_OPAQUE_FD_KHR, int) \
1567#define CL_HPP_PARAM_NAME_CL_KHR_EXTERNAL_SEMAPHORE_SYNC_FD_EXT(F) \
1568 F(cl_external_semaphore_handle_type_khr, CL_SEMAPHORE_HANDLE_SYNC_FD_KHR, int) \
1570#define CL_HPP_PARAM_NAME_CL_KHR_EXTERNAL_SEMAPHORE_WIN32_EXT(F) \
1571 F(cl_external_semaphore_handle_type_khr, CL_SEMAPHORE_HANDLE_OPAQUE_WIN32_KHR, void*) \
1572 F(cl_external_semaphore_handle_type_khr, CL_SEMAPHORE_HANDLE_OPAQUE_WIN32_KMT_KHR, void*) \
1574#define CL_HPP_PARAM_NAME_INFO_3_0_(F) \
1575 F(cl_platform_info, CL_PLATFORM_NUMERIC_VERSION, cl_version) \
1576 F(cl_platform_info, CL_PLATFORM_EXTENSIONS_WITH_VERSION, cl::vector<cl_name_version>) \
1578 F(cl_device_info, CL_DEVICE_NUMERIC_VERSION, cl_version) \
1579 F(cl_device_info, CL_DEVICE_EXTENSIONS_WITH_VERSION, cl::vector<cl_name_version>) \
1580 F(cl_device_info, CL_DEVICE_ILS_WITH_VERSION, cl::vector<cl_name_version>) \
1581 F(cl_device_info, CL_DEVICE_BUILT_IN_KERNELS_WITH_VERSION, cl::vector<cl_name_version>) \
1582 F(cl_device_info, CL_DEVICE_ATOMIC_MEMORY_CAPABILITIES, cl_device_atomic_capabilities) \
1583 F(cl_device_info, CL_DEVICE_ATOMIC_FENCE_CAPABILITIES, cl_device_atomic_capabilities) \
1584 F(cl_device_info, CL_DEVICE_NON_UNIFORM_WORK_GROUP_SUPPORT, cl_bool) \
1585 F(cl_device_info, CL_DEVICE_OPENCL_C_ALL_VERSIONS, cl::vector<cl_name_version>) \
1586 F(cl_device_info, CL_DEVICE_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, size_type) \
1587 F(cl_device_info, CL_DEVICE_WORK_GROUP_COLLECTIVE_FUNCTIONS_SUPPORT, cl_bool) \
1588 F(cl_device_info, CL_DEVICE_GENERIC_ADDRESS_SPACE_SUPPORT, cl_bool) \
1589 F(cl_device_info, CL_DEVICE_OPENCL_C_FEATURES, cl::vector<cl_name_version>) \
1590 F(cl_device_info, CL_DEVICE_DEVICE_ENQUEUE_CAPABILITIES, cl_device_device_enqueue_capabilities) \
1591 F(cl_device_info, CL_DEVICE_PIPE_SUPPORT, cl_bool) \
1592 F(cl_device_info, CL_DEVICE_LATEST_CONFORMANCE_VERSION_PASSED, string) \
1594 F(cl_command_queue_info, CL_QUEUE_PROPERTIES_ARRAY, cl::vector<cl_queue_properties>) \
1595 F(cl_mem_info, CL_MEM_PROPERTIES, cl::vector<cl_mem_properties>) \
1596 F(cl_pipe_info, CL_PIPE_PROPERTIES, cl::vector<cl_pipe_properties>) \
1597 F(cl_sampler_info, CL_SAMPLER_PROPERTIES, cl::vector<cl_sampler_properties>) \
1599#define CL_HPP_PARAM_NAME_CL_IMAGE_REQUIREMENTS_EXT(F) \
1600 F(cl_image_requirements_info_ext, CL_IMAGE_REQUIREMENTS_ROW_PITCH_ALIGNMENT_EXT, size_type) \
1601 F(cl_image_requirements_info_ext, CL_IMAGE_REQUIREMENTS_BASE_ADDRESS_ALIGNMENT_EXT, size_type) \
1602 F(cl_image_requirements_info_ext, CL_IMAGE_REQUIREMENTS_SIZE_EXT, size_type) \
1603 F(cl_image_requirements_info_ext, CL_IMAGE_REQUIREMENTS_MAX_WIDTH_EXT, cl_uint) \
1604 F(cl_image_requirements_info_ext, CL_IMAGE_REQUIREMENTS_MAX_HEIGHT_EXT, cl_uint) \
1605 F(cl_image_requirements_info_ext, CL_IMAGE_REQUIREMENTS_MAX_DEPTH_EXT, cl_uint) \
1606 F(cl_image_requirements_info_ext, CL_IMAGE_REQUIREMENTS_MAX_ARRAY_SIZE_EXT, cl_uint) \
1608#define CL_HPP_PARAM_NAME_CL_IMAGE_REQUIREMENTS_SLICE_PITCH_ALIGNMENT_EXT(F) \
1609 F(cl_image_requirements_info_ext, CL_IMAGE_REQUIREMENTS_SLICE_PITCH_ALIGNMENT_EXT, size_type) \
1611#define CL_HPP_PARAM_NAME_CL_INTEL_COMMAND_QUEUE_FAMILIES_(F) \
1612 F(cl_device_info, CL_DEVICE_QUEUE_FAMILY_PROPERTIES_INTEL, cl::vector<cl_queue_family_properties_intel>) \
1614 F(cl_command_queue_info, CL_QUEUE_FAMILY_INTEL, cl_uint) \
1615 F(cl_command_queue_info, CL_QUEUE_INDEX_INTEL, cl_uint)
1617#define CL_HPP_PARAM_NAME_CL_INTEL_UNIFIED_SHARED_MEMORY_(F) \
1618 F(cl_device_info, CL_DEVICE_HOST_MEM_CAPABILITIES_INTEL, cl_device_unified_shared_memory_capabilities_intel ) \
1619 F(cl_device_info, CL_DEVICE_DEVICE_MEM_CAPABILITIES_INTEL, cl_device_unified_shared_memory_capabilities_intel ) \
1620 F(cl_device_info, CL_DEVICE_SINGLE_DEVICE_SHARED_MEM_CAPABILITIES_INTEL, cl_device_unified_shared_memory_capabilities_intel ) \
1621 F(cl_device_info, CL_DEVICE_CROSS_DEVICE_SHARED_MEM_CAPABILITIES_INTEL, cl_device_unified_shared_memory_capabilities_intel ) \
1622 F(cl_device_info, CL_DEVICE_SHARED_SYSTEM_MEM_CAPABILITIES_INTEL, cl_device_unified_shared_memory_capabilities_intel )
1624template <
typename enum_type, cl_
int Name>
1627#define CL_HPP_DECLARE_PARAM_TRAITS_(token, param_name, T) \
1630struct param_traits<detail:: token,param_name> \
1632 enum { value = param_name }; \
1633 typedef T param_type; \
1636CL_HPP_PARAM_NAME_INFO_1_0_(CL_HPP_DECLARE_PARAM_TRAITS_)
1637#if CL_HPP_TARGET_OPENCL_VERSION >= 110
1638CL_HPP_PARAM_NAME_INFO_1_1_(CL_HPP_DECLARE_PARAM_TRAITS_)
1640#if CL_HPP_TARGET_OPENCL_VERSION >= 120
1641CL_HPP_PARAM_NAME_INFO_1_2_(CL_HPP_DECLARE_PARAM_TRAITS_)
1643#if CL_HPP_TARGET_OPENCL_VERSION >= 200
1644CL_HPP_PARAM_NAME_INFO_2_0_(CL_HPP_DECLARE_PARAM_TRAITS_)
1646#if CL_HPP_TARGET_OPENCL_VERSION >= 210
1647CL_HPP_PARAM_NAME_INFO_2_1_(CL_HPP_DECLARE_PARAM_TRAITS_)
1649#if CL_HPP_TARGET_OPENCL_VERSION >= 220
1650CL_HPP_PARAM_NAME_INFO_2_2_(CL_HPP_DECLARE_PARAM_TRAITS_)
1652#if CL_HPP_TARGET_OPENCL_VERSION >= 300
1653CL_HPP_PARAM_NAME_INFO_3_0_(CL_HPP_DECLARE_PARAM_TRAITS_)
1656#if defined(cl_khr_subgroups) && CL_HPP_TARGET_OPENCL_VERSION < 210
1657CL_HPP_PARAM_NAME_INFO_SUBGROUP_KHR_(CL_HPP_DECLARE_PARAM_TRAITS_)
1660#if defined(cl_khr_il_program) && CL_HPP_TARGET_OPENCL_VERSION < 210
1661CL_HPP_PARAM_NAME_INFO_IL_KHR_(CL_HPP_DECLARE_PARAM_TRAITS_)
1666#define CL_HPP_PARAM_NAME_INFO_1_0_DEPRECATED_IN_2_0_(F) \
1667 F(cl_device_info, CL_DEVICE_QUEUE_PROPERTIES, cl_command_queue_properties)
1669#define CL_HPP_PARAM_NAME_INFO_1_1_DEPRECATED_IN_2_0_(F) \
1670 F(cl_device_info, CL_DEVICE_HOST_UNIFIED_MEMORY, cl_bool)
1672#define CL_HPP_PARAM_NAME_INFO_1_2_DEPRECATED_IN_2_0_(F) \
1673 F(cl_image_info, CL_IMAGE_BUFFER, cl::Buffer)
1677#if CL_HPP_TARGET_OPENCL_VERSION > 100 && CL_HPP_MINIMUM_OPENCL_VERSION < 200 && CL_HPP_TARGET_OPENCL_VERSION < 200
1678CL_HPP_PARAM_NAME_INFO_1_0_DEPRECATED_IN_2_0_(CL_HPP_DECLARE_PARAM_TRAITS_)
1680#if CL_HPP_TARGET_OPENCL_VERSION > 110 && CL_HPP_MINIMUM_OPENCL_VERSION < 200
1681CL_HPP_PARAM_NAME_INFO_1_1_DEPRECATED_IN_2_0_(CL_HPP_DECLARE_PARAM_TRAITS_)
1683#if CL_HPP_TARGET_OPENCL_VERSION > 120 && CL_HPP_MINIMUM_OPENCL_VERSION < 200
1684CL_HPP_PARAM_NAME_INFO_1_2_DEPRECATED_IN_2_0_(CL_HPP_DECLARE_PARAM_TRAITS_)
1687#if defined(cl_ext_device_fission)
1688CL_HPP_PARAM_NAME_DEVICE_FISSION_EXT_(CL_HPP_DECLARE_PARAM_TRAITS_)
1691#if defined(cl_khr_extended_versioning)
1692#if CL_HPP_TARGET_OPENCL_VERSION < 300
1693CL_HPP_PARAM_NAME_CL_KHR_EXTENDED_VERSIONING_CL3_SHARED_(CL_HPP_DECLARE_PARAM_TRAITS_)
1695CL_HPP_PARAM_NAME_CL_KHR_EXTENDED_VERSIONING_KHRONLY_(CL_HPP_DECLARE_PARAM_TRAITS_)
1698#if defined(cl_khr_semaphore)
1699CL_HPP_PARAM_NAME_CL_KHR_SEMAPHORE_(CL_HPP_DECLARE_PARAM_TRAITS_)
1700#if defined(CL_SEMAPHORE_DEVICE_HANDLE_LIST_KHR)
1701CL_HPP_DECLARE_PARAM_TRAITS_(cl_semaphore_info_khr, CL_SEMAPHORE_DEVICE_HANDLE_LIST_KHR, cl::vector<cl::Device>)
1705#ifdef cl_khr_external_memory
1706CL_HPP_PARAM_NAME_CL_KHR_EXTERNAL_MEMORY_(CL_HPP_DECLARE_PARAM_TRAITS_)
1709#if defined(cl_khr_external_semaphore)
1710CL_HPP_PARAM_NAME_CL_KHR_EXTERNAL_SEMAPHORE_(CL_HPP_DECLARE_PARAM_TRAITS_)
1713#if defined(cl_khr_external_semaphore_opaque_fd)
1714CL_HPP_PARAM_NAME_CL_KHR_EXTERNAL_SEMAPHORE_OPAQUE_FD_EXT(CL_HPP_DECLARE_PARAM_TRAITS_)
1716#if defined(cl_khr_external_semaphore_sync_fd)
1717CL_HPP_PARAM_NAME_CL_KHR_EXTERNAL_SEMAPHORE_SYNC_FD_EXT(CL_HPP_DECLARE_PARAM_TRAITS_)
1719#if defined(cl_khr_external_semaphore_win32)
1720CL_HPP_PARAM_NAME_CL_KHR_EXTERNAL_SEMAPHORE_WIN32_EXT(CL_HPP_DECLARE_PARAM_TRAITS_)
1723#if defined(cl_khr_device_uuid)
1724using uuid_array = array<cl_uchar, CL_UUID_SIZE_KHR>;
1725using luid_array = array<cl_uchar, CL_LUID_SIZE_KHR>;
1726CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_UUID_KHR, uuid_array)
1727CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DRIVER_UUID_KHR, uuid_array)
1728CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_LUID_VALID_KHR, cl_bool)
1729CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_LUID_KHR, luid_array)
1730CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_NODE_MASK_KHR, cl_uint)
1733#if defined(cl_khr_pci_bus_info)
1734CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_PCI_BUS_INFO_KHR, cl_device_pci_bus_info_khr)
1738#if CL_HPP_TARGET_OPENCL_VERSION < 200
1739#if defined(CL_DEVICE_IMAGE_PITCH_ALIGNMENT_KHR)
1740CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_IMAGE_PITCH_ALIGNMENT_KHR, cl_uint)
1742#if defined(CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT_KHR)
1743CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT_KHR, cl_uint)
1747#if defined(cl_khr_integer_dot_product)
1748CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_INTEGER_DOT_PRODUCT_CAPABILITIES_KHR, cl_device_integer_dot_product_capabilities_khr)
1749#if defined(CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_8BIT_KHR)
1750CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_8BIT_KHR, cl_device_integer_dot_product_acceleration_properties_khr)
1751CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_4x8BIT_PACKED_KHR, cl_device_integer_dot_product_acceleration_properties_khr)
1755#if defined(cl_ext_image_requirements_info)
1756CL_HPP_PARAM_NAME_CL_IMAGE_REQUIREMENTS_EXT(CL_HPP_DECLARE_PARAM_TRAITS_)
1759#if defined(cl_ext_image_from_buffer)
1760CL_HPP_PARAM_NAME_CL_IMAGE_REQUIREMENTS_SLICE_PITCH_ALIGNMENT_EXT(CL_HPP_DECLARE_PARAM_TRAITS_)
1763#ifdef CL_PLATFORM_ICD_SUFFIX_KHR
1764CL_HPP_DECLARE_PARAM_TRAITS_(cl_platform_info, CL_PLATFORM_ICD_SUFFIX_KHR,
string)
1767#ifdef CL_DEVICE_PROFILING_TIMER_OFFSET_AMD
1768CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_PROFILING_TIMER_OFFSET_AMD, cl_ulong)
1770#ifdef CL_DEVICE_GLOBAL_FREE_MEMORY_AMD
1771CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_GLOBAL_FREE_MEMORY_AMD, vector<size_type>)
1773#ifdef CL_DEVICE_SIMD_PER_COMPUTE_UNIT_AMD
1774CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_SIMD_PER_COMPUTE_UNIT_AMD, cl_uint)
1776#ifdef CL_DEVICE_SIMD_WIDTH_AMD
1777CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_SIMD_WIDTH_AMD, cl_uint)
1779#ifdef CL_DEVICE_SIMD_INSTRUCTION_WIDTH_AMD
1780CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_SIMD_INSTRUCTION_WIDTH_AMD, cl_uint)
1782#ifdef CL_DEVICE_WAVEFRONT_WIDTH_AMD
1783CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_WAVEFRONT_WIDTH_AMD, cl_uint)
1785#ifdef CL_DEVICE_GLOBAL_MEM_CHANNELS_AMD
1786CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_GLOBAL_MEM_CHANNELS_AMD, cl_uint)
1788#ifdef CL_DEVICE_GLOBAL_MEM_CHANNEL_BANKS_AMD
1789CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_GLOBAL_MEM_CHANNEL_BANKS_AMD, cl_uint)
1791#ifdef CL_DEVICE_GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD
1792CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD, cl_uint)
1794#ifdef CL_DEVICE_LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD
1795CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD, cl_uint)
1797#ifdef CL_DEVICE_LOCAL_MEM_BANKS_AMD
1798CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_LOCAL_MEM_BANKS_AMD, cl_uint)
1800#ifdef CL_DEVICE_BOARD_NAME_AMD
1801CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_BOARD_NAME_AMD,
string)
1804#ifdef CL_DEVICE_COMPUTE_UNITS_BITFIELD_ARM
1805CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_COMPUTE_UNITS_BITFIELD_ARM, cl_ulong)
1807#ifdef CL_DEVICE_JOB_SLOTS_ARM
1808CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_JOB_SLOTS_ARM, cl_uint)
1810#ifdef CL_DEVICE_SCHEDULING_CONTROLS_CAPABILITIES_ARM
1811CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_SCHEDULING_CONTROLS_CAPABILITIES_ARM, cl_bitfield)
1813#ifdef CL_DEVICE_SUPPORTED_REGISTER_ALLOCATIONS_ARM
1814CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_SUPPORTED_REGISTER_ALLOCATIONS_ARM, vector<cl_uint>)
1816#ifdef CL_DEVICE_MAX_WARP_COUNT_ARM
1817CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_MAX_WARP_COUNT_ARM, cl_uint)
1819#ifdef CL_KERNEL_MAX_WARP_COUNT_ARM
1820CL_HPP_DECLARE_PARAM_TRAITS_(cl_kernel_info, CL_KERNEL_MAX_WARP_COUNT_ARM, cl_uint)
1822#ifdef CL_KERNEL_EXEC_INFO_WORKGROUP_BATCH_SIZE_ARM
1823CL_HPP_DECLARE_PARAM_TRAITS_(cl_kernel_exec_info, CL_KERNEL_EXEC_INFO_WORKGROUP_BATCH_SIZE_ARM, cl_uint)
1825#ifdef CL_KERNEL_EXEC_INFO_WORKGROUP_BATCH_SIZE_MODIFIER_ARM
1826CL_HPP_DECLARE_PARAM_TRAITS_(cl_kernel_exec_info, CL_KERNEL_EXEC_INFO_WORKGROUP_BATCH_SIZE_MODIFIER_ARM, cl_int)
1828#ifdef CL_KERNEL_EXEC_INFO_WARP_COUNT_LIMIT_ARM
1829CL_HPP_DECLARE_PARAM_TRAITS_(cl_kernel_exec_info, CL_KERNEL_EXEC_INFO_WARP_COUNT_LIMIT_ARM, cl_uint)
1831#ifdef CL_KERNEL_EXEC_INFO_COMPUTE_UNIT_MAX_QUEUED_BATCHES_ARM
1832CL_HPP_DECLARE_PARAM_TRAITS_(cl_kernel_exec_info, CL_KERNEL_EXEC_INFO_COMPUTE_UNIT_MAX_QUEUED_BATCHES_ARM, cl_uint)
1835#ifdef CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV
1836CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV, cl_uint)
1838#ifdef CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV
1839CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV, cl_uint)
1841#ifdef CL_DEVICE_REGISTERS_PER_BLOCK_NV
1842CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_REGISTERS_PER_BLOCK_NV, cl_uint)
1844#ifdef CL_DEVICE_WARP_SIZE_NV
1845CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_WARP_SIZE_NV, cl_uint)
1847#ifdef CL_DEVICE_GPU_OVERLAP_NV
1848CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_GPU_OVERLAP_NV, cl_bool)
1850#ifdef CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV
1851CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV, cl_bool)
1853#ifdef CL_DEVICE_INTEGRATED_MEMORY_NV
1854CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_INTEGRATED_MEMORY_NV, cl_bool)
1857#if defined(cl_khr_command_buffer)
1858CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_COMMAND_BUFFER_CAPABILITIES_KHR, cl_device_command_buffer_capabilities_khr)
1859CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_COMMAND_BUFFER_REQUIRED_QUEUE_PROPERTIES_KHR, cl_command_queue_properties)
1860CL_HPP_DECLARE_PARAM_TRAITS_(cl_command_buffer_info_khr, CL_COMMAND_BUFFER_QUEUES_KHR, cl::vector<CommandQueue>)
1861CL_HPP_DECLARE_PARAM_TRAITS_(cl_command_buffer_info_khr, CL_COMMAND_BUFFER_NUM_QUEUES_KHR, cl_uint)
1862CL_HPP_DECLARE_PARAM_TRAITS_(cl_command_buffer_info_khr, CL_COMMAND_BUFFER_REFERENCE_COUNT_KHR, cl_uint)
1863CL_HPP_DECLARE_PARAM_TRAITS_(cl_command_buffer_info_khr, CL_COMMAND_BUFFER_STATE_KHR, cl_command_buffer_state_khr)
1864CL_HPP_DECLARE_PARAM_TRAITS_(cl_command_buffer_info_khr, CL_COMMAND_BUFFER_PROPERTIES_ARRAY_KHR, cl::vector<cl_command_buffer_properties_khr>)
1867#if defined(cl_khr_command_buffer_mutable_dispatch)
1868CL_HPP_DECLARE_PARAM_TRAITS_(cl_mutable_command_info_khr, CL_MUTABLE_COMMAND_COMMAND_QUEUE_KHR,
CommandQueue)
1869CL_HPP_DECLARE_PARAM_TRAITS_(cl_mutable_command_info_khr, CL_MUTABLE_COMMAND_COMMAND_BUFFER_KHR, CommandBufferKhr)
1870CL_HPP_DECLARE_PARAM_TRAITS_(cl_mutable_command_info_khr, CL_MUTABLE_COMMAND_COMMAND_TYPE_KHR, cl_command_type)
1872#if CL_KHR_COMMAND_BUFFER_MUTABLE_DISPATCH_EXTENSION_VERSION > CL_MAKE_VERSION(0, 9, 2)
1873CL_HPP_DECLARE_PARAM_TRAITS_(cl_mutable_command_info_khr, CL_MUTABLE_COMMAND_PROPERTIES_ARRAY_KHR, cl::vector<cl_command_properties_khr>)
1875CL_HPP_DECLARE_PARAM_TRAITS_(cl_mutable_command_info_khr, CL_MUTABLE_DISPATCH_PROPERTIES_ARRAY_KHR, cl::vector<cl_ndrange_kernel_command_properties_khr>)
1877CL_HPP_DECLARE_PARAM_TRAITS_(cl_mutable_command_info_khr, CL_MUTABLE_DISPATCH_KERNEL_KHR, cl_kernel)
1878CL_HPP_DECLARE_PARAM_TRAITS_(cl_mutable_command_info_khr, CL_MUTABLE_DISPATCH_DIMENSIONS_KHR, cl_uint)
1879CL_HPP_DECLARE_PARAM_TRAITS_(cl_mutable_command_info_khr, CL_MUTABLE_DISPATCH_GLOBAL_WORK_OFFSET_KHR, cl::vector<size_type>)
1880CL_HPP_DECLARE_PARAM_TRAITS_(cl_mutable_command_info_khr, CL_MUTABLE_DISPATCH_GLOBAL_WORK_SIZE_KHR, cl::vector<size_type>)
1881CL_HPP_DECLARE_PARAM_TRAITS_(cl_mutable_command_info_khr, CL_MUTABLE_DISPATCH_LOCAL_WORK_SIZE_KHR, cl::vector<size_type>)
1884#if defined(cl_khr_kernel_clock)
1885CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_KERNEL_CLOCK_CAPABILITIES_KHR, cl_device_kernel_clock_capabilities_khr)
1888#if defined(cl_ext_float_atomics)
1889CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_SINGLE_FP_ATOMIC_CAPABILITIES_EXT, cl_device_fp_atomic_capabilities_ext)
1890CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_DOUBLE_FP_ATOMIC_CAPABILITIES_EXT, cl_device_fp_atomic_capabilities_ext)
1891CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_HALF_FP_ATOMIC_CAPABILITIES_EXT, cl_device_fp_atomic_capabilities_ext)
1894#if defined(cl_intel_command_queue_families)
1895CL_HPP_PARAM_NAME_CL_INTEL_COMMAND_QUEUE_FAMILIES_(CL_HPP_DECLARE_PARAM_TRAITS_)
1898#if defined(cl_intel_device_attribute_query)
1899CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_IP_VERSION_INTEL, cl_uint)
1900CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_ID_INTEL, cl_uint)
1901CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_NUM_SLICES_INTEL, cl_uint)
1902CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_NUM_SUB_SLICES_PER_SLICE_INTEL, cl_uint)
1903CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_NUM_EUS_PER_SUB_SLICE_INTEL, cl_uint)
1904CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_NUM_THREADS_PER_EU_INTEL, cl_uint)
1905CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_FEATURE_CAPABILITIES_INTEL, cl_device_feature_capabilities_intel)
1908#if defined(cl_intel_required_subgroup_size)
1909CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_SUB_GROUP_SIZES_INTEL, cl::vector<size_type>)
1910CL_HPP_DECLARE_PARAM_TRAITS_(cl_kernel_work_group_info, CL_KERNEL_SPILL_MEM_SIZE_INTEL, cl_ulong)
1913#if defined(cl_intel_unified_shared_memory)
1914CL_HPP_PARAM_NAME_CL_INTEL_UNIFIED_SHARED_MEMORY_(CL_HPP_DECLARE_PARAM_TRAITS_)
1919template <
typename Func,
typename T>
1921getInfo(Func f, cl_uint name, T* param)
1923 return getInfoHelper(f, name, param, 0);
1926template <
typename Func,
typename Arg0>
1929 Func f_;
const Arg0& arg0_;
1931 cl_uint param, size_type size,
void* value, size_type* size_ret)
1932 {
return f_(arg0_, param, size, value, size_ret); }
1935template <
typename Func,
typename Arg0,
typename Arg1>
1938 Func f_;
const Arg0& arg0_;
const Arg1& arg1_;
1940 cl_uint param, size_type size,
void* value, size_type* size_ret)
1941 {
return f_(arg0_, arg1_, param, size, value, size_ret); }
1944template <
typename Func,
typename Arg0,
typename T>
1946getInfo(Func f,
const Arg0& arg0, cl_uint name, T* param)
1948 GetInfoFunctor0<Func, Arg0> f0 = { f, arg0 };
1949 return getInfoHelper(f0, name, param, 0);
1952template <
typename Func,
typename Arg0,
typename Arg1,
typename T>
1954getInfo(Func f,
const Arg0& arg0,
const Arg1& arg1, cl_uint name, T* param)
1956 GetInfoFunctor1<Func, Arg0, Arg1> f0 = { f, arg0, arg1 };
1957 return getInfoHelper(f0, name, param, 0);
1965#if CL_HPP_TARGET_OPENCL_VERSION >= 120
1982 { return ::clRetainDevice(device); }
1993 { return ::clReleaseDevice(device); }
2000struct ReferenceHandler<cl_device_id>
2003 static cl_int retain(cl_device_id)
2004 {
return CL_SUCCESS; }
2006 static cl_int release(cl_device_id)
2007 {
return CL_SUCCESS; }
2015 static cl_int retain(cl_platform_id)
2016 {
return CL_SUCCESS; }
2018 static cl_int release(cl_platform_id)
2019 {
return CL_SUCCESS; }
2025 static cl_int retain(cl_context context)
2026 { return ::clRetainContext(context); }
2027 static cl_int release(cl_context context)
2028 { return ::clReleaseContext(context); }
2034 static cl_int retain(cl_command_queue queue)
2035 { return ::clRetainCommandQueue(queue); }
2036 static cl_int release(cl_command_queue queue)
2037 { return ::clReleaseCommandQueue(queue); }
2043 static cl_int retain(cl_mem memory)
2044 { return ::clRetainMemObject(memory); }
2045 static cl_int release(cl_mem memory)
2046 { return ::clReleaseMemObject(memory); }
2052 static cl_int retain(cl_sampler sampler)
2053 { return ::clRetainSampler(sampler); }
2054 static cl_int release(cl_sampler sampler)
2055 { return ::clReleaseSampler(sampler); }
2061 static cl_int retain(cl_program program)
2062 { return ::clRetainProgram(program); }
2063 static cl_int release(cl_program program)
2064 { return ::clReleaseProgram(program); }
2070 static cl_int retain(cl_kernel kernel)
2071 { return ::clRetainKernel(kernel); }
2072 static cl_int release(cl_kernel kernel)
2073 { return ::clReleaseKernel(kernel); }
2079 static cl_int retain(cl_event event)
2080 { return ::clRetainEvent(event); }
2081 static cl_int release(cl_event event)
2082 { return ::clReleaseEvent(event); }
2085#ifdef cl_khr_semaphore
2089 static cl_int retain(cl_semaphore_khr semaphore)
2091 if (pfn_clRetainSemaphoreKHR !=
nullptr) {
2092 return pfn_clRetainSemaphoreKHR(semaphore);
2095 return CL_INVALID_OPERATION;
2098 static cl_int release(cl_semaphore_khr semaphore)
2100 if (pfn_clReleaseSemaphoreKHR !=
nullptr) {
2101 return pfn_clReleaseSemaphoreKHR(semaphore);
2104 return CL_INVALID_OPERATION;
2108#if defined(cl_khr_command_buffer)
2110struct ReferenceHandler<cl_command_buffer_khr>
2112 static cl_int retain(cl_command_buffer_khr cmdBufferKhr)
2114 if (pfn_clRetainCommandBufferKHR ==
nullptr) {
2115 return detail::errHandler(CL_INVALID_OPERATION, __RETAIN_COMMAND_BUFFER_KHR_ERR);
2117 return pfn_clRetainCommandBufferKHR(cmdBufferKhr);
2120 static cl_int release(cl_command_buffer_khr cmdBufferKhr)
2122 if (pfn_clReleaseCommandBufferKHR ==
nullptr) {
2123 return detail::errHandler(CL_INVALID_OPERATION, __RELEASE_COMMAND_BUFFER_KHR_ERR);
2125 return pfn_clReleaseCommandBufferKHR(cmdBufferKhr);
2130struct ReferenceHandler<cl_mutable_command_khr>
2133 static cl_int retain(cl_mutable_command_khr)
2134 {
return CL_SUCCESS; }
2136 static cl_int release(cl_mutable_command_khr)
2137 {
return CL_SUCCESS; }
2142#if (CL_HPP_TARGET_OPENCL_VERSION >= 120 && CL_HPP_MINIMUM_OPENCL_VERSION < 120) || \
2143 (CL_HPP_TARGET_OPENCL_VERSION >= 200 && CL_HPP_MINIMUM_OPENCL_VERSION < 200)
2145static cl_uint getVersion(
const vector<char> &versionInfo)
2147 int highVersion = 0;
2150 while(versionInfo[index] !=
'.' ) {
2152 highVersion += versionInfo[index]-
'0';
2156 while(versionInfo[index] !=
' ' && versionInfo[index] !=
'\0') {
2158 lowVersion += versionInfo[index]-
'0';
2161 return (highVersion << 16) | lowVersion;
2164static cl_uint getPlatformVersion(cl_platform_id platform)
2167 clGetPlatformInfo(platform, CL_PLATFORM_VERSION, 0,
nullptr, &size);
2169 vector<char> versionInfo(size);
2170 clGetPlatformInfo(platform, CL_PLATFORM_VERSION, size, versionInfo.data(), &size);
2171 return getVersion(versionInfo);
2174static cl_uint getDevicePlatformVersion(cl_device_id device)
2176 cl_platform_id platform;
2177 clGetDeviceInfo(device, CL_DEVICE_PLATFORM,
sizeof(platform), &platform,
nullptr);
2178 return getPlatformVersion(platform);
2181static cl_uint getContextPlatformVersion(cl_context context)
2186 clGetContextInfo(context, CL_CONTEXT_DEVICES, 0,
nullptr, &size);
2189 vector<cl_device_id> devices(size/
sizeof(cl_device_id));
2190 clGetContextInfo(context, CL_CONTEXT_DEVICES, size, devices.data(),
nullptr);
2191 return getDevicePlatformVersion(devices[0]);
2195template <
typename T>
2205 Wrapper() : object_(
nullptr) { }
2207 Wrapper(
const cl_type &obj,
bool retainObject) : object_(obj)
2210 detail::errHandler(retain(), __RETAIN_ERR);
2216 if (object_ !=
nullptr) { release(); }
2219 Wrapper(
const Wrapper<cl_type>& rhs)
2221 object_ = rhs.object_;
2222 detail::errHandler(retain(), __RETAIN_ERR);
2225 Wrapper(Wrapper<cl_type>&& rhs)
noexcept
2227 object_ = rhs.object_;
2228 rhs.object_ =
nullptr;
2231 Wrapper<cl_type>& operator = (
const Wrapper<cl_type>& rhs)
2234 detail::errHandler(release(), __RELEASE_ERR);
2235 object_ = rhs.object_;
2236 detail::errHandler(retain(), __RETAIN_ERR);
2241 Wrapper<cl_type>& operator = (Wrapper<cl_type>&& rhs)
2244 detail::errHandler(release(), __RELEASE_ERR);
2245 object_ = rhs.object_;
2246 rhs.object_ =
nullptr;
2251 Wrapper<cl_type>& operator = (
const cl_type &rhs)
2253 detail::errHandler(release(), __RELEASE_ERR);
2258 const cl_type& operator ()()
const {
return object_; }
2260 cl_type& operator ()() {
return object_; }
2262 cl_type get()
const {
return object_; }
2265 template<
typename Func,
typename U>
2266 friend inline cl_int getInfoHelper(Func, cl_uint, U*,
int,
typename U::cl_type);
2268 cl_int retain()
const
2270 if (object_ !=
nullptr) {
2278 cl_int release()
const
2280 if (object_ !=
nullptr) {
2293 typedef cl_device_id cl_type;
2297 bool referenceCountable_;
2299 static bool isReferenceCountable(cl_device_id device)
2301 bool retVal =
false;
2302#if CL_HPP_TARGET_OPENCL_VERSION >= 120 && CL_HPP_MINIMUM_OPENCL_VERSION < 120
2303 if (device !=
nullptr) {
2304 int version = getDevicePlatformVersion(device);
2305 if(version > ((1 << 16) + 1)) {
2309#elif CL_HPP_TARGET_OPENCL_VERSION >= 120
2317 Wrapper() : object_(
nullptr), referenceCountable_(
false)
2321 Wrapper(
const cl_type &obj,
bool retainObject) :
2323 referenceCountable_(
false)
2325 referenceCountable_ = isReferenceCountable(obj);
2328 detail::errHandler(retain(), __RETAIN_ERR);
2337 Wrapper(
const Wrapper<cl_type>& rhs)
2339 object_ = rhs.object_;
2340 referenceCountable_ = isReferenceCountable(object_);
2341 detail::errHandler(retain(), __RETAIN_ERR);
2344 Wrapper(Wrapper<cl_type>&& rhs)
noexcept
2346 object_ = rhs.object_;
2347 referenceCountable_ = rhs.referenceCountable_;
2348 rhs.object_ =
nullptr;
2349 rhs.referenceCountable_ =
false;
2352 Wrapper<cl_type>& operator = (
const Wrapper<cl_type>& rhs)
2355 detail::errHandler(release(), __RELEASE_ERR);
2356 object_ = rhs.object_;
2357 referenceCountable_ = rhs.referenceCountable_;
2358 detail::errHandler(retain(), __RETAIN_ERR);
2363 Wrapper<cl_type>& operator = (Wrapper<cl_type>&& rhs)
2366 detail::errHandler(release(), __RELEASE_ERR);
2367 object_ = rhs.object_;
2368 referenceCountable_ = rhs.referenceCountable_;
2369 rhs.object_ =
nullptr;
2370 rhs.referenceCountable_ =
false;
2375 Wrapper<cl_type>& operator = (
const cl_type &rhs)
2377 detail::errHandler(release(), __RELEASE_ERR);
2379 referenceCountable_ = isReferenceCountable(object_);
2383 const cl_type& operator ()()
const {
return object_; }
2385 cl_type& operator ()() {
return object_; }
2387 cl_type get()
const {
return object_; }
2390 template<
typename Func,
typename U>
2391 friend inline cl_int getInfoHelper(Func, cl_uint, U*,
int,
typename U::cl_type);
2393 template<
typename Func,
typename U>
2394 friend inline cl_int getInfoHelper(Func, cl_uint, vector<U>*,
int,
typename U::cl_type);
2396 cl_int retain()
const
2398 if( object_ !=
nullptr && referenceCountable_ ) {
2406 cl_int release()
const
2408 if (object_ !=
nullptr && referenceCountable_) {
2417template <
typename T>
2418inline bool operator==(
const Wrapper<T> &lhs,
const Wrapper<T> &rhs)
2420 return lhs() == rhs();
2423template <
typename T>
2424inline bool operator!=(
const Wrapper<T> &lhs,
const Wrapper<T> &rhs)
2426 return !operator==(lhs, rhs);
2449 image_channel_order = order;
2450 image_channel_data_type = type;
2460 this->image_channel_data_type = rhs.image_channel_data_type;
2461 this->image_channel_order = rhs.image_channel_order;
2477 static std::once_flag default_initialized_;
2479 static cl_int default_error_;
2486 static void makeDefault();
2493 static void makeDefaultProvided(
const Device &p) {
2498#ifdef CL_HPP_UNIT_TEST_ENABLE
2505 static void unitTestClearDefault() {
2517 explicit Device(
const cl_device_id &device,
bool retainObject =
false) :
2518 detail::Wrapper<cl_type>(device, retainObject) { }
2525 cl_int *errResult =
nullptr)
2527 std::call_once(default_initialized_, makeDefault);
2528 detail::errHandler(default_error_);
2529 if (errResult !=
nullptr) {
2530 *errResult = default_error_;
2544 std::call_once(default_initialized_, makeDefaultProvided, std::cref(default_device));
2545 detail::errHandler(default_error_);
2561 template <
typename T>
2562 cl_int
getInfo(cl_device_info name, T* param)
const
2564 return detail::errHandler(
2565 detail::getInfo(&::clGetDeviceInfo, object_, name, param),
2566 __GET_DEVICE_INFO_ERR);
2570 template <cl_device_info name>
typename
2575 detail::cl_device_info, name>::param_type param;
2576 cl_int result =
getInfo(name, ¶m);
2577 if (err !=
nullptr) {
2583#if CL_HPP_TARGET_OPENCL_VERSION >= 210
2592 cl_ulong retVal = 0;
2594 clGetHostTimer(this->get(), &retVal);
2597 __GET_HOST_TIMER_ERR);
2616 std::pair<cl_ulong, cl_ulong> retVal;
2618 clGetDeviceAndHostTimer(this->get(), &(retVal.first), &(retVal.second));
2621 __GET_DEVICE_AND_HOST_TIMER_ERR);
2629#if CL_HPP_TARGET_OPENCL_VERSION >= 120
2632 vector<Device>* devices);
2635#if defined(cl_ext_device_fission)
2637 cl_int
createSubDevices(
const cl_device_partition_property_ext* properties,
2638 vector<Device>* devices);
2642using BuildLogType = vector<std::pair<cl::Device, typename detail::param_traits<detail::cl_program_build_info, CL_PROGRAM_BUILD_LOG>::param_type>>;
2643#if defined(CL_HPP_ENABLE_EXCEPTIONS)
2647class BuildError :
public Error
2650 BuildLogType buildLogs;
2652 BuildError(cl_int err,
const char * errStr,
const BuildLogType &vec) : Error(err, errStr), buildLogs(vec)
2656 BuildLogType getBuildLog()
const
2662 static inline cl_int buildErrHandler(
2664 const char * errStr,
2665 const BuildLogType &buildLogs)
2667 if (err != CL_SUCCESS) {
2668 throw BuildError(err, errStr, buildLogs);
2676 static inline cl_int buildErrHandler(
2678 const char * errStr,
2679 const BuildLogType &buildLogs)
2688CL_HPP_DEFINE_STATIC_MEMBER_ std::once_flag Device::default_initialized_;
2689CL_HPP_DEFINE_STATIC_MEMBER_ Device Device::default_;
2690CL_HPP_DEFINE_STATIC_MEMBER_ cl_int Device::default_error_ = CL_SUCCESS;
2702 static std::once_flag default_initialized_;
2704 static cl_int default_error_;
2711 static void makeDefault() {
2715#if defined(CL_HPP_ENABLE_EXCEPTIONS)
2723 cl_int err = ::clGetPlatformIDs(0,
nullptr, &n);
2724 if (err != CL_SUCCESS) {
2725 default_error_ = err;
2729 default_error_ = CL_INVALID_PLATFORM;
2733 vector<cl_platform_id> ids(n);
2734 err = ::clGetPlatformIDs(n, ids.data(),
nullptr);
2735 if (err != CL_SUCCESS) {
2736 default_error_ = err;
2742#if defined(CL_HPP_ENABLE_EXCEPTIONS)
2743 catch (cl::Error &e) {
2744 default_error_ = e.err();
2754 static void makeDefaultProvided(
const Platform &p) {
2759#ifdef CL_HPP_UNIT_TEST_ENABLE
2766 static void unitTestClearDefault() {
2781 explicit Platform(
const cl_platform_id &platform,
bool retainObject =
false) :
2782 detail::Wrapper<cl_type>(platform, retainObject) { }
2795 cl_int *errResult =
nullptr)
2797 std::call_once(default_initialized_, makeDefault);
2798 detail::errHandler(default_error_);
2799 if (errResult !=
nullptr) {
2800 *errResult = default_error_;
2814 std::call_once(default_initialized_, makeDefaultProvided, std::cref(default_platform));
2815 detail::errHandler(default_error_);
2820 template <
typename T>
2821 cl_int
getInfo(cl_platform_info name, T* param)
const
2823 return detail::errHandler(
2824 detail::getInfo(&::clGetPlatformInfo, object_, name, param),
2825 __GET_PLATFORM_INFO_ERR);
2829 template <cl_platform_info name>
typename
2834 detail::cl_platform_info, name>::param_type param;
2835 cl_int result =
getInfo(name, ¶m);
2836 if (err !=
nullptr) {
2847 cl_device_type type,
2848 vector<Device>* devices)
const
2851 if( devices ==
nullptr ) {
2852 return detail::errHandler(CL_INVALID_ARG_VALUE, __GET_DEVICE_IDS_ERR);
2854 cl_int err = ::clGetDeviceIDs(object_, type, 0,
nullptr, &n);
2855 if (err != CL_SUCCESS && err != CL_DEVICE_NOT_FOUND) {
2856 return detail::errHandler(err, __GET_DEVICE_IDS_ERR);
2859 vector<cl_device_id> ids(n);
2861 err = ::clGetDeviceIDs(object_, type, n, ids.data(),
nullptr);
2862 if (err != CL_SUCCESS) {
2863 return detail::errHandler(err, __GET_DEVICE_IDS_ERR);
2872 devices->resize(ids.size());
2876 for (size_type i = 0; i < ids.size(); i++) {
2877 (*devices)[i] =
Device(ids[i],
true);
2883#if defined(CL_HPP_USE_DX_INTEROP)
2908 cl_d3d10_device_source_khr d3d_device_source,
2910 cl_d3d10_device_set_khr d3d_device_set,
2911 vector<Device>* devices)
const
2913 typedef CL_API_ENTRY cl_int (CL_API_CALL *PFN_clGetDeviceIDsFromD3D10KHR)(
2914 cl_platform_id platform,
2915 cl_d3d10_device_source_khr d3d_device_source,
2917 cl_d3d10_device_set_khr d3d_device_set,
2918 cl_uint num_entries,
2919 cl_device_id * devices,
2920 cl_uint* num_devices);
2922 if( devices ==
nullptr ) {
2923 return detail::errHandler(CL_INVALID_ARG_VALUE, __GET_DEVICE_IDS_ERR);
2926 static PFN_clGetDeviceIDsFromD3D10KHR pfn_clGetDeviceIDsFromD3D10KHR =
nullptr;
2927#if CL_HPP_TARGET_OPENCL_VERSION >= 120
2928 CL_HPP_INIT_CL_EXT_FCN_PTR_PLATFORM_(object_, clGetDeviceIDsFromD3D10KHR);
2930#if CL_HPP_MINIMUM_OPENCL_VERSION < 120
2931 CL_HPP_INIT_CL_EXT_FCN_PTR_(clGetDeviceIDsFromD3D10KHR);
2935 cl_int err = pfn_clGetDeviceIDsFromD3D10KHR(
2943 if (err != CL_SUCCESS) {
2944 return detail::errHandler(err, __GET_DEVICE_IDS_ERR);
2947 vector<cl_device_id> ids(n);
2948 err = pfn_clGetDeviceIDsFromD3D10KHR(
2956 if (err != CL_SUCCESS) {
2957 return detail::errHandler(err, __GET_DEVICE_IDS_ERR);
2965 devices->resize(ids.size());
2969 for (size_type i = 0; i < ids.size(); i++) {
2970 (*devices)[i] = Device(ids[i],
true);
2982 vector<Platform>* platforms)
2986 if( platforms ==
nullptr ) {
2987 return detail::errHandler(CL_INVALID_ARG_VALUE, __GET_PLATFORM_IDS_ERR);
2990 cl_int err = ::clGetPlatformIDs(0,
nullptr, &n);
2991 if (err != CL_SUCCESS) {
2992 return detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
2995 vector<cl_platform_id> ids(n);
2996 err = ::clGetPlatformIDs(n, ids.data(),
nullptr);
2997 if (err != CL_SUCCESS) {
2998 return detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
3002 platforms->resize(ids.size());
3005 for (size_type i = 0; i < ids.size(); i++) {
3006 (*platforms)[i] =
Platform(ids[i]);
3020 Platform default_platform = Platform::getDefault(&err);
3022 *platform = default_platform;
3036 cl_int * errResult =
nullptr)
3039 Platform default_platform = Platform::getDefault(&err);
3043 return default_platform;
3046#if CL_HPP_TARGET_OPENCL_VERSION >= 120
3051 return ::clUnloadPlatformCompiler(object_);
3056#if CL_HPP_TARGET_OPENCL_VERSION >= 120
3059 vector<Device>* devices)
3062 cl_int err = clCreateSubDevices(object_, properties, 0,
nullptr, &n);
3063 if (err != CL_SUCCESS)
3065 return detail::errHandler(err, __CREATE_SUB_DEVICES_ERR);
3068 vector<cl_device_id> ids(n);
3069 err = clCreateSubDevices(object_, properties, n, ids.data(),
nullptr);
3070 if (err != CL_SUCCESS)
3072 return detail::errHandler(err, __CREATE_SUB_DEVICES_ERR);
3079 devices->resize(ids.size());
3083 for (size_type i = 0; i < ids.size(); i++)
3087 (*devices)[i] =
Device(ids[i],
false);
3095#if defined(cl_ext_device_fission)
3098 vector<Device>* devices)
3100#if CL_HPP_TARGET_OPENCL_VERSION >= 120
3102 cl_platform_id platform = device.getInfo<CL_DEVICE_PLATFORM>()();
3103 CL_HPP_INIT_CL_EXT_FCN_PTR_PLATFORM_(platform, clCreateSubDevicesEXT);
3105#if CL_HPP_MINIMUM_OPENCL_VERSION < 120
3106 CL_HPP_INIT_CL_EXT_FCN_PTR_(clCreateSubDevicesEXT);
3110 cl_int err = pfn_clCreateSubDevicesEXT(object_, properties, 0,
nullptr, &n);
3111 if (err != CL_SUCCESS)
3113 return detail::errHandler(err, __CREATE_SUB_DEVICES_ERR);
3116 vector<cl_device_id> ids(n);
3118 pfn_clCreateSubDevicesEXT(object_, properties, n, ids.data(),
nullptr);
3119 if (err != CL_SUCCESS)
3121 return detail::errHandler(err, __CREATE_SUB_DEVICES_ERR);
3127 devices->resize(ids.size());
3131 for (size_type i = 0; i < ids.size(); i++)
3135 (*devices)[i] =
Device(ids[i],
false);
3143CL_HPP_DEFINE_STATIC_MEMBER_ std::once_flag Platform::default_initialized_;
3144CL_HPP_DEFINE_STATIC_MEMBER_ Platform Platform::default_;
3145CL_HPP_DEFINE_STATIC_MEMBER_ cl_int Platform::default_error_ = CL_SUCCESS;
3151#if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
3156inline CL_API_PREFIX__VERSION_1_1_DEPRECATED cl_int
3161 return ::clUnloadCompiler();
3166#if defined(cl_ext_image_requirements_info)
3167enum ImageRequirementsInfoExt : cl_image_requirements_info_ext
3169 RowPitchAlign = CL_IMAGE_REQUIREMENTS_ROW_PITCH_ALIGNMENT_EXT,
3170 BaseAddAlign = CL_IMAGE_REQUIREMENTS_BASE_ADDRESS_ALIGNMENT_EXT,
3171 Size = CL_IMAGE_REQUIREMENTS_SIZE_EXT,
3172 MaxWidth = CL_IMAGE_REQUIREMENTS_MAX_WIDTH_EXT,
3173 MaxHeight = CL_IMAGE_REQUIREMENTS_MAX_HEIGHT_EXT,
3174 MaxDepth = CL_IMAGE_REQUIREMENTS_MAX_DEPTH_EXT,
3175 MaxArraySize = CL_IMAGE_REQUIREMENTS_MAX_ARRAY_SIZE_EXT,
3176#if defined(cl_ext_image_from_buffer)
3177 SlicePitchAlign = CL_IMAGE_REQUIREMENTS_SLICE_PITCH_ALIGNMENT_EXT,
3196 static std::once_flag default_initialized_;
3198 static cl_int default_error_;
3205 static void makeDefault() {
3209#if defined(CL_HPP_ENABLE_EXCEPTIONS)
3213#if !defined(__APPLE__) && !defined(__MACOS)
3214 const Platform &p = Platform::getDefault();
3215 cl_platform_id defaultPlatform = p();
3216 cl_context_properties properties[3] = {
3217 CL_CONTEXT_PLATFORM, (cl_context_properties)defaultPlatform, 0
3220 cl_context_properties *properties =
nullptr;
3224 CL_DEVICE_TYPE_DEFAULT,
3230#if defined(CL_HPP_ENABLE_EXCEPTIONS)
3231 catch (cl::Error &e) {
3232 default_error_ = e.err();
3243 static void makeDefaultProvided(
const Context &c) {
3247#if defined(cl_ext_image_requirements_info)
3248 struct ImageRequirementsInfo {
3250 ImageRequirementsInfo(cl_mem_flags f,
const cl_mem_properties* mem_properties,
const ImageFormat* format,
const cl_image_desc* desc)
3253 properties = mem_properties;
3254 image_format = format;
3258 cl_mem_flags flags = 0;
3259 const cl_mem_properties* properties;
3261 const cl_image_desc* image_desc;
3264 static cl_int getImageRequirementsInfoExtHelper(
const Context &context,
3265 const ImageRequirementsInfo &info,
3266 cl_image_requirements_info_ext param_name,
3267 size_type param_value_size,
3269 size_type* param_value_size_ret)
3272#if CL_HPP_TARGET_OPENCL_VERSION >= 120
3273 Device device = context.
getInfo<CL_CONTEXT_DEVICES>().at(0);
3274 cl_platform_id platform = device.getInfo<CL_DEVICE_PLATFORM>()();
3275 CL_HPP_INIT_CL_EXT_FCN_PTR_PLATFORM_(platform, clGetImageRequirementsInfoEXT);
3277 CL_HPP_INIT_CL_EXT_FCN_PTR_(clGetImageRequirementsInfoEXT);
3280 if (pfn_clGetImageRequirementsInfoEXT ==
nullptr) {
3281 return detail::errHandler(CL_INVALID_OPERATION, __GET_IMAGE_REQUIREMENT_INFO_EXT_ERR);
3284 return detail::errHandler(
3285 pfn_clGetImageRequirementsInfoEXT(context(), info.properties,
3286 info.flags, info.image_format, info.image_desc, param_name,
3287 param_value_size, param_value, param_value_size_ret),
3288 __GET_IMAGE_REQUIREMENT_INFO_EXT_ERR);
3293#ifdef CL_HPP_UNIT_TEST_ENABLE
3300 static void unitTestClearDefault() {
3310 const vector<Device>& devices,
3311 const cl_context_properties* properties =
nullptr,
3312 void (CL_CALLBACK * notifyFptr)(
3317 void* data =
nullptr,
3318 cl_int* err =
nullptr)
3322 size_type numDevices = devices.size();
3323 vector<cl_device_id> deviceIDs(numDevices);
3325 for( size_type deviceIndex = 0; deviceIndex < numDevices; ++deviceIndex ) {
3326 deviceIDs[deviceIndex] = (devices[deviceIndex])();
3329 object_ = ::clCreateContext(
3330 properties, (cl_uint) numDevices,
3332 notifyFptr, data, &error);
3334 detail::errHandler(error, __CREATE_CONTEXT_ERR);
3335 if (err !=
nullptr) {
3346 const cl_context_properties* properties =
nullptr,
3347 void (CL_CALLBACK * notifyFptr)(
3352 void* data =
nullptr,
3353 cl_int* err =
nullptr)
3357 cl_device_id deviceID = device();
3359 object_ = ::clCreateContext(
3362 notifyFptr, data, &error);
3364 detail::errHandler(error, __CREATE_CONTEXT_ERR);
3365 if (err !=
nullptr) {
3375 cl_device_type type,
3376 const cl_context_properties* properties =
nullptr,
3377 void (CL_CALLBACK * notifyFptr)(
3382 void* data =
nullptr,
3383 cl_int* err =
nullptr)
3387#if !defined(__APPLE__) && !defined(__MACOS)
3388 cl_context_properties prop[4] = {CL_CONTEXT_PLATFORM, 0, 0, 0 };
3390 if (properties ==
nullptr) {
3392 vector<Platform> platforms;
3393 error = Platform::get(&platforms);
3394 if (error != CL_SUCCESS) {
3395 detail::errHandler(error, __CREATE_CONTEXT_FROM_TYPE_ERR);
3396 if (err !=
nullptr) {
3403 cl_context_properties platform_id = 0;
3404 for (
unsigned int i = 0; i < platforms.size(); i++) {
3406 vector<Device> devices;
3408#if defined(CL_HPP_ENABLE_EXCEPTIONS)
3412 error = platforms[i].getDevices(type, &devices);
3414#if defined(CL_HPP_ENABLE_EXCEPTIONS)
3415 }
catch (cl::Error& e) {
3423 if (error != CL_SUCCESS && error != CL_DEVICE_NOT_FOUND) {
3424 detail::errHandler(error, __CREATE_CONTEXT_FROM_TYPE_ERR);
3425 if (err !=
nullptr) {
3430 if (devices.size() > 0) {
3431 platform_id = (cl_context_properties)platforms[i]();
3436 if (platform_id == 0) {
3437 detail::errHandler(CL_DEVICE_NOT_FOUND, __CREATE_CONTEXT_FROM_TYPE_ERR);
3438 if (err !=
nullptr) {
3439 *err = CL_DEVICE_NOT_FOUND;
3444 prop[1] = platform_id;
3445 properties = &prop[0];
3448 object_ = ::clCreateContextFromType(
3449 properties, type, notifyFptr, data, &error);
3451 detail::errHandler(error, __CREATE_CONTEXT_FROM_TYPE_ERR);
3452 if (err !=
nullptr) {
3464 std::call_once(default_initialized_, makeDefault);
3465 detail::errHandler(default_error_);
3466 if (err !=
nullptr) {
3467 *err = default_error_;
3481 std::call_once(default_initialized_, makeDefaultProvided, std::cref(default_context));
3482 detail::errHandler(default_error_);
3494 explicit Context(
const cl_context& context,
bool retainObject =
false) :
3495 detail::Wrapper<cl_type>(context, retainObject) { }
3509 template <
typename T>
3510 cl_int
getInfo(cl_context_info name, T* param)
const
3512 return detail::errHandler(
3513 detail::getInfo(&::clGetContextInfo, object_, name, param),
3514 __GET_CONTEXT_INFO_ERR);
3518 template <cl_context_info name>
typename
3523 detail::cl_context_info, name>::param_type param;
3524 cl_int result =
getInfo(name, ¶m);
3525 if (err !=
nullptr) {
3537 cl_mem_object_type type,
3538 vector<ImageFormat>* formats)
const
3546 cl_int err = ::clGetSupportedImageFormats(
3553 if (err != CL_SUCCESS) {
3554 return detail::errHandler(err, __GET_SUPPORTED_IMAGE_FORMATS_ERR);
3557 if (numEntries > 0) {
3558 vector<ImageFormat> value(numEntries);
3559 err = ::clGetSupportedImageFormats(
3564 (cl_image_format*)value.data(),
3566 if (err != CL_SUCCESS) {
3567 return detail::errHandler(err, __GET_SUPPORTED_IMAGE_FORMATS_ERR);
3570 formats->assign(value.begin(), value.end());
3580#if defined(cl_ext_image_requirements_info)
3581 template <
typename T>
3582 cl_int getImageRequirementsInfoExt(cl_image_requirements_info_ext name,
3584 cl_mem_flags flags = 0,
3585 const cl_mem_properties* properties =
nullptr,
3587 const cl_image_desc* image_desc =
nullptr)
const
3589 ImageRequirementsInfo imageInfo = {flags, properties, image_format, image_desc};
3591 return detail::errHandler(
3593 Context::getImageRequirementsInfoExtHelper, *
this, imageInfo, name, param),
3594 __GET_IMAGE_REQUIREMENT_INFO_EXT_ERR);
3597 template <cl_image_requirements_info_ext type>
typename
3598 detail::param_traits<detail::cl_image_requirements_info_ext, type>::param_type
3599 getImageRequirementsInfoExt(cl_mem_flags flags = 0,
3600 const cl_mem_properties* properties =
nullptr,
3601 const ImageFormat* image_format =
nullptr,
3602 const cl_image_desc* image_desc =
nullptr,
3603 cl_int* err =
nullptr)
const
3605 typename detail::param_traits<
3606 detail::cl_image_requirements_info_ext, type>::param_type param;
3607 cl_int result = getImageRequirementsInfoExt(type, ¶m, flags, properties, image_format, image_desc);
3608 if (err !=
nullptr) {
3615#if CL_HPP_TARGET_OPENCL_VERSION >= 300
3627 void (CL_CALLBACK * pfn_notify)(cl_context,
void *),
3628 void * user_data =
nullptr)
3630 return detail::errHandler(
3631 ::clSetContextDestructorCallback(
3635 __SET_CONTEXT_DESCTRUCTOR_CALLBACK_ERR);
3640inline void Device::makeDefault()
3645#if defined(CL_HPP_ENABLE_EXCEPTIONS)
3652 detail::errHandler(error, __CREATE_CONTEXT_ERR);
3654 if (error != CL_SUCCESS) {
3655 default_error_ = error;
3658 default_ = context.
getInfo<CL_CONTEXT_DEVICES>()[0];
3659 default_error_ = CL_SUCCESS;
3662#if defined(CL_HPP_ENABLE_EXCEPTIONS)
3663 catch (cl::Error &e) {
3664 default_error_ = e.err();
3669CL_HPP_DEFINE_STATIC_MEMBER_ std::once_flag Context::default_initialized_;
3670CL_HPP_DEFINE_STATIC_MEMBER_ Context Context::default_;
3671CL_HPP_DEFINE_STATIC_MEMBER_ cl_int Context::default_error_ = CL_SUCCESS;
3685 Event() : detail::Wrapper<cl_type>() { }
3695 explicit Event(
const cl_event& event,
bool retainObject =
false) :
3696 detail::Wrapper<cl_type>(event, retainObject) { }
3710 template <
typename T>
3711 cl_int
getInfo(cl_event_info name, T* param)
const
3713 return detail::errHandler(
3714 detail::getInfo(&::clGetEventInfo, object_, name, param),
3715 __GET_EVENT_INFO_ERR);
3719 template <cl_event_info name>
typename
3724 detail::cl_event_info, name>::param_type param;
3725 cl_int result =
getInfo(name, ¶m);
3726 if (err !=
nullptr) {
3733 template <
typename T>
3736 return detail::errHandler(detail::getInfo(
3737 &::clGetEventProfilingInfo, object_, name, param),
3738 __GET_EVENT_PROFILE_INFO_ERR);
3742 template <cl_profiling_info name>
typename
3747 detail::cl_profiling_info, name>::param_type param;
3749 if (err !=
nullptr) {
3761 return detail::errHandler(
3762 ::clWaitForEvents(1, &object_),
3763 __WAIT_FOR_EVENTS_ERR);
3766#if CL_HPP_TARGET_OPENCL_VERSION >= 110
3773 void (CL_CALLBACK * pfn_notify)(cl_event, cl_int,
void *),
3774 void * user_data =
nullptr)
3776 return detail::errHandler(
3777 ::clSetEventCallback(
3782 __SET_EVENT_CALLBACK_ERR);
3793 static_assert(
sizeof(
cl::Event) ==
sizeof(cl_event),
3794 "Size of cl::Event must be equal to size of cl_event");
3796 return detail::errHandler(
3798 (cl_uint) events.size(), (events.size() > 0) ? (cl_event*)&events.front() :
nullptr),
3799 __WAIT_FOR_EVENTS_ERR);
3803#if CL_HPP_TARGET_OPENCL_VERSION >= 110
3817 cl_int * err =
nullptr)
3820 object_ = ::clCreateUserEvent(
3824 detail::errHandler(error, __CREATE_USER_EVENT_ERR);
3825 if (err !=
nullptr) {
3839 return detail::errHandler(
3840 ::clSetUserEventStatus(object_,status),
3841 __SET_USER_EVENT_STATUS_ERR);
3851WaitForEvents(
const vector<Event>& events)
3853 return detail::errHandler(
3855 (cl_uint) events.size(), (events.size() > 0) ? (cl_event*)&events.front() : nullptr),
3856 __WAIT_FOR_EVENTS_ERR);
3884 explicit Memory(
const cl_mem& memory,
bool retainObject) :
3885 detail::Wrapper<cl_type>(memory, retainObject) { }
3899 template <
typename T>
3902 return detail::errHandler(
3903 detail::getInfo(&::clGetMemObjectInfo, object_, name, param),
3904 __GET_MEM_OBJECT_INFO_ERR);
3908 template <cl_mem_info name>
typename
3913 detail::cl_mem_info, name>::param_type param;
3914 cl_int result =
getInfo(name, ¶m);
3915 if (err !=
nullptr) {
3921#if CL_HPP_TARGET_OPENCL_VERSION >= 110
3936 void (CL_CALLBACK * pfn_notify)(cl_mem,
void *),
3937 void * user_data =
nullptr)
3939 return detail::errHandler(
3940 ::clSetMemObjectDestructorCallback(
3944 __SET_MEM_OBJECT_DESTRUCTOR_CALLBACK_ERR);
3952template<
typename IteratorType >
3953cl_int
copy( IteratorType startIterator, IteratorType endIterator,
cl::Buffer &buffer );
3954template<
typename IteratorType >
3955cl_int
copy(
const cl::Buffer &buffer, IteratorType startIterator, IteratorType endIterator );
3956template<
typename IteratorType >
3957cl_int
copy(
const CommandQueue &queue, IteratorType startIterator, IteratorType endIterator,
cl::Buffer &buffer );
3958template<
typename IteratorType >
3959cl_int
copy(
const CommandQueue &queue,
const cl::Buffer &buffer, IteratorType startIterator, IteratorType endIterator );
3962#if CL_HPP_TARGET_OPENCL_VERSION >= 200
3968 static cl_svm_mem_flags getSVMMemFlags()
3975template<
class Trait = detail::SVMTraitNull>
3979 static cl_svm_mem_flags getSVMMemFlags()
3981 return CL_MEM_READ_WRITE |
3982 Trait::getSVMMemFlags();
3986template<
class Trait = detail::SVMTraitNull>
3990 static cl_svm_mem_flags getSVMMemFlags()
3992 return CL_MEM_READ_ONLY |
3993 Trait::getSVMMemFlags();
3997template<
class Trait = detail::SVMTraitNull>
4001 static cl_svm_mem_flags getSVMMemFlags()
4003 return CL_MEM_WRITE_ONLY |
4004 Trait::getSVMMemFlags();
4008template<
class Trait = SVMTraitReadWrite<>>
4012 static cl_svm_mem_flags getSVMMemFlags()
4014 return Trait::getSVMMemFlags();
4018template<
class Trait = SVMTraitReadWrite<>>
4022 static cl_svm_mem_flags getSVMMemFlags()
4024 return CL_MEM_SVM_FINE_GRAIN_BUFFER |
4025 Trait::getSVMMemFlags();
4029template<
class Trait = SVMTraitReadWrite<>>
4033 static cl_svm_mem_flags getSVMMemFlags()
4036 CL_MEM_SVM_FINE_GRAIN_BUFFER |
4037 CL_MEM_SVM_ATOMICS |
4038 Trait::getSVMMemFlags();
4049 const vector<Event>* events =
nullptr,
4050 Event* event =
nullptr);
4063template<
typename T,
class SVMTrait>
4069 typedef T value_type;
4070 typedef value_type* pointer;
4071 typedef const value_type* const_pointer;
4072 typedef value_type& reference;
4073 typedef const value_type& const_reference;
4074 typedef std::size_t size_type;
4075 typedef std::ptrdiff_t difference_type;
4077 template<
typename U>
4080 typedef SVMAllocator<U, SVMTrait> other;
4083 template<
typename U,
typename V>
4087 context_(
Context::getDefault())
4097 SVMAllocator(
const SVMAllocator &other) :
4098 context_(other.context_)
4102 template<
typename U>
4103 SVMAllocator(
const SVMAllocator<U, SVMTrait> &other) :
4104 context_(other.context_)
4112 pointer address(reference r)
noexcept
4114 return std::addressof(r);
4117 const_pointer address(const_reference r)
noexcept
4119 return std::addressof(r);
4130 typename cl::SVMAllocator<void, SVMTrait>::const_pointer = 0,
4137 SVMTrait::getSVMMemFlags(),
4140 pointer retValue =
reinterpret_cast<pointer
>(
4142#if defined(CL_HPP_ENABLE_EXCEPTIONS)
4144 std::bad_alloc excep;
4150 if (map && !(SVMTrait::getSVMMemFlags() & CL_MEM_SVM_FINE_GRAIN_BUFFER)) {
4151 cl_int err =
enqueueMapSVM(retValue, CL_TRUE, CL_MAP_READ | CL_MAP_WRITE, size*
sizeof(T));
4152 if (err != CL_SUCCESS) {
4153 clSVMFree(context_(), retValue);
4155#if defined(CL_HPP_ENABLE_EXCEPTIONS)
4156 std::bad_alloc excep;
4166 void deallocate(pointer p, size_type)
4168 clSVMFree(context_(), p);
4177 size_type maxSize = std::numeric_limits<size_type>::max() /
sizeof(T);
4179 for (
const Device &d : context_.
getInfo<CL_CONTEXT_DEVICES>()) {
4182 static_cast<size_type
>(d.getInfo<CL_DEVICE_MAX_MEM_ALLOC_SIZE>()));
4188 template<
class U,
class... Args >
4189 void construct(U* p, Args&&... args)
4205 return (context_==rhs.context_);
4215template<
class SVMTrait>
4218 typedef void value_type;
4219 typedef value_type* pointer;
4220 typedef const value_type* const_pointer;
4222 template<
typename U>
4225 typedef SVMAllocator<U, SVMTrait> other;
4228 template<
typename U,
typename V>
4232#if !defined(CL_HPP_NO_STD_UNIQUE_PTR)
4235 template<
class Alloc>
4242 typedef typename std::allocator_traits<Alloc>::pointer pointer;
4244 Deleter(
const Alloc &alloc, size_type copies) : alloc_{ alloc }, copies_{ copies }
4248 void operator()(pointer ptr)
const {
4249 Alloc tmpAlloc{ alloc_ };
4250 std::allocator_traits<Alloc>::destroy(tmpAlloc, std::addressof(*ptr));
4251 std::allocator_traits<Alloc>::deallocate(tmpAlloc, ptr, copies_);
4262template <
class T,
class Alloc,
class... Args>
4265 Alloc alloc(alloc_);
4266 static const size_type copies = 1;
4271 T* tmp = std::allocator_traits<Alloc>::allocate(alloc, copies);
4273#if defined(CL_HPP_ENABLE_EXCEPTIONS)
4274 std::bad_alloc excep;
4281#if defined(CL_HPP_ENABLE_EXCEPTIONS)
4285 std::allocator_traits<Alloc>::construct(
4287 std::addressof(*tmp),
4288 std::forward<Args>(args)...);
4292#if defined(CL_HPP_ENABLE_EXCEPTIONS)
4293 catch (std::bad_alloc&)
4295 std::allocator_traits<Alloc>::deallocate(alloc, tmp, copies);
4301template<
class T,
class SVMTrait,
class... Args >
4302cl::pointer<T, detail::Deleter<SVMAllocator<T, SVMTrait>>> allocate_svm(Args... args)
4304 SVMAllocator<T, SVMTrait> alloc;
4305 return cl::allocate_pointer<T>(alloc, args...);
4308template<
class T,
class SVMTrait,
class... Args >
4309cl::pointer<T, detail::Deleter<SVMAllocator<T, SVMTrait>>> allocate_svm(
const cl::Context &c, Args... args)
4311 SVMAllocator<T, SVMTrait> alloc(c);
4312 return cl::allocate_pointer<T>(alloc, args...);
4358 void* host_ptr =
nullptr,
4359 cl_int* err =
nullptr)
4362 object_ = ::clCreateBuffer(context(), flags, size, host_ptr, &error);
4364 detail::errHandler(error, __CREATE_BUFFER_ERR);
4365 if (err !=
nullptr) {
4370#if CL_HPP_TARGET_OPENCL_VERSION >= 300
4383 const vector<cl_mem_properties>& properties,
4386 void* host_ptr =
nullptr,
4387 cl_int* err =
nullptr)
4391 if (properties.empty()) {
4392 object_ = ::clCreateBufferWithProperties(context(),
nullptr, flags,
4393 size, host_ptr, &error);
4396 object_ = ::clCreateBufferWithProperties(
4397 context(), properties.data(), flags, size, host_ptr, &error);
4400 detail::errHandler(error, __CREATE_BUFFER_ERR);
4401 if (err !=
nullptr) {
4419 void* host_ptr =
nullptr,
4420 cl_int* err =
nullptr) :
Buffer(
Context::getDefault(err), flags, size, host_ptr, err) { }
4422#if CL_HPP_TARGET_OPENCL_VERSION >= 300
4436 const vector<cl_mem_properties>& properties,
4439 void* host_ptr =
nullptr,
4440 cl_int* err =
nullptr) :
Buffer(
Context::getDefault(err), properties, flags, size, host_ptr, err) { }
4448 template<
typename IteratorType >
4450 IteratorType startIterator,
4451 IteratorType endIterator,
4453 bool useHostPtr =
false,
4454 cl_int* err =
nullptr)
4456 typedef typename std::iterator_traits<IteratorType>::value_type DataType;
4459 cl_mem_flags flags = 0;
4461 flags |= CL_MEM_READ_ONLY;
4464 flags |= CL_MEM_READ_WRITE;
4467 flags |= CL_MEM_USE_HOST_PTR;
4470 size_type size =
sizeof(DataType)*(endIterator - startIterator);
4475 object_ = ::clCreateBuffer(context(), flags, size,
const_cast<DataType*
>(&*startIterator), &error);
4477 object_ = ::clCreateBuffer(context(), flags, size, 0, &error);
4480 detail::errHandler(error, __CREATE_BUFFER_ERR);
4481 if (err !=
nullptr) {
4486 error =
cl::copy(startIterator, endIterator, *
this);
4487 detail::errHandler(error, __CREATE_BUFFER_ERR);
4488 if (err !=
nullptr) {
4499 template<
typename IteratorType >
4500 Buffer(
const Context &context, IteratorType startIterator, IteratorType endIterator,
4501 bool readOnly,
bool useHostPtr =
false, cl_int* err =
nullptr);
4507 template<
typename IteratorType >
4508 Buffer(
const CommandQueue &queue, IteratorType startIterator, IteratorType endIterator,
4509 bool readOnly,
bool useHostPtr =
false, cl_int* err =
nullptr);
4521 explicit Buffer(
const cl_mem& buffer,
bool retainObject =
false) :
4522 Memory(buffer, retainObject) { }
4535#if CL_HPP_TARGET_OPENCL_VERSION >= 110
4542 cl_buffer_create_type buffer_create_type,
4543 const void * buffer_create_info,
4544 cl_int * err =
nullptr)
4548 result.object_ = ::clCreateSubBuffer(
4555 detail::errHandler(error, __CREATE_SUBBUFFER_ERR);
4556 if (err !=
nullptr) {
4565#if defined (CL_HPP_USE_DX_INTEROP)
4574class BufferD3D10 :
public Buffer
4585 const Context& context,
4587 ID3D10Buffer* bufobj,
4588 cl_int * err =
nullptr) : pfn_clCreateFromD3D10BufferKHR(nullptr)
4590 typedef CL_API_ENTRY cl_mem (CL_API_CALL *PFN_clCreateFromD3D10BufferKHR)(
4591 cl_context context, cl_mem_flags flags, ID3D10Buffer* buffer,
4592 cl_int* errcode_ret);
4593 PFN_clCreateFromD3D10BufferKHR pfn_clCreateFromD3D10BufferKHR;
4594#if CL_HPP_TARGET_OPENCL_VERSION >= 120
4595 vector<cl_context_properties> props = context.getInfo<CL_CONTEXT_PROPERTIES>();
4596 cl_platform platform =
nullptr;
4597 for(
int i = 0; i < props.size(); ++i ) {
4598 if( props[i] == CL_CONTEXT_PLATFORM ) {
4599 platform = props[i+1];
4602 CL_HPP_INIT_CL_EXT_FCN_PTR_PLATFORM_(platform, clCreateFromD3D10BufferKHR);
4604#if CL_HPP_MINIMUM_OPENCL_VERSION < 120
4605 CL_HPP_INIT_CL_EXT_FCN_PTR_(clCreateFromD3D10BufferKHR);
4609 object_ = pfn_clCreateFromD3D10BufferKHR(
4616 detail::errHandler(error, __CREATE_GL_BUFFER_ERR);
4617 if (err !=
nullptr) {
4623 BufferD3D10() : Buffer() { }
4632 explicit BufferD3D10(
const cl_mem& buffer,
bool retainObject =
false) :
4633 Buffer(buffer, retainObject) { }
4639 BufferD3D10& operator = (
const cl_mem& rhs)
4667 cl_int * err =
nullptr)
4670 object_ = ::clCreateFromGLBuffer(
4676 detail::errHandler(error, __CREATE_GL_BUFFER_ERR);
4677 if (err !=
nullptr) {
4692 explicit BufferGL(
const cl_mem& buffer,
bool retainObject =
false) :
4693 Buffer(buffer, retainObject) { }
4708 cl_gl_object_type *type,
4709 cl_GLuint * gl_object_name)
4711 return detail::errHandler(
4712 ::clGetGLObjectInfo(object_,type,gl_object_name),
4713 __GET_GL_OBJECT_INFO_ERR);
4737 cl_int * err =
nullptr)
4740 object_ = ::clCreateFromGLRenderbuffer(
4746 detail::errHandler(error, __CREATE_GL_RENDER_BUFFER_ERR);
4747 if (err !=
nullptr) {
4763 Buffer(buffer, retainObject) { }
4778 cl_gl_object_type *type,
4779 cl_GLuint * gl_object_name)
4781 return detail::errHandler(
4782 ::clGetGLObjectInfo(object_,type,gl_object_name),
4783 __GET_GL_OBJECT_INFO_ERR);
4806 explicit Image(
const cl_mem& image,
bool retainObject =
false) :
4807 Memory(image, retainObject) { }
4822 template <
typename T>
4825 return detail::errHandler(
4826 detail::getInfo(&::clGetImageInfo, object_, name, param),
4827 __GET_IMAGE_INFO_ERR);
4831 template <cl_image_info name>
typename
4836 detail::cl_image_info, name>::param_type param;
4838 if (err !=
nullptr) {
4845#if CL_HPP_TARGET_OPENCL_VERSION >= 120
4864 void* host_ptr =
nullptr,
4865 cl_int* err =
nullptr)
4869 cl_image_desc desc = {};
4870 desc.image_type = CL_MEM_OBJECT_IMAGE1D;
4871 desc.image_width = width;
4873 object_ = ::clCreateImage(
4881 detail::errHandler(error, __CREATE_IMAGE_ERR);
4882 if (err !=
nullptr) {
4890#if CL_HPP_TARGET_OPENCL_VERSION >= 300
4902 cl_mem_flags flags,
ImageFormat format, size_type width,
4903 void *host_ptr =
nullptr, cl_int *err =
nullptr) {
4906 cl_image_desc desc = {};
4907 desc.image_type = CL_MEM_OBJECT_IMAGE1D;
4908 desc.image_width = width;
4910 if (properties.empty()) {
4911 object_ = ::clCreateImageWithProperties(
4912 context(),
nullptr, flags, &format, &desc, host_ptr, &error);
4915 ::clCreateImageWithProperties(context(), properties.data(), flags,
4916 &format, &desc, host_ptr, &error);
4919 detail::errHandler(error, __CREATE_IMAGE_ERR);
4920 if (err !=
nullptr) {
4933 explicit Image1D(
const cl_mem& image1D,
bool retainObject =
false) :
4934 Image(image1D, retainObject) { }
4961 cl_int* err =
nullptr)
4965 cl_image_desc desc = {};
4966 desc.image_type = CL_MEM_OBJECT_IMAGE1D_BUFFER;
4967 desc.image_width = width;
4968 desc.buffer = buffer();
4970 object_ = ::clCreateImage(
4978 detail::errHandler(error, __CREATE_IMAGE_ERR);
4979 if (err !=
nullptr) {
4986#if CL_HPP_TARGET_OPENCL_VERSION >= 300
4997 const vector<cl_mem_properties> &properties,
4998 cl_mem_flags flags,
ImageFormat format, size_type width,
4999 const Buffer &buffer, cl_int *err =
nullptr) {
5002 cl_image_desc desc = {};
5003 desc.image_type = CL_MEM_OBJECT_IMAGE1D_BUFFER;
5004 desc.image_width = width;
5005 desc.buffer = buffer();
5007 if (properties.empty()) {
5008 object_ = ::clCreateImageWithProperties(
5009 context(),
nullptr, flags, &format, &desc,
nullptr, &error);
5012 ::clCreateImageWithProperties(context(), properties.data(), flags,
5013 &format, &desc,
nullptr, &error);
5016 detail::errHandler(error, __CREATE_IMAGE_ERR);
5017 if (err !=
nullptr) {
5031 Image(image1D, retainObject) { }
5050 size_type arraySize,
5053 void* host_ptr =
nullptr,
5054 cl_int* err =
nullptr)
5058 cl_image_desc desc = {};
5059 desc.image_type = CL_MEM_OBJECT_IMAGE1D_ARRAY;
5060 desc.image_width = width;
5061 desc.image_array_size = arraySize;
5062 desc.image_row_pitch = rowPitch;
5064 object_ = ::clCreateImage(
5072 detail::errHandler(error, __CREATE_IMAGE_ERR);
5073 if (err !=
nullptr) {
5080#if CL_HPP_TARGET_OPENCL_VERSION >= 300
5092 const vector<cl_mem_properties> &properties,
5093 cl_mem_flags flags,
ImageFormat format, size_type arraySize,
5094 size_type width, size_type rowPitch = 0,
5095 void *host_ptr =
nullptr, cl_int *err =
nullptr) {
5098 cl_image_desc desc = {};
5099 desc.image_type = CL_MEM_OBJECT_IMAGE1D_ARRAY;
5100 desc.image_width = width;
5101 desc.image_array_size = arraySize;
5102 desc.image_row_pitch = rowPitch;
5104 if (properties.empty()) {
5105 object_ = ::clCreateImageWithProperties(
5106 context(),
nullptr, flags, &format, &desc, host_ptr, &error);
5109 ::clCreateImageWithProperties(context(), properties.data(), flags,
5110 &format, &desc, host_ptr, &error);
5113 detail::errHandler(error, __CREATE_IMAGE_ERR);
5114 if (err !=
nullptr) {
5127 explicit Image1DArray(
const cl_mem& imageArray,
bool retainObject =
false) :
5128 Image(imageArray, retainObject) { }
5161 size_type row_pitch = 0,
5162 void* host_ptr =
nullptr,
5163 cl_int* err =
nullptr)
5166 bool useCreateImage;
5168#if CL_HPP_TARGET_OPENCL_VERSION >= 120 && CL_HPP_MINIMUM_OPENCL_VERSION < 120
5171 cl_uint version = detail::getContextPlatformVersion(context());
5172 useCreateImage = (version >= 0x10002);
5174#elif CL_HPP_TARGET_OPENCL_VERSION >= 120
5175 useCreateImage =
true;
5177 useCreateImage =
false;
5180#if CL_HPP_TARGET_OPENCL_VERSION >= 120
5183 cl_image_desc desc = {};
5184 desc.image_type = CL_MEM_OBJECT_IMAGE2D;
5185 desc.image_width = width;
5186 desc.image_height = height;
5187 desc.image_row_pitch = row_pitch;
5189 object_ = ::clCreateImage(
5197 detail::errHandler(error, __CREATE_IMAGE_ERR);
5198 if (err !=
nullptr) {
5203#if CL_HPP_MINIMUM_OPENCL_VERSION < 120
5204 if (!useCreateImage)
5206 object_ = ::clCreateImage2D(
5207 context(), flags,&format, width, height, row_pitch, host_ptr, &error);
5209 detail::errHandler(error, __CREATE_IMAGE2D_ERR);
5210 if (err !=
nullptr) {
5217#if CL_HPP_TARGET_OPENCL_VERSION >= 120
5229 const Buffer &sourceBuffer,
5232 size_type row_pitch = 0,
5233 cl_int* err =
nullptr)
5237 cl_image_desc desc = {};
5238 desc.image_type = CL_MEM_OBJECT_IMAGE2D;
5239 desc.image_width = width;
5240 desc.image_height = height;
5241 desc.image_row_pitch = row_pitch;
5242 desc.buffer = sourceBuffer();
5244 object_ = ::clCreateImage(
5252 detail::errHandler(error, __CREATE_IMAGE_ERR);
5253 if (err !=
nullptr) {
5259#if CL_HPP_TARGET_OPENCL_VERSION >= 200
5274 cl_channel_order order,
5275 const Image &sourceImage,
5276 cl_int* err =
nullptr)
5281 size_type sourceWidth =
5282 sourceImage.getImageInfo<CL_IMAGE_WIDTH>();
5283 size_type sourceHeight =
5284 sourceImage.getImageInfo<CL_IMAGE_HEIGHT>();
5285 size_type sourceRowPitch =
5286 sourceImage.getImageInfo<CL_IMAGE_ROW_PITCH>();
5287 cl_uint sourceNumMIPLevels =
5288 sourceImage.getImageInfo<CL_IMAGE_NUM_MIP_LEVELS>();
5289 cl_uint sourceNumSamples =
5290 sourceImage.getImageInfo<CL_IMAGE_NUM_SAMPLES>();
5291 cl_image_format sourceFormat =
5292 sourceImage.getImageInfo<CL_IMAGE_FORMAT>();
5296 sourceFormat.image_channel_order = order;
5298 cl_image_desc desc = {};
5299 desc.image_type = CL_MEM_OBJECT_IMAGE2D;
5300 desc.image_width = sourceWidth;
5301 desc.image_height = sourceHeight;
5302 desc.image_row_pitch = sourceRowPitch;
5303 desc.num_mip_levels = sourceNumMIPLevels;
5304 desc.num_samples = sourceNumSamples;
5305 desc.buffer = sourceImage();
5307 object_ = ::clCreateImage(
5315 detail::errHandler(error, __CREATE_IMAGE_ERR);
5316 if (err !=
nullptr) {
5322#if CL_HPP_TARGET_OPENCL_VERSION >= 300
5334 cl_mem_flags flags,
ImageFormat format, size_type width,
5335 size_type height, size_type row_pitch = 0,
void *host_ptr =
nullptr,
5336 cl_int *err =
nullptr) {
5339 cl_image_desc desc = {};
5340 desc.image_type = CL_MEM_OBJECT_IMAGE2D;
5341 desc.image_width = width;
5342 desc.image_height = height;
5343 desc.image_row_pitch = row_pitch;
5345 if (properties.empty()) {
5346 object_ = ::clCreateImageWithProperties(
5347 context(),
nullptr, flags, &format, &desc, host_ptr, &error);
5350 ::clCreateImageWithProperties(context(), properties.data(), flags,
5351 &format, &desc, host_ptr, &error);
5354 detail::errHandler(error, __CREATE_IMAGE_ERR);
5355 if (err !=
nullptr) {
5371 size_type width, size_type height, size_type row_pitch = 0,
5372 cl_int *err =
nullptr) {
5375 cl_image_desc desc = {};
5376 desc.image_type = CL_MEM_OBJECT_IMAGE2D;
5377 desc.image_width = width;
5378 desc.image_height = height;
5379 desc.image_row_pitch = row_pitch;
5380 desc.buffer = buffer();
5382 if (properties.empty()) {
5383 object_ = ::clCreateImageWithProperties(
5384 context(),
nullptr, flags, &format, &desc,
nullptr, &error);
5387 ::clCreateImageWithProperties(context(), properties.data(), flags,
5388 &format, &desc,
nullptr, &error);
5391 detail::errHandler(error, __CREATE_IMAGE_ERR);
5392 if (err !=
nullptr) {
5409 explicit Image2D(
const cl_mem& image2D,
bool retainObject =
false) :
5410 Image(image2D, retainObject) { }
5424#if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
5448 cl_int * err =
nullptr)
5451 object_ = ::clCreateFromGLTexture2D(
5459 detail::errHandler(error, __CREATE_GL_TEXTURE_2D_ERR);
5460 if (err !=
nullptr) {
5476 explicit Image2DGL(
const cl_mem& image,
bool retainObject =
false) :
5477 Image2D(image, retainObject) { }
5485 Image2D::operator=(rhs);
5491} CL_API_SUFFIX__VERSION_1_1_DEPRECATED;
5494#if CL_HPP_TARGET_OPENCL_VERSION >= 120
5505 size_type arraySize,
5509 size_type slicePitch,
5510 void* host_ptr =
nullptr,
5511 cl_int* err =
nullptr)
5515 cl_image_desc desc = {};
5516 desc.image_type = CL_MEM_OBJECT_IMAGE2D_ARRAY;
5517 desc.image_width = width;
5518 desc.image_height = height;
5519 desc.image_array_size = arraySize;
5520 desc.image_row_pitch = rowPitch;
5521 desc.image_slice_pitch = slicePitch;
5523 object_ = ::clCreateImage(
5531 detail::errHandler(error, __CREATE_IMAGE_ERR);
5532 if (err !=
nullptr) {
5537#if CL_HPP_TARGET_OPENCL_VERSION >= 300
5549 const vector<cl_mem_properties> &properties,
5550 cl_mem_flags flags,
ImageFormat format, size_type arraySize,
5551 size_type width, size_type height, size_type rowPitch = 0,
5552 size_type slicePitch = 0,
void *host_ptr =
nullptr,
5553 cl_int *err =
nullptr) {
5556 cl_image_desc desc = {};
5557 desc.image_type = CL_MEM_OBJECT_IMAGE2D_ARRAY;
5558 desc.image_width = width;
5559 desc.image_height = height;
5560 desc.image_array_size = arraySize;
5561 desc.image_row_pitch = rowPitch;
5562 desc.image_slice_pitch = slicePitch;
5564 if (properties.empty()) {
5565 object_ = ::clCreateImageWithProperties(
5566 context(),
nullptr, flags, &format, &desc, host_ptr, &error);
5569 ::clCreateImageWithProperties(context(), properties.data(), flags,
5570 &format, &desc, host_ptr, &error);
5573 detail::errHandler(error, __CREATE_IMAGE_ERR);
5574 if (err !=
nullptr) {
5589 explicit Image2DArray(
const cl_mem& imageArray,
bool retainObject =
false) :
Image(imageArray, retainObject) { }
5620 size_type row_pitch = 0,
5621 size_type slice_pitch = 0,
5622 void* host_ptr =
nullptr,
5623 cl_int* err =
nullptr)
5626 bool useCreateImage;
5628#if CL_HPP_TARGET_OPENCL_VERSION >= 120 && CL_HPP_MINIMUM_OPENCL_VERSION < 120
5631 cl_uint version = detail::getContextPlatformVersion(context());
5632 useCreateImage = (version >= 0x10002);
5634#elif CL_HPP_TARGET_OPENCL_VERSION >= 120
5635 useCreateImage =
true;
5637 useCreateImage =
false;
5640#if CL_HPP_TARGET_OPENCL_VERSION >= 120
5643 cl_image_desc desc = {};
5644 desc.image_type = CL_MEM_OBJECT_IMAGE3D;
5645 desc.image_width = width;
5646 desc.image_height = height;
5647 desc.image_depth = depth;
5648 desc.image_row_pitch = row_pitch;
5649 desc.image_slice_pitch = slice_pitch;
5651 object_ = ::clCreateImage(
5659 detail::errHandler(error, __CREATE_IMAGE_ERR);
5660 if (err !=
nullptr) {
5665#if CL_HPP_MINIMUM_OPENCL_VERSION < 120
5666 if (!useCreateImage)
5668 object_ = ::clCreateImage3D(
5669 context(), flags, &format, width, height, depth, row_pitch,
5670 slice_pitch, host_ptr, &error);
5672 detail::errHandler(error, __CREATE_IMAGE3D_ERR);
5673 if (err !=
nullptr) {
5680#if CL_HPP_TARGET_OPENCL_VERSION >= 300
5692 cl_mem_flags flags,
ImageFormat format, size_type width,
5693 size_type height, size_type depth, size_type row_pitch = 0,
5694 size_type slice_pitch = 0,
void *host_ptr =
nullptr,
5695 cl_int *err =
nullptr) {
5698 cl_image_desc desc = {};
5699 desc.image_type = CL_MEM_OBJECT_IMAGE3D;
5700 desc.image_width = width;
5701 desc.image_height = height;
5702 desc.image_depth = depth;
5703 desc.image_row_pitch = row_pitch;
5704 desc.image_slice_pitch = slice_pitch;
5706 if (properties.empty()) {
5707 object_ = ::clCreateImageWithProperties(
5708 context(),
nullptr, flags, &format, &desc, host_ptr, &error);
5711 ::clCreateImageWithProperties(context(), properties.data(), flags,
5712 &format, &desc, host_ptr, &error);
5715 detail::errHandler(error, __CREATE_IMAGE_ERR);
5716 if (err !=
nullptr) {
5732 explicit Image3D(
const cl_mem& image3D,
bool retainObject =
false) :
5733 Image(image3D, retainObject) { }
5747#if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
5770 cl_int * err =
nullptr)
5773 object_ = ::clCreateFromGLTexture3D(
5781 detail::errHandler(error, __CREATE_GL_TEXTURE_3D_ERR);
5782 if (err !=
nullptr) {
5797 explicit Image3DGL(
const cl_mem& image,
bool retainObject =
false) :
5798 Image3D(image, retainObject) { }
5813#if CL_HPP_TARGET_OPENCL_VERSION >= 120
5829 cl_int * err =
nullptr)
5832 object_ = ::clCreateFromGLTexture(
5840 detail::errHandler(error, __CREATE_GL_TEXTURE_ERR);
5841 if (err !=
nullptr) {
5855 explicit ImageGL(
const cl_mem& image,
bool retainObject =
false) :
5856 Image(image, retainObject) { }
5858 ImageGL& operator = (
const cl_mem& rhs)
5869#if CL_HPP_TARGET_OPENCL_VERSION >= 200
5891 cl_uint packet_size,
5892 cl_uint max_packets,
5893 cl_int* err =
nullptr)
5897 cl_mem_flags flags = CL_MEM_READ_WRITE | CL_MEM_HOST_NO_ACCESS;
5898 object_ = ::clCreatePipe(context(), flags, packet_size, max_packets,
nullptr, &error);
5900 detail::errHandler(error, __CREATE_PIPE_ERR);
5901 if (err !=
nullptr) {
5915 cl_uint packet_size,
5916 cl_uint max_packets,
5917 cl_int* err =
nullptr)
5923 cl_mem_flags flags = CL_MEM_READ_WRITE | CL_MEM_HOST_NO_ACCESS;
5924 object_ = ::clCreatePipe(context(), flags, packet_size, max_packets,
nullptr, &error);
5926 detail::errHandler(error, __CREATE_PIPE_ERR);
5927 if (err !=
nullptr) {
5942 explicit Pipe(
const cl_mem& pipe,
bool retainObject =
false) :
5943 Memory(pipe, retainObject) {