Newer
Older
#include "wrap_cl.hpp"
using namespace pyopencl;
namespace
{
// {{{ 'fake' constant scopes
class status_code { };
class platform_info { };
class device_type { };
class device_info { };
class device_fp_config { };
class device_mem_cache_type { };
class device_local_mem_type { };
class device_exec_capabilities { };
class command_queue_properties { };
class context_info { };
class gl_context_info { };
class context_properties { };
class command_queue_info { };
class channel_order { };
class channel_type { };
class mem_object_type { };
class mem_info { };
class image_info { };
class addressing_mode { };
class filter_mode { };
class sampler_info { };
class map_flags { };
class program_info { };
class program_build_info { };
class program_binary_type { };
class build_status { };
class kernel_info { };
class kernel_arg_info { };
class kernel_arg_address_qualifier { };
class kernel_arg_access_qualifier { };
class kernel_work_group_info { };
class event_info { };
class command_type { };
class command_execution_status { };
class profiling_info { };
class buffer_create_type { };
class mem_migration_flags { };
class device_partition_property { };
class device_affinity_domain { };
class gl_object_type { };
class gl_texture_info { };
// }}}
}
void pyopencl_expose_constants(py::module &m)
static py::exception<pyopencl::error> CL##NAME(m, #NAME, BASE);
DECLARE_EXC(MemoryError, CLError.ptr());
DECLARE_EXC(LogicError, CLError.ptr());
DECLARE_EXC(RuntimeError, CLError.ptr());
py::register_exception_translator(
[](std::exception_ptr p)
{
try
{
if (p) std::rethrow_exception(p);
}
catch (pyopencl::error &err)
{
py::object err_obj = py::cast(err);
if (err.code() == CL_MEM_OBJECT_ALLOCATION_FAILURE)
PyErr_SetObject(CLMemoryError.ptr(), err_obj.ptr());
else if (err.code() <= CL_INVALID_VALUE)
PyErr_SetObject(CLLogicError.ptr(), err_obj.ptr());
else if (err.code() > CL_INVALID_VALUE && err.code() < CL_SUCCESS)
PyErr_SetObject(CLRuntimeError.ptr(), err_obj.ptr());
else
PyErr_SetObject(CLError.ptr(), err_obj.ptr());
}
});
}
// }}}
// {{{ constants
#define ADD_ATTR(PREFIX, NAME) \
cls.attr(#NAME) = CL_##PREFIX##NAME
#define ADD_ATTR_SUFFIX(PREFIX, NAME, SUFFIX) \
cls.attr(#NAME) = CL_##PREFIX##NAME##SUFFIX
{
typedef error cls;
py::class_<error> (m, "_error")
.DEF_SIMPLE_METHOD(routine)
.DEF_SIMPLE_METHOD(code)
.DEF_SIMPLE_METHOD(what)
;
}
{
py::class_<status_code> cls(m, "status_code");
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
ADD_ATTR(, SUCCESS);
ADD_ATTR(, DEVICE_NOT_FOUND);
ADD_ATTR(, DEVICE_NOT_AVAILABLE);
#if !(defined(CL_PLATFORM_NVIDIA) && CL_PLATFORM_NVIDIA == 0x3001)
ADD_ATTR(, COMPILER_NOT_AVAILABLE);
#endif
ADD_ATTR(, MEM_OBJECT_ALLOCATION_FAILURE);
ADD_ATTR(, OUT_OF_RESOURCES);
ADD_ATTR(, OUT_OF_HOST_MEMORY);
ADD_ATTR(, PROFILING_INFO_NOT_AVAILABLE);
ADD_ATTR(, MEM_COPY_OVERLAP);
ADD_ATTR(, IMAGE_FORMAT_MISMATCH);
ADD_ATTR(, IMAGE_FORMAT_NOT_SUPPORTED);
ADD_ATTR(, BUILD_PROGRAM_FAILURE);
ADD_ATTR(, MAP_FAILURE);
ADD_ATTR(, INVALID_VALUE);
ADD_ATTR(, INVALID_DEVICE_TYPE);
ADD_ATTR(, INVALID_PLATFORM);
ADD_ATTR(, INVALID_DEVICE);
ADD_ATTR(, INVALID_CONTEXT);
ADD_ATTR(, INVALID_QUEUE_PROPERTIES);
ADD_ATTR(, INVALID_COMMAND_QUEUE);
ADD_ATTR(, INVALID_HOST_PTR);
ADD_ATTR(, INVALID_MEM_OBJECT);
ADD_ATTR(, INVALID_IMAGE_FORMAT_DESCRIPTOR);
ADD_ATTR(, INVALID_IMAGE_SIZE);
ADD_ATTR(, INVALID_SAMPLER);
ADD_ATTR(, INVALID_BINARY);
ADD_ATTR(, INVALID_BUILD_OPTIONS);
ADD_ATTR(, INVALID_PROGRAM);
ADD_ATTR(, INVALID_PROGRAM_EXECUTABLE);
ADD_ATTR(, INVALID_KERNEL_NAME);
ADD_ATTR(, INVALID_KERNEL_DEFINITION);
ADD_ATTR(, INVALID_KERNEL);
ADD_ATTR(, INVALID_ARG_INDEX);
ADD_ATTR(, INVALID_ARG_VALUE);
ADD_ATTR(, INVALID_ARG_SIZE);
ADD_ATTR(, INVALID_KERNEL_ARGS);
ADD_ATTR(, INVALID_WORK_DIMENSION);
ADD_ATTR(, INVALID_WORK_GROUP_SIZE);
ADD_ATTR(, INVALID_WORK_ITEM_SIZE);
ADD_ATTR(, INVALID_GLOBAL_OFFSET);
ADD_ATTR(, INVALID_EVENT_WAIT_LIST);
ADD_ATTR(, INVALID_EVENT);
ADD_ATTR(, INVALID_OPERATION);
ADD_ATTR(, INVALID_GL_OBJECT);
ADD_ATTR(, INVALID_BUFFER_SIZE);
ADD_ATTR(, INVALID_MIP_LEVEL);
#if defined(cl_khr_icd) && (cl_khr_icd >= 1)
ADD_ATTR(, PLATFORM_NOT_FOUND_KHR);
#endif
#if defined(cl_khr_gl_sharing) && (cl_khr_gl_sharing >= 1)
ADD_ATTR(, INVALID_GL_SHAREGROUP_REFERENCE_KHR);
#endif
#if PYOPENCL_CL_VERSION >= 0x1010
ADD_ATTR(, MISALIGNED_SUB_BUFFER_OFFSET);
ADD_ATTR(, EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST);
ADD_ATTR(, INVALID_GLOBAL_WORK_SIZE);
#endif
#if PYOPENCL_CL_VERSION >= 0x1020
ADD_ATTR(, COMPILE_PROGRAM_FAILURE);
ADD_ATTR(, LINKER_NOT_AVAILABLE);
ADD_ATTR(, LINK_PROGRAM_FAILURE);
ADD_ATTR(, DEVICE_PARTITION_FAILED);
ADD_ATTR(, KERNEL_ARG_INFO_NOT_AVAILABLE);
ADD_ATTR(, INVALID_IMAGE_DESCRIPTOR);
ADD_ATTR(, INVALID_COMPILER_OPTIONS);
ADD_ATTR(, INVALID_LINKER_OPTIONS);
ADD_ATTR(, INVALID_DEVICE_PARTITION_COUNT);
#endif
#if PYOPENCL_CL_VERSION >= 0x2000
ADD_ATTR(, INVALID_PIPE_SIZE);
ADD_ATTR(, INVALID_DEVICE_QUEUE);
#endif
#if defined(cl_ext_device_fission) && defined(PYOPENCL_USE_DEVICE_FISSION)
ADD_ATTR(, DEVICE_PARTITION_FAILED_EXT);
ADD_ATTR(, INVALID_PARTITION_COUNT_EXT);
ADD_ATTR(, INVALID_PARTITION_NAME_EXT);
#endif
}
{
py::class_<platform_info> cls(m, "platform_info");
ADD_ATTR(PLATFORM_, PROFILE);
ADD_ATTR(PLATFORM_, VERSION);
ADD_ATTR(PLATFORM_, NAME);
ADD_ATTR(PLATFORM_, VENDOR);
#if !(defined(CL_PLATFORM_NVIDIA) && CL_PLATFORM_NVIDIA == 0x3001)
ADD_ATTR(PLATFORM_, EXTENSIONS);
#endif
}
{
py::class_<device_type> cls(m, "device_type");
ADD_ATTR(DEVICE_TYPE_, DEFAULT);
ADD_ATTR(DEVICE_TYPE_, CPU);
ADD_ATTR(DEVICE_TYPE_, GPU);
ADD_ATTR(DEVICE_TYPE_, ACCELERATOR);
#if PYOPENCL_CL_VERSION >= 0x1020
ADD_ATTR(DEVICE_TYPE_, CUSTOM);
#endif
ADD_ATTR(DEVICE_TYPE_, ALL);
}
{
py::class_<device_info> cls(m, "device_info");
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
ADD_ATTR(DEVICE_, TYPE);
ADD_ATTR(DEVICE_, VENDOR_ID);
ADD_ATTR(DEVICE_, MAX_COMPUTE_UNITS);
ADD_ATTR(DEVICE_, MAX_WORK_ITEM_DIMENSIONS);
ADD_ATTR(DEVICE_, MAX_WORK_GROUP_SIZE);
ADD_ATTR(DEVICE_, MAX_WORK_ITEM_SIZES);
ADD_ATTR(DEVICE_, PREFERRED_VECTOR_WIDTH_CHAR);
ADD_ATTR(DEVICE_, PREFERRED_VECTOR_WIDTH_SHORT);
ADD_ATTR(DEVICE_, PREFERRED_VECTOR_WIDTH_INT);
ADD_ATTR(DEVICE_, PREFERRED_VECTOR_WIDTH_LONG);
ADD_ATTR(DEVICE_, PREFERRED_VECTOR_WIDTH_FLOAT);
ADD_ATTR(DEVICE_, PREFERRED_VECTOR_WIDTH_DOUBLE);
ADD_ATTR(DEVICE_, MAX_CLOCK_FREQUENCY);
ADD_ATTR(DEVICE_, ADDRESS_BITS);
ADD_ATTR(DEVICE_, MAX_READ_IMAGE_ARGS);
ADD_ATTR(DEVICE_, MAX_WRITE_IMAGE_ARGS);
ADD_ATTR(DEVICE_, MAX_MEM_ALLOC_SIZE);
ADD_ATTR(DEVICE_, IMAGE2D_MAX_WIDTH);
ADD_ATTR(DEVICE_, IMAGE2D_MAX_HEIGHT);
ADD_ATTR(DEVICE_, IMAGE3D_MAX_WIDTH);
ADD_ATTR(DEVICE_, IMAGE3D_MAX_HEIGHT);
ADD_ATTR(DEVICE_, IMAGE3D_MAX_DEPTH);
ADD_ATTR(DEVICE_, IMAGE_SUPPORT);
ADD_ATTR(DEVICE_, MAX_PARAMETER_SIZE);
ADD_ATTR(DEVICE_, MAX_SAMPLERS);
ADD_ATTR(DEVICE_, MEM_BASE_ADDR_ALIGN);
ADD_ATTR(DEVICE_, MIN_DATA_TYPE_ALIGN_SIZE);
ADD_ATTR(DEVICE_, SINGLE_FP_CONFIG);
#ifdef CL_DEVICE_DOUBLE_FP_CONFIG
ADD_ATTR(DEVICE_, DOUBLE_FP_CONFIG);
#endif
#ifdef CL_DEVICE_HALF_FP_CONFIG
ADD_ATTR(DEVICE_, HALF_FP_CONFIG);
#endif
ADD_ATTR(DEVICE_, GLOBAL_MEM_CACHE_TYPE);
ADD_ATTR(DEVICE_, GLOBAL_MEM_CACHELINE_SIZE);
ADD_ATTR(DEVICE_, GLOBAL_MEM_CACHE_SIZE);
ADD_ATTR(DEVICE_, GLOBAL_MEM_SIZE);
ADD_ATTR(DEVICE_, MAX_CONSTANT_BUFFER_SIZE);
ADD_ATTR(DEVICE_, MAX_CONSTANT_ARGS);
ADD_ATTR(DEVICE_, LOCAL_MEM_TYPE);
ADD_ATTR(DEVICE_, LOCAL_MEM_SIZE);
ADD_ATTR(DEVICE_, ERROR_CORRECTION_SUPPORT);
ADD_ATTR(DEVICE_, PROFILING_TIMER_RESOLUTION);
ADD_ATTR(DEVICE_, ENDIAN_LITTLE);
ADD_ATTR(DEVICE_, AVAILABLE);
ADD_ATTR(DEVICE_, COMPILER_AVAILABLE);
ADD_ATTR(DEVICE_, EXECUTION_CAPABILITIES);
ADD_ATTR(DEVICE_, QUEUE_PROPERTIES);
#if PYOPENCL_CL_VERSION >= 0x2000
ADD_ATTR(DEVICE_, QUEUE_ON_HOST_PROPERTIES);
#endif
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
ADD_ATTR(DEVICE_, NAME);
ADD_ATTR(DEVICE_, VENDOR);
ADD_ATTR(, DRIVER_VERSION);
ADD_ATTR(DEVICE_, VERSION);
ADD_ATTR(DEVICE_, PROFILE);
ADD_ATTR(DEVICE_, VERSION);
ADD_ATTR(DEVICE_, EXTENSIONS);
ADD_ATTR(DEVICE_, PLATFORM);
#if PYOPENCL_CL_VERSION >= 0x1010
ADD_ATTR(DEVICE_, PREFERRED_VECTOR_WIDTH_HALF);
ADD_ATTR(DEVICE_, HOST_UNIFIED_MEMORY);
ADD_ATTR(DEVICE_, NATIVE_VECTOR_WIDTH_CHAR);
ADD_ATTR(DEVICE_, NATIVE_VECTOR_WIDTH_SHORT);
ADD_ATTR(DEVICE_, NATIVE_VECTOR_WIDTH_INT);
ADD_ATTR(DEVICE_, NATIVE_VECTOR_WIDTH_LONG);
ADD_ATTR(DEVICE_, NATIVE_VECTOR_WIDTH_FLOAT);
ADD_ATTR(DEVICE_, NATIVE_VECTOR_WIDTH_DOUBLE);
ADD_ATTR(DEVICE_, NATIVE_VECTOR_WIDTH_HALF);
ADD_ATTR(DEVICE_, OPENCL_C_VERSION);
#endif
// support for cl_nv_device_attribute_query
#ifdef CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV
ADD_ATTR(DEVICE_, COMPUTE_CAPABILITY_MAJOR_NV);
ADD_ATTR(DEVICE_, COMPUTE_CAPABILITY_MINOR_NV);
ADD_ATTR(DEVICE_, REGISTERS_PER_BLOCK_NV);
ADD_ATTR(DEVICE_, WARP_SIZE_NV);
ADD_ATTR(DEVICE_, GPU_OVERLAP_NV);
ADD_ATTR(DEVICE_, KERNEL_EXEC_TIMEOUT_NV);
ADD_ATTR(DEVICE_, INTEGRATED_MEMORY_NV);
// Nvidia specific device attributes, not defined in Khronos CL/cl_ext.h
#ifdef CL_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT_NV
ADD_ATTR(DEVICE_, ATTRIBUTE_ASYNC_ENGINE_COUNT_NV);
#endif
#ifdef CL_DEVICE_PCI_BUS_ID_NV
ADD_ATTR(DEVICE_, PCI_BUS_ID_NV);
#endif
#ifdef CL_DEVICE_PCI_SLOT_ID_NV
ADD_ATTR(DEVICE_, PCI_SLOT_ID_NV);
#endif
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
#endif
// {{{ cl_amd_device_attribute_query
#ifdef CL_DEVICE_PROFILING_TIMER_OFFSET_AMD
ADD_ATTR(DEVICE_, PROFILING_TIMER_OFFSET_AMD);
#endif
#ifdef CL_DEVICE_TOPOLOGY_AMD
ADD_ATTR(DEVICE_, TOPOLOGY_AMD);
#endif
#ifdef CL_DEVICE_BOARD_NAME_AMD
ADD_ATTR(DEVICE_, BOARD_NAME_AMD);
#endif
#ifdef CL_DEVICE_GLOBAL_FREE_MEMORY_AMD
ADD_ATTR(DEVICE_, GLOBAL_FREE_MEMORY_AMD);
#endif
#ifdef CL_DEVICE_SIMD_PER_COMPUTE_UNIT_AMD
ADD_ATTR(DEVICE_, SIMD_PER_COMPUTE_UNIT_AMD);
#endif
#ifdef CL_DEVICE_SIMD_WIDTH_AMD
ADD_ATTR(DEVICE_, SIMD_WIDTH_AMD);
#endif
#ifdef CL_DEVICE_SIMD_INSTRUCTION_WIDTH_AMD
ADD_ATTR(DEVICE_, SIMD_INSTRUCTION_WIDTH_AMD);
#endif
#ifdef CL_DEVICE_WAVEFRONT_WIDTH_AMD
ADD_ATTR(DEVICE_, WAVEFRONT_WIDTH_AMD);
#endif
#ifdef CL_DEVICE_GLOBAL_MEM_CHANNELS_AMD
ADD_ATTR(DEVICE_, GLOBAL_MEM_CHANNELS_AMD);
#endif
#ifdef CL_DEVICE_GLOBAL_MEM_CHANNEL_BANKS_AMD
ADD_ATTR(DEVICE_, GLOBAL_MEM_CHANNEL_BANKS_AMD);
#endif
#ifdef CL_DEVICE_GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD
ADD_ATTR(DEVICE_, GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD);
#endif
#ifdef CL_DEVICE_LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD
ADD_ATTR(DEVICE_, LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD);
#endif
#ifdef CL_DEVICE_LOCAL_MEM_BANKS_AMD
ADD_ATTR(DEVICE_, LOCAL_MEM_BANKS_AMD);
#endif
// }}}
#ifdef CL_DEVICE_THREAD_TRACE_SUPPORTED_AMD
ADD_ATTR(DEVICE_, THREAD_TRACE_SUPPORTED_AMD);
#endif
#ifdef CL_DEVICE_GFXIP_MAJOR_AMD
ADD_ATTR(DEVICE_, GFXIP_MAJOR_AMD);
#endif
#ifdef CL_DEVICE_GFXIP_MINOR_AMD
ADD_ATTR(DEVICE_, GFXIP_MINOR_AMD);
#endif
#ifdef CL_DEVICE_AVAILABLE_ASYNC_QUEUES_AMD
ADD_ATTR(DEVICE_, AVAILABLE_ASYNC_QUEUES_AMD);
#endif
#ifdef CL_DEVICE_MAX_ATOMIC_COUNTERS_EXT
ADD_ATTR(DEVICE_, MAX_ATOMIC_COUNTERS_EXT);
#endif
#if PYOPENCL_CL_VERSION >= 0x1020
ADD_ATTR(DEVICE_, LINKER_AVAILABLE);
ADD_ATTR(DEVICE_, BUILT_IN_KERNELS);
ADD_ATTR(DEVICE_, IMAGE_MAX_BUFFER_SIZE);
ADD_ATTR(DEVICE_, IMAGE_MAX_ARRAY_SIZE);
ADD_ATTR(DEVICE_, PARENT_DEVICE);
ADD_ATTR(DEVICE_, PARTITION_MAX_SUB_DEVICES);
ADD_ATTR(DEVICE_, PARTITION_PROPERTIES);
ADD_ATTR(DEVICE_, PARTITION_AFFINITY_DOMAIN);
ADD_ATTR(DEVICE_, PARTITION_TYPE);
ADD_ATTR(DEVICE_, REFERENCE_COUNT);
ADD_ATTR(DEVICE_, PREFERRED_INTEROP_USER_SYNC);
ADD_ATTR(DEVICE_, PRINTF_BUFFER_SIZE);
#endif
#ifdef cl_khr_image2d_from_buffer
ADD_ATTR(DEVICE_, IMAGE_PITCH_ALIGNMENT);
ADD_ATTR(DEVICE_, IMAGE_BASE_ADDRESS_ALIGNMENT);
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
#endif
#if PYOPENCL_CL_VERSION >= 0x2000
ADD_ATTR(DEVICE_, MAX_READ_WRITE_IMAGE_ARGS);
ADD_ATTR(DEVICE_, MAX_GLOBAL_VARIABLE_SIZE);
ADD_ATTR(DEVICE_, QUEUE_ON_DEVICE_PROPERTIES);
ADD_ATTR(DEVICE_, QUEUE_ON_DEVICE_PREFERRED_SIZE);
ADD_ATTR(DEVICE_, QUEUE_ON_DEVICE_MAX_SIZE);
ADD_ATTR(DEVICE_, MAX_ON_DEVICE_QUEUES);
ADD_ATTR(DEVICE_, MAX_ON_DEVICE_EVENTS);
ADD_ATTR(DEVICE_, SVM_CAPABILITIES);
ADD_ATTR(DEVICE_, GLOBAL_VARIABLE_PREFERRED_TOTAL_SIZE);
ADD_ATTR(DEVICE_, MAX_PIPE_ARGS);
ADD_ATTR(DEVICE_, PIPE_MAX_ACTIVE_RESERVATIONS);
ADD_ATTR(DEVICE_, PIPE_MAX_PACKET_SIZE);
ADD_ATTR(DEVICE_, PREFERRED_PLATFORM_ATOMIC_ALIGNMENT);
ADD_ATTR(DEVICE_, PREFERRED_GLOBAL_ATOMIC_ALIGNMENT);
ADD_ATTR(DEVICE_, PREFERRED_LOCAL_ATOMIC_ALIGNMENT);
#endif
#if PYOPENCL_CL_VERSION >= 0x2010
ADD_ATTR(DEVICE_, IL_VERSION);
ADD_ATTR(DEVICE_, MAX_NUM_SUB_GROUPS);
ADD_ATTR(DEVICE_, SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS);
#endif
/* cl_intel_advanced_motion_estimation */
#ifdef CL_DEVICE_ME_VERSION_INTEL
ADD_ATTR(DEVICE_, ME_VERSION_INTEL);
#endif
/* cl_qcom_ext_host_ptr */
#ifdef CL_DEVICE_EXT_MEM_PADDING_IN_BYTES_QCOM
ADD_ATTR(DEVICE_, EXT_MEM_PADDING_IN_BYTES_QCOM);
#endif
#ifdef CL_DEVICE_PAGE_SIZE_QCOM
ADD_ATTR(DEVICE_, PAGE_SIZE_QCOM);
#endif
/* cl_khr_spir */
#ifdef CL_DEVICE_SPIR_VERSIONS
ADD_ATTR(DEVICE_, SPIR_VERSIONS);
#endif
/* cl_altera_device_temperature */
#ifdef CL_DEVICE_CORE_TEMPERATURE_ALTERA
ADD_ATTR(DEVICE_, CORE_TEMPERATURE_ALTERA);
#endif
/* cl_intel_simultaneous_sharing */
#ifdef CL_DEVICE_SIMULTANEOUS_INTEROPS_INTEL
ADD_ATTR(DEVICE_, SIMULTANEOUS_INTEROPS_INTEL);
#endif
#ifdef CL_DEVICE_NUM_SIMULTANEOUS_INTEROPS_INTEL
ADD_ATTR(DEVICE_, NUM_SIMULTANEOUS_INTEROPS_INTEL);
py::class_<device_fp_config> cls(m, "device_fp_config");
ADD_ATTR(FP_, DENORM);
ADD_ATTR(FP_, INF_NAN);
ADD_ATTR(FP_, ROUND_TO_NEAREST);
ADD_ATTR(FP_, ROUND_TO_ZERO);
ADD_ATTR(FP_, ROUND_TO_INF);
ADD_ATTR(FP_, FMA);
#if PYOPENCL_CL_VERSION >= 0x1010
ADD_ATTR(FP_, SOFT_FLOAT);
#endif
#if PYOPENCL_CL_VERSION >= 0x1020
ADD_ATTR(FP_, CORRECTLY_ROUNDED_DIVIDE_SQRT);
#endif
}
{
py::class_<device_mem_cache_type> cls(m, "device_mem_cache_type");
ADD_ATTR( , NONE);
ADD_ATTR( , READ_ONLY_CACHE);
ADD_ATTR( , READ_WRITE_CACHE);
}
{
py::class_<device_local_mem_type> cls(m, "device_local_mem_type");
ADD_ATTR( , LOCAL);
ADD_ATTR( , GLOBAL);
}
{
py::class_<device_exec_capabilities> cls(m, "device_exec_capabilities");
ADD_ATTR(EXEC_, KERNEL);
ADD_ATTR(EXEC_, NATIVE_KERNEL);
#ifdef CL_EXEC_IMMEDIATE_EXECUTION_INTEL
ADD_ATTR(EXEC_, IMMEDIATE_EXECUTION_INTEL);
#endif
}
{
py::class_<device_svm_capabilities> cls(m, "device_svm_capabilities");
#if PYOPENCL_CL_VERSION >= 0x2000
// device_svm_capabilities
ADD_ATTR(DEVICE_SVM_, COARSE_GRAIN_BUFFER);
ADD_ATTR(DEVICE_SVM_, FINE_GRAIN_BUFFER);
ADD_ATTR(DEVICE_SVM_, FINE_GRAIN_SYSTEM);
ADD_ATTR(DEVICE_SVM_, ATOMICS);
#endif
}
py::class_<command_queue_properties> cls(m, "command_queue_properties");
ADD_ATTR(QUEUE_, OUT_OF_ORDER_EXEC_MODE_ENABLE);
ADD_ATTR(QUEUE_, PROFILING_ENABLE);
#ifdef CL_QUEUE_IMMEDIATE_EXECUTION_ENABLE_INTEL
ADD_ATTR(QUEUE_, IMMEDIATE_EXECUTION_ENABLE_INTEL);
#endif
#if PYOPENCL_CL_VERSION >= 0x2000
ADD_ATTR(QUEUE_, ON_DEVICE);
ADD_ATTR(QUEUE_, ON_DEVICE_DEFAULT);
py::class_<context_info> cls(m, "context_info");
ADD_ATTR(CONTEXT_, REFERENCE_COUNT);
ADD_ATTR(CONTEXT_, DEVICES);
ADD_ATTR(CONTEXT_, PROPERTIES);
#if PYOPENCL_CL_VERSION >= 0x1010
ADD_ATTR(CONTEXT_, NUM_DEVICES);
#endif
#if PYOPENCL_CL_VERSION >= 0x1020
ADD_ATTR(CONTEXT_, INTEROP_USER_SYNC);
#endif
}
{
py::class_<gl_context_info> cls(m, "gl_context_info");
#if defined(cl_khr_gl_sharing) && (cl_khr_gl_sharing >= 1)
ADD_ATTR(, CURRENT_DEVICE_FOR_GL_CONTEXT_KHR);
ADD_ATTR(, DEVICES_FOR_GL_CONTEXT_KHR);
#endif
}
{
py::class_<context_properties> cls(m, "context_properties");
ADD_ATTR(CONTEXT_, PLATFORM);
#if defined(cl_khr_gl_sharing) && (cl_khr_gl_sharing >= 1)
ADD_ATTR( ,GL_CONTEXT_KHR);
ADD_ATTR( ,EGL_DISPLAY_KHR);
ADD_ATTR( ,GLX_DISPLAY_KHR);
ADD_ATTR( ,WGL_HDC_KHR);
ADD_ATTR( ,CGL_SHAREGROUP_KHR);
#endif
#if defined(__APPLE__) && defined(HAVE_GL)
ADD_ATTR( ,CONTEXT_PROPERTY_USE_CGL_SHAREGROUP_APPLE);
#endif /* __APPLE__ */
// cl_amd_offline_devices
#ifdef CL_CONTEXT_OFFLINE_DEVICES_AMD
ADD_ATTR(CONTEXT_, OFFLINE_DEVICES_AMD);
#endif
}
{
py::class_<command_queue_info> cls(m, "command_queue_info");
ADD_ATTR(QUEUE_, CONTEXT);
ADD_ATTR(QUEUE_, DEVICE);
ADD_ATTR(QUEUE_, REFERENCE_COUNT);
ADD_ATTR(QUEUE_, PROPERTIES);
}
{
py::class_<queue_properties> cls(m, "queue_properties");
ADD_ATTR(QUEUE_, PROPERTIES);
ADD_ATTR(QUEUE_, SIZE);
#endif
}
py::class_<mem_flags> cls(m, "mem_flags");
ADD_ATTR(MEM_, READ_WRITE);
ADD_ATTR(MEM_, WRITE_ONLY);
ADD_ATTR(MEM_, READ_ONLY);
ADD_ATTR(MEM_, USE_HOST_PTR);
ADD_ATTR(MEM_, ALLOC_HOST_PTR);
ADD_ATTR(MEM_, COPY_HOST_PTR);
#ifdef cl_amd_device_memory_flags
ADD_ATTR(MEM_, USE_PERSISTENT_MEM_AMD);
#endif
#if PYOPENCL_CL_VERSION >= 0x1020
ADD_ATTR(MEM_, HOST_WRITE_ONLY);
ADD_ATTR(MEM_, HOST_READ_ONLY);
ADD_ATTR(MEM_, HOST_NO_ACCESS);
#endif
#if PYOPENCL_CL_VERSION >= 0x2000
ADD_ATTR(MEM_, KERNEL_READ_AND_WRITE);
#endif
}
{
py::class_<svm_mem_flags> cls(m, "svm_mem_flags");
ADD_ATTR(MEM_, READ_WRITE);
ADD_ATTR(MEM_, WRITE_ONLY);
ADD_ATTR(MEM_, READ_ONLY);
ADD_ATTR(MEM_, SVM_FINE_GRAIN_BUFFER);
ADD_ATTR(MEM_, SVM_ATOMICS);
py::class_<channel_order> cls(m, "channel_order");
ADD_ATTR( , R);
ADD_ATTR( , A);
ADD_ATTR( , RG);
ADD_ATTR( , RA);
ADD_ATTR( , RGB);
ADD_ATTR( , RGBA);
ADD_ATTR( , BGRA);
ADD_ATTR( , INTENSITY);
ADD_ATTR( , LUMINANCE);
#if PYOPENCL_CL_VERSION >= 0x1010
ADD_ATTR( , Rx);
ADD_ATTR( , RGx);
ADD_ATTR( , RGBx);
#endif
#if PYOPENCL_CL_VERSION >= 0x2000
ADD_ATTR( , sRGB);
ADD_ATTR( , sRGBx);
ADD_ATTR( , sRGBA);
ADD_ATTR( , sBGRA);
ADD_ATTR( , ABGR);
py::class_<channel_type> cls(m, "channel_type");
ADD_ATTR( , SNORM_INT8);
ADD_ATTR( , SNORM_INT16);
ADD_ATTR( , UNORM_INT8);
ADD_ATTR( , UNORM_INT16);
ADD_ATTR( , UNORM_SHORT_565);
ADD_ATTR( , UNORM_SHORT_555);
ADD_ATTR( , UNORM_INT_101010);
ADD_ATTR( , SIGNED_INT8);
ADD_ATTR( , SIGNED_INT16);
ADD_ATTR( , SIGNED_INT32);
ADD_ATTR( , UNSIGNED_INT8);
ADD_ATTR( , UNSIGNED_INT16);
ADD_ATTR( , UNSIGNED_INT32);
ADD_ATTR( , HALF_FLOAT);
ADD_ATTR( , FLOAT);
}
{
py::class_<mem_object_type> cls(m, "mem_object_type");
ADD_ATTR(MEM_OBJECT_, BUFFER);
ADD_ATTR(MEM_OBJECT_, IMAGE2D);
ADD_ATTR(MEM_OBJECT_, IMAGE3D);
#if PYOPENCL_CL_VERSION >= 0x1020
ADD_ATTR(MEM_OBJECT_, IMAGE2D_ARRAY);
ADD_ATTR(MEM_OBJECT_, IMAGE1D);
ADD_ATTR(MEM_OBJECT_, IMAGE1D_ARRAY);
ADD_ATTR(MEM_OBJECT_, IMAGE1D_BUFFER);
#endif
#if PYOPENCL_CL_VERSION >= 0x2000
ADD_ATTR(MEM_OBJECT_, PIPE);
py::class_<mem_info> cls(m, "mem_info");
ADD_ATTR(MEM_, TYPE);
ADD_ATTR(MEM_, FLAGS);
ADD_ATTR(MEM_, SIZE);
ADD_ATTR(MEM_, HOST_PTR);
ADD_ATTR(MEM_, MAP_COUNT);
ADD_ATTR(MEM_, REFERENCE_COUNT);
ADD_ATTR(MEM_, CONTEXT);
#if PYOPENCL_CL_VERSION >= 0x1010
ADD_ATTR(MEM_, ASSOCIATED_MEMOBJECT);
ADD_ATTR(MEM_, OFFSET);
#endif
#if PYOPENCL_CL_VERSION >= 0x2000
ADD_ATTR(MEM_, USES_SVM_POINTER);
py::class_<image_info> cls(m, "image_info");
ADD_ATTR(IMAGE_, FORMAT);
ADD_ATTR(IMAGE_, ELEMENT_SIZE);
ADD_ATTR(IMAGE_, ROW_PITCH);
ADD_ATTR(IMAGE_, SLICE_PITCH);
ADD_ATTR(IMAGE_, WIDTH);
ADD_ATTR(IMAGE_, HEIGHT);
ADD_ATTR(IMAGE_, DEPTH);
#if PYOPENCL_CL_VERSION >= 0x1020
ADD_ATTR(IMAGE_, ARRAY_SIZE);
ADD_ATTR(IMAGE_, BUFFER);
ADD_ATTR(IMAGE_, NUM_MIP_LEVELS);
ADD_ATTR(IMAGE_, NUM_SAMPLES);
#endif
}
{
py::class_<addressing_mode> cls(m, "addressing_mode");
ADD_ATTR(ADDRESS_, NONE);
ADD_ATTR(ADDRESS_, CLAMP_TO_EDGE);
ADD_ATTR(ADDRESS_, CLAMP);
ADD_ATTR(ADDRESS_, REPEAT);
#if PYOPENCL_CL_VERSION >= 0x1010
ADD_ATTR(ADDRESS_, MIRRORED_REPEAT);
#endif
}
{
py::class_<filter_mode> cls(m, "filter_mode");
ADD_ATTR(FILTER_, NEAREST);
ADD_ATTR(FILTER_, LINEAR);
}
{
py::class_<sampler_info> cls(m, "sampler_info");
ADD_ATTR(SAMPLER_, REFERENCE_COUNT);
ADD_ATTR(SAMPLER_, CONTEXT);
ADD_ATTR(SAMPLER_, NORMALIZED_COORDS);
ADD_ATTR(SAMPLER_, ADDRESSING_MODE);
ADD_ATTR(SAMPLER_, FILTER_MODE);
#if PYOPENCL_CL_VERSION >= 0x2000
ADD_ATTR(SAMPLER_, MIP_FILTER_MODE);
ADD_ATTR(SAMPLER_, LOD_MIN);
ADD_ATTR(SAMPLER_, LOD_MAX);
#endif
py::class_<map_flags> cls(m, "map_flags");
ADD_ATTR(MAP_, READ);
ADD_ATTR(MAP_, WRITE);
#if PYOPENCL_CL_VERSION >= 0x1020
ADD_ATTR(MAP_, WRITE_INVALIDATE_REGION);
#endif
}
{
py::class_<program_info> cls(m, "program_info");
ADD_ATTR(PROGRAM_, REFERENCE_COUNT);
ADD_ATTR(PROGRAM_, CONTEXT);
ADD_ATTR(PROGRAM_, NUM_DEVICES);
ADD_ATTR(PROGRAM_, DEVICES);
ADD_ATTR(PROGRAM_, SOURCE);
ADD_ATTR(PROGRAM_, BINARY_SIZES);
ADD_ATTR(PROGRAM_, BINARIES);
#if PYOPENCL_CL_VERSION >= 0x1020
ADD_ATTR(PROGRAM_, NUM_KERNELS);
ADD_ATTR(PROGRAM_, KERNEL_NAMES);
#endif
}
{
py::class_<program_build_info> cls(m, "program_build_info");
ADD_ATTR(PROGRAM_BUILD_, STATUS);
ADD_ATTR(PROGRAM_BUILD_, OPTIONS);
ADD_ATTR(PROGRAM_BUILD_, LOG);
#if PYOPENCL_CL_VERSION >= 0x1020
ADD_ATTR(PROGRAM_, BINARY_TYPE);
#endif
#if PYOPENCL_CL_VERSION >= 0x2000
ADD_ATTR(PROGRAM_BUILD_, GLOBAL_VARIABLE_TOTAL_SIZE);
py::class_<program_binary_type> cls(m, "program_binary_type");
#if PYOPENCL_CL_VERSION >= 0x1020
ADD_ATTR(PROGRAM_BINARY_TYPE_, NONE);
ADD_ATTR(PROGRAM_BINARY_TYPE_, COMPILED_OBJECT);
ADD_ATTR(PROGRAM_BINARY_TYPE_, LIBRARY);
ADD_ATTR(PROGRAM_BINARY_TYPE_, EXECUTABLE);
#endif
}
{
py::class_<kernel_info> cls(m, "kernel_info");
ADD_ATTR(KERNEL_, FUNCTION_NAME);
ADD_ATTR(KERNEL_, NUM_ARGS);
ADD_ATTR(KERNEL_, REFERENCE_COUNT);
ADD_ATTR(KERNEL_, CONTEXT);
ADD_ATTR(KERNEL_, PROGRAM);
#if PYOPENCL_CL_VERSION >= 0x1020
ADD_ATTR(KERNEL_, ATTRIBUTES);
#endif
}
{
py::class_<kernel_arg_info> cls(m, "kernel_arg_info");
#if PYOPENCL_CL_VERSION >= 0x1020
ADD_ATTR(KERNEL_ARG_, ADDRESS_QUALIFIER);
ADD_ATTR(KERNEL_ARG_, ACCESS_QUALIFIER);
ADD_ATTR(KERNEL_ARG_, TYPE_NAME);
ADD_ATTR(KERNEL_ARG_, NAME);
#endif
}
{
py::class_<kernel_arg_address_qualifier> cls(
m, "kernel_arg_address_qualifier");
#if PYOPENCL_CL_VERSION >= 0x1020
ADD_ATTR(KERNEL_ARG_ADDRESS_, GLOBAL);
ADD_ATTR(KERNEL_ARG_ADDRESS_, LOCAL);
ADD_ATTR(KERNEL_ARG_ADDRESS_, CONSTANT);
ADD_ATTR(KERNEL_ARG_ADDRESS_, PRIVATE);
#endif
}
{
py::class_<kernel_arg_access_qualifier> cls(
m, "kernel_arg_access_qualifier");
#if PYOPENCL_CL_VERSION >= 0x1020
ADD_ATTR(KERNEL_ARG_ACCESS_, READ_ONLY);
ADD_ATTR(KERNEL_ARG_ACCESS_, WRITE_ONLY);
ADD_ATTR(KERNEL_ARG_ACCESS_, READ_WRITE);
ADD_ATTR(KERNEL_ARG_ACCESS_, NONE);
#endif
}
{
py::class_<kernel_arg_type_qualifier> cls(
m, "kernel_arg_type_qualifier");
#if PYOPENCL_CL_VERSION >= 0x1020
ADD_ATTR(KERNEL_ARG_TYPE_, NONE);
ADD_ATTR(KERNEL_ARG_TYPE_, CONST);
ADD_ATTR(KERNEL_ARG_TYPE_, RESTRICT);
ADD_ATTR(KERNEL_ARG_TYPE_, VOLATILE);
#endif
#if PYOPENCL_CL_VERSION >= 0x2000
ADD_ATTR(KERNEL_ARG_TYPE_, PIPE);
#endif
}
py::class_<kernel_work_group_info> cls(m, "kernel_work_group_info");
ADD_ATTR(KERNEL_, WORK_GROUP_SIZE);
ADD_ATTR(KERNEL_, COMPILE_WORK_GROUP_SIZE);
ADD_ATTR(KERNEL_, LOCAL_MEM_SIZE);
#if PYOPENCL_CL_VERSION >= 0x1010
ADD_ATTR(KERNEL_, PREFERRED_WORK_GROUP_SIZE_MULTIPLE);
ADD_ATTR(KERNEL_, PRIVATE_MEM_SIZE);
#endif
#if PYOPENCL_CL_VERSION >= 0x1020
ADD_ATTR(KERNEL_, GLOBAL_WORK_SIZE);
#endif
}
{
py::class_<event_info> cls(m, "event_info");
ADD_ATTR(EVENT_, COMMAND_QUEUE);
ADD_ATTR(EVENT_, COMMAND_TYPE);
ADD_ATTR(EVENT_, REFERENCE_COUNT);
ADD_ATTR(EVENT_, COMMAND_EXECUTION_STATUS);
#if PYOPENCL_CL_VERSION >= 0x1010
ADD_ATTR(EVENT_, CONTEXT);
#endif
}
{
py::class_<command_type> cls(m, "command_type");
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
ADD_ATTR(COMMAND_, NDRANGE_KERNEL);
ADD_ATTR(COMMAND_, TASK);
ADD_ATTR(COMMAND_, NATIVE_KERNEL);
ADD_ATTR(COMMAND_, READ_BUFFER);
ADD_ATTR(COMMAND_, WRITE_BUFFER);
ADD_ATTR(COMMAND_, COPY_BUFFER);
ADD_ATTR(COMMAND_, READ_IMAGE);
ADD_ATTR(COMMAND_, WRITE_IMAGE);
ADD_ATTR(COMMAND_, COPY_IMAGE);
ADD_ATTR(COMMAND_, COPY_IMAGE_TO_BUFFER);
ADD_ATTR(COMMAND_, COPY_BUFFER_TO_IMAGE);
ADD_ATTR(COMMAND_, MAP_BUFFER);
ADD_ATTR(COMMAND_, MAP_IMAGE);
ADD_ATTR(COMMAND_, UNMAP_MEM_OBJECT);
ADD_ATTR(COMMAND_, MARKER);
ADD_ATTR(COMMAND_, ACQUIRE_GL_OBJECTS);
ADD_ATTR(COMMAND_, RELEASE_GL_OBJECTS);
#if PYOPENCL_CL_VERSION >= 0x1010
ADD_ATTR(COMMAND_, READ_BUFFER_RECT);
ADD_ATTR(COMMAND_, WRITE_BUFFER_RECT);
ADD_ATTR(COMMAND_, COPY_BUFFER_RECT);
ADD_ATTR(COMMAND_, USER);
#endif
#if PYOPENCL_CL_VERSION >= 0x1020
ADD_ATTR(COMMAND_, BARRIER);
ADD_ATTR(COMMAND_, MIGRATE_MEM_OBJECTS);
ADD_ATTR(COMMAND_, FILL_BUFFER);
ADD_ATTR(COMMAND_, FILL_IMAGE);
#endif
#if PYOPENCL_CL_VERSION >= 0x2000
ADD_ATTR(COMMAND_, SVM_FREE);
ADD_ATTR(COMMAND_, SVM_MEMCPY);
ADD_ATTR(COMMAND_, SVM_MEMFILL);
ADD_ATTR(COMMAND_, SVM_MAP);
ADD_ATTR(COMMAND_, SVM_UNMAP);
py::class_<command_execution_status> cls(m, "command_execution_status");
ADD_ATTR(, COMPLETE);
ADD_ATTR(, RUNNING);
ADD_ATTR(, SUBMITTED);
ADD_ATTR(, QUEUED);
}
{
py::class_<profiling_info> cls(m, "profiling_info");
ADD_ATTR(PROFILING_COMMAND_, QUEUED);
ADD_ATTR(PROFILING_COMMAND_, SUBMIT);
ADD_ATTR(PROFILING_COMMAND_, START);
ADD_ATTR(PROFILING_COMMAND_, END);
ADD_ATTR(PROFILING_COMMAND_, COMPLETE);
}
/* not needed--filled in automatically by implementation.
#if PYOPENCL_CL_VERSION >= 0x1010
{
py::class_<buffer_create_type> cls(m, "buffer_create_type");
ADD_ATTR(BUFFER_CREATE_TYPE_, REGION);
}
#endif
*/
{
py::class_<mem_migration_flags> cls(
m, "mem_migration_flags");
#if PYOPENCL_CL_VERSION >= 0x1020
ADD_ATTR(MIGRATE_MEM_OBJECT_, HOST);
ADD_ATTR(MIGRATE_MEM_OBJECT_, CONTENT_UNDEFINED);
#endif
}
{
py::class_<device_partition_property> cls(
m, "device_partition_property");
#if PYOPENCL_CL_VERSION >= 0x1020
ADD_ATTR(DEVICE_PARTITION_, EQUALLY);
ADD_ATTR(DEVICE_PARTITION_, BY_COUNTS);
ADD_ATTR(DEVICE_PARTITION_, BY_COUNTS_LIST_END);
ADD_ATTR(DEVICE_PARTITION_, BY_AFFINITY_DOMAIN);
#endif
}
{
py::class_<device_affinity_domain> cls(m, "device_affinity_domain");
#if PYOPENCL_CL_VERSION >= 0x1020
ADD_ATTR(DEVICE_AFFINITY_DOMAIN_, NUMA);
ADD_ATTR(DEVICE_AFFINITY_DOMAIN_, L4_CACHE);
ADD_ATTR(DEVICE_AFFINITY_DOMAIN_, L3_CACHE);
ADD_ATTR(DEVICE_AFFINITY_DOMAIN_, L2_CACHE);
ADD_ATTR(DEVICE_AFFINITY_DOMAIN_, L1_CACHE);
ADD_ATTR(DEVICE_AFFINITY_DOMAIN_, NEXT_PARTITIONABLE);
#endif
}
#ifdef HAVE_GL
{
py::class_<gl_object_type> cls(m, "gl_object_type");
ADD_ATTR(GL_OBJECT_, BUFFER);
ADD_ATTR(GL_OBJECT_, TEXTURE2D);
ADD_ATTR(GL_OBJECT_, TEXTURE3D);
ADD_ATTR(GL_OBJECT_, RENDERBUFFER);
}
{
py::class_<gl_texture_info> cls(m, "gl_texture_info");