pyopencl 2024.2.2__cp312-cp312-win_amd64.whl → 2024.2.4__cp312-cp312-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pyopencl might be problematic. Click here for more details.

Files changed (102) hide show
  1. pyopencl/__init__.py +16 -4
  2. pyopencl/_cl.cp312-win_amd64.pyd +0 -0
  3. pyopencl/algorithm.py +3 -1
  4. pyopencl/bitonic_sort.py +2 -0
  5. pyopencl/characterize/__init__.py +23 -0
  6. pyopencl/compyte/.git +1 -0
  7. pyopencl/compyte/.github/workflows/autopush.yml +21 -0
  8. pyopencl/compyte/.github/workflows/ci.yml +30 -0
  9. pyopencl/compyte/.gitignore +21 -0
  10. pyopencl/compyte/ndarray/Makefile +31 -0
  11. pyopencl/compyte/ndarray/gpu_ndarray.h +35 -0
  12. pyopencl/compyte/ndarray/pygpu_language.h +207 -0
  13. pyopencl/compyte/ndarray/pygpu_language_cuda.cu +622 -0
  14. pyopencl/compyte/ndarray/pygpu_language_opencl.cpp +317 -0
  15. pyopencl/compyte/ndarray/pygpu_ndarray.cpp +1546 -0
  16. pyopencl/compyte/ndarray/pygpu_ndarray.h +71 -0
  17. pyopencl/compyte/ndarray/pygpu_ndarray_object.h +232 -0
  18. pyopencl/compyte/setup.cfg +9 -0
  19. pyopencl/tools.py +60 -56
  20. pyopencl/version.py +7 -3
  21. {pyopencl-2024.2.2.dist-info → pyopencl-2024.2.4.dist-info}/METADATA +105 -105
  22. pyopencl-2024.2.4.dist-info/RECORD +59 -0
  23. {pyopencl-2024.2.2.dist-info → pyopencl-2024.2.4.dist-info}/WHEEL +1 -1
  24. pyopencl-2024.2.2.data/data/CITATION.cff +0 -74
  25. pyopencl-2024.2.2.data/data/CMakeLists.txt +0 -83
  26. pyopencl-2024.2.2.data/data/Makefile.in +0 -21
  27. pyopencl-2024.2.2.data/data/README.rst +0 -70
  28. pyopencl-2024.2.2.data/data/README_SETUP.txt +0 -34
  29. pyopencl-2024.2.2.data/data/aksetup_helper.py +0 -1013
  30. pyopencl-2024.2.2.data/data/configure.py +0 -6
  31. pyopencl-2024.2.2.data/data/contrib/cldis.py +0 -91
  32. pyopencl-2024.2.2.data/data/contrib/fortran-to-opencl/README +0 -29
  33. pyopencl-2024.2.2.data/data/contrib/fortran-to-opencl/translate.py +0 -1441
  34. pyopencl-2024.2.2.data/data/contrib/pyopencl.vim +0 -84
  35. pyopencl-2024.2.2.data/data/doc/Makefile +0 -23
  36. pyopencl-2024.2.2.data/data/doc/algorithm.rst +0 -214
  37. pyopencl-2024.2.2.data/data/doc/array.rst +0 -305
  38. pyopencl-2024.2.2.data/data/doc/conf.py +0 -26
  39. pyopencl-2024.2.2.data/data/doc/howto.rst +0 -105
  40. pyopencl-2024.2.2.data/data/doc/index.rst +0 -137
  41. pyopencl-2024.2.2.data/data/doc/make_constants.py +0 -561
  42. pyopencl-2024.2.2.data/data/doc/misc.rst +0 -885
  43. pyopencl-2024.2.2.data/data/doc/runtime.rst +0 -51
  44. pyopencl-2024.2.2.data/data/doc/runtime_const.rst +0 -30
  45. pyopencl-2024.2.2.data/data/doc/runtime_gl.rst +0 -78
  46. pyopencl-2024.2.2.data/data/doc/runtime_memory.rst +0 -527
  47. pyopencl-2024.2.2.data/data/doc/runtime_platform.rst +0 -184
  48. pyopencl-2024.2.2.data/data/doc/runtime_program.rst +0 -364
  49. pyopencl-2024.2.2.data/data/doc/runtime_queue.rst +0 -182
  50. pyopencl-2024.2.2.data/data/doc/subst.rst +0 -36
  51. pyopencl-2024.2.2.data/data/doc/tools.rst +0 -4
  52. pyopencl-2024.2.2.data/data/doc/types.rst +0 -42
  53. pyopencl-2024.2.2.data/data/examples/black-hole-accretion.py +0 -2227
  54. pyopencl-2024.2.2.data/data/examples/demo-struct-reduce.py +0 -75
  55. pyopencl-2024.2.2.data/data/examples/demo.py +0 -39
  56. pyopencl-2024.2.2.data/data/examples/demo_array.py +0 -32
  57. pyopencl-2024.2.2.data/data/examples/demo_array_svm.py +0 -37
  58. pyopencl-2024.2.2.data/data/examples/demo_elementwise.py +0 -34
  59. pyopencl-2024.2.2.data/data/examples/demo_elementwise_complex.py +0 -53
  60. pyopencl-2024.2.2.data/data/examples/demo_mandelbrot.py +0 -183
  61. pyopencl-2024.2.2.data/data/examples/demo_meta_codepy.py +0 -56
  62. pyopencl-2024.2.2.data/data/examples/demo_meta_template.py +0 -55
  63. pyopencl-2024.2.2.data/data/examples/dump-performance.py +0 -38
  64. pyopencl-2024.2.2.data/data/examples/dump-properties.py +0 -86
  65. pyopencl-2024.2.2.data/data/examples/gl_interop_demo.py +0 -84
  66. pyopencl-2024.2.2.data/data/examples/gl_particle_animation.py +0 -218
  67. pyopencl-2024.2.2.data/data/examples/ipython-demo.ipynb +0 -203
  68. pyopencl-2024.2.2.data/data/examples/median-filter.py +0 -99
  69. pyopencl-2024.2.2.data/data/examples/n-body.py +0 -1070
  70. pyopencl-2024.2.2.data/data/examples/narray.py +0 -37
  71. pyopencl-2024.2.2.data/data/examples/noisyImage.jpg +0 -0
  72. pyopencl-2024.2.2.data/data/examples/pi-monte-carlo.py +0 -1166
  73. pyopencl-2024.2.2.data/data/examples/svm.py +0 -82
  74. pyopencl-2024.2.2.data/data/examples/transpose.py +0 -229
  75. pyopencl-2024.2.2.data/data/pytest.ini +0 -3
  76. pyopencl-2024.2.2.data/data/src/bitlog.cpp +0 -51
  77. pyopencl-2024.2.2.data/data/src/bitlog.hpp +0 -83
  78. pyopencl-2024.2.2.data/data/src/clinfo_ext.h +0 -134
  79. pyopencl-2024.2.2.data/data/src/mempool.hpp +0 -444
  80. pyopencl-2024.2.2.data/data/src/pyopencl_ext.h +0 -77
  81. pyopencl-2024.2.2.data/data/src/tools.hpp +0 -90
  82. pyopencl-2024.2.2.data/data/src/wrap_cl.cpp +0 -61
  83. pyopencl-2024.2.2.data/data/src/wrap_cl.hpp +0 -5853
  84. pyopencl-2024.2.2.data/data/src/wrap_cl_part_1.cpp +0 -369
  85. pyopencl-2024.2.2.data/data/src/wrap_cl_part_2.cpp +0 -702
  86. pyopencl-2024.2.2.data/data/src/wrap_constants.cpp +0 -1274
  87. pyopencl-2024.2.2.data/data/src/wrap_helpers.hpp +0 -213
  88. pyopencl-2024.2.2.data/data/src/wrap_mempool.cpp +0 -738
  89. pyopencl-2024.2.2.data/data/test/add-vectors-32.spv +0 -0
  90. pyopencl-2024.2.2.data/data/test/add-vectors-64.spv +0 -0
  91. pyopencl-2024.2.2.data/data/test/empty-header.h +0 -1
  92. pyopencl-2024.2.2.data/data/test/test_algorithm.py +0 -1180
  93. pyopencl-2024.2.2.data/data/test/test_array.py +0 -2392
  94. pyopencl-2024.2.2.data/data/test/test_arrays_in_structs.py +0 -100
  95. pyopencl-2024.2.2.data/data/test/test_clmath.py +0 -529
  96. pyopencl-2024.2.2.data/data/test/test_clrandom.py +0 -75
  97. pyopencl-2024.2.2.data/data/test/test_enqueue_copy.py +0 -271
  98. pyopencl-2024.2.2.data/data/test/test_wrapper.py +0 -1565
  99. pyopencl-2024.2.2.dist-info/LICENSE +0 -282
  100. pyopencl-2024.2.2.dist-info/RECORD +0 -123
  101. pyopencl-2024.2.2.dist-info/top_level.txt +0 -1
  102. {pyopencl-2024.2.2.data/data → pyopencl-2024.2.4.dist-info/licenses}/LICENSE +0 -0
@@ -1,1274 +0,0 @@
1
- // Wrap CL constants and errors
2
- //
3
- // Copyright (C) 2009 Andreas Kloeckner
4
- //
5
- // Permission is hereby granted, free of charge, to any person
6
- // obtaining a copy of this software and associated documentation
7
- // files (the "Software"), to deal in the Software without
8
- // restriction, including without limitation the rights to use,
9
- // copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- // copies of the Software, and to permit persons to whom the
11
- // Software is furnished to do so, subject to the following
12
- // conditions:
13
- //
14
- // The above copyright notice and this permission notice shall be
15
- // included in all copies or substantial portions of the Software.
16
- //
17
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
- // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
19
- // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
- // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
21
- // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
22
- // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
24
- // OTHER DEALINGS IN THE SOFTWARE.
25
-
26
-
27
- #define NO_IMPORT_ARRAY
28
- #define PY_ARRAY_UNIQUE_SYMBOL pyopencl_ARRAY_API
29
-
30
- #include "wrap_cl.hpp"
31
-
32
-
33
- using namespace pyopencl;
34
-
35
-
36
- namespace
37
- {
38
- // {{{ 'fake' constant scopes
39
- class status_code { };
40
- class platform_info { };
41
- class device_type { };
42
- class device_info { };
43
- class device_topology_type_amd { };
44
- class device_fp_config { };
45
- class device_mem_cache_type { };
46
- class device_local_mem_type { };
47
- class device_exec_capabilities { };
48
- class device_svm_capabilities { };
49
- class command_queue_properties { };
50
- class context_info { };
51
- class gl_context_info { };
52
- class context_properties { };
53
- class command_queue_info { };
54
- class queue_properties { };
55
- class mem_flags { };
56
- class svm_mem_flags { };
57
- class channel_order { };
58
- class channel_type { };
59
- class mem_object_type { };
60
- class mem_info { };
61
- class image_info { };
62
- class pipe_info { };
63
- class pipe_properties { };
64
- class addressing_mode { };
65
- class filter_mode { };
66
- class sampler_info { };
67
- class sampler_properties { };
68
- class map_flags { };
69
- class program_info { };
70
- class program_build_info { };
71
- class program_binary_type { };
72
- class build_status { };
73
- class kernel_info { };
74
- class kernel_arg_info { };
75
- class kernel_arg_address_qualifier { };
76
- class kernel_arg_access_qualifier { };
77
- class kernel_arg_type_qualifier { };
78
- class kernel_work_group_info { };
79
- class kernel_sub_group_info { };
80
- class event_info { };
81
- class command_type { };
82
- class command_execution_status { };
83
- class profiling_info { };
84
- class buffer_create_type { };
85
- class mem_migration_flags { };
86
-
87
- class device_partition_property { };
88
- class device_affinity_domain { };
89
- class device_atomic_capabilities { };
90
- class device_device_enqueue_capabilities { };
91
-
92
- class version_bits { };
93
- class khronos_vendor_id { };
94
-
95
- class gl_object_type { };
96
- class gl_texture_info { };
97
-
98
- // }}}
99
- }
100
-
101
-
102
- void pyopencl_expose_constants(py::module_ &m)
103
- {
104
- // {{{ exceptions
105
- {
106
- #define DECLARE_EXC(NAME, BASE) \
107
- static py::exception<pyopencl::error> CL##NAME(m, #NAME, BASE);
108
-
109
- DECLARE_EXC(Error, PyExc_Exception);
110
- DECLARE_EXC(MemoryError, CLError.ptr());
111
- DECLARE_EXC(LogicError, CLError.ptr());
112
- DECLARE_EXC(RuntimeError, CLError.ptr());
113
-
114
- py::register_exception_translator(
115
- [](const std::exception_ptr &p, void * /* unused */)
116
- {
117
- try
118
- {
119
- if (p) std::rethrow_exception(p);
120
- }
121
- catch (pyopencl::error &err)
122
- {
123
- py::object err_obj = py::cast(err);
124
- if (err.code() == CL_MEM_OBJECT_ALLOCATION_FAILURE)
125
- PyErr_SetObject(CLMemoryError.ptr(), err_obj.ptr());
126
- else if (err.code() <= CL_INVALID_VALUE)
127
- PyErr_SetObject(CLLogicError.ptr(), err_obj.ptr());
128
- else if (err.code() > CL_INVALID_VALUE && err.code() < CL_SUCCESS)
129
- PyErr_SetObject(CLRuntimeError.ptr(), err_obj.ptr());
130
- else
131
- PyErr_SetObject(CLError.ptr(), err_obj.ptr());
132
- }
133
- });
134
- }
135
- // }}}
136
-
137
- // {{{ error record
138
-
139
- {
140
- typedef error cls;
141
- py::class_<error> (m, "_ErrorRecord")
142
- .def(py::init<const std::string &, cl_int, const std::string &>(),
143
- py::arg("routine"),
144
- py::arg("code"),
145
- py::arg("msg"))
146
- .DEF_SIMPLE_METHOD(routine)
147
- .DEF_SIMPLE_METHOD(code)
148
- .def("what", &cls::err_what)
149
- .DEF_SIMPLE_METHOD(is_out_of_memory)
150
- .def("_program", &cls::get_program)
151
- ;
152
- }
153
-
154
- // }}}
155
-
156
- // {{{ constants
157
- #define ADD_ATTR(PREFIX, NAME) \
158
- cls.attr(#NAME) = CL_##PREFIX##NAME
159
- #define ADD_ATTR_SUFFIX(PREFIX, NAME, SUFFIX) \
160
- cls.attr(#NAME) = CL_##PREFIX##NAME##SUFFIX
161
-
162
- {
163
- py::class_<status_code> cls(m, "status_code");
164
-
165
- ADD_ATTR(, SUCCESS);
166
- ADD_ATTR(, DEVICE_NOT_FOUND);
167
- ADD_ATTR(, DEVICE_NOT_AVAILABLE);
168
- #if !(defined(CL_PLATFORM_NVIDIA) && CL_PLATFORM_NVIDIA == 0x3001)
169
- ADD_ATTR(, COMPILER_NOT_AVAILABLE);
170
- #endif
171
- ADD_ATTR(, MEM_OBJECT_ALLOCATION_FAILURE);
172
- ADD_ATTR(, OUT_OF_RESOURCES);
173
- ADD_ATTR(, OUT_OF_HOST_MEMORY);
174
- ADD_ATTR(, PROFILING_INFO_NOT_AVAILABLE);
175
- ADD_ATTR(, MEM_COPY_OVERLAP);
176
- ADD_ATTR(, IMAGE_FORMAT_MISMATCH);
177
- ADD_ATTR(, IMAGE_FORMAT_NOT_SUPPORTED);
178
- ADD_ATTR(, BUILD_PROGRAM_FAILURE);
179
- ADD_ATTR(, MAP_FAILURE);
180
-
181
- ADD_ATTR(, INVALID_VALUE);
182
- ADD_ATTR(, INVALID_DEVICE_TYPE);
183
- ADD_ATTR(, INVALID_PLATFORM);
184
- ADD_ATTR(, INVALID_DEVICE);
185
- ADD_ATTR(, INVALID_CONTEXT);
186
- ADD_ATTR(, INVALID_QUEUE_PROPERTIES);
187
- ADD_ATTR(, INVALID_COMMAND_QUEUE);
188
- ADD_ATTR(, INVALID_HOST_PTR);
189
- ADD_ATTR(, INVALID_MEM_OBJECT);
190
- ADD_ATTR(, INVALID_IMAGE_FORMAT_DESCRIPTOR);
191
- ADD_ATTR(, INVALID_IMAGE_SIZE);
192
- ADD_ATTR(, INVALID_SAMPLER);
193
- ADD_ATTR(, INVALID_BINARY);
194
- ADD_ATTR(, INVALID_BUILD_OPTIONS);
195
- ADD_ATTR(, INVALID_PROGRAM);
196
- ADD_ATTR(, INVALID_PROGRAM_EXECUTABLE);
197
- ADD_ATTR(, INVALID_KERNEL_NAME);
198
- ADD_ATTR(, INVALID_KERNEL_DEFINITION);
199
- ADD_ATTR(, INVALID_KERNEL);
200
- ADD_ATTR(, INVALID_ARG_INDEX);
201
- ADD_ATTR(, INVALID_ARG_VALUE);
202
- ADD_ATTR(, INVALID_ARG_SIZE);
203
- ADD_ATTR(, INVALID_KERNEL_ARGS);
204
- ADD_ATTR(, INVALID_WORK_DIMENSION);
205
- ADD_ATTR(, INVALID_WORK_GROUP_SIZE);
206
- ADD_ATTR(, INVALID_WORK_ITEM_SIZE);
207
- ADD_ATTR(, INVALID_GLOBAL_OFFSET);
208
- ADD_ATTR(, INVALID_EVENT_WAIT_LIST);
209
- ADD_ATTR(, INVALID_EVENT);
210
- ADD_ATTR(, INVALID_OPERATION);
211
- ADD_ATTR(, INVALID_GL_OBJECT);
212
- ADD_ATTR(, INVALID_BUFFER_SIZE);
213
- ADD_ATTR(, INVALID_MIP_LEVEL);
214
-
215
- #if defined(cl_khr_icd) && (cl_khr_icd >= 1)
216
- ADD_ATTR(, PLATFORM_NOT_FOUND_KHR);
217
- #endif
218
-
219
- #if defined(cl_khr_gl_sharing) && (cl_khr_gl_sharing >= 1)
220
- ADD_ATTR(, INVALID_GL_SHAREGROUP_REFERENCE_KHR);
221
- #endif
222
-
223
- #if PYOPENCL_CL_VERSION >= 0x1010
224
- ADD_ATTR(, MISALIGNED_SUB_BUFFER_OFFSET);
225
- ADD_ATTR(, EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST);
226
- ADD_ATTR(, INVALID_GLOBAL_WORK_SIZE);
227
- #endif
228
-
229
- #if PYOPENCL_CL_VERSION >= 0x1020
230
- ADD_ATTR(, COMPILE_PROGRAM_FAILURE);
231
- ADD_ATTR(, LINKER_NOT_AVAILABLE);
232
- ADD_ATTR(, LINK_PROGRAM_FAILURE);
233
- ADD_ATTR(, DEVICE_PARTITION_FAILED);
234
- ADD_ATTR(, KERNEL_ARG_INFO_NOT_AVAILABLE);
235
- ADD_ATTR(, INVALID_IMAGE_DESCRIPTOR);
236
- ADD_ATTR(, INVALID_COMPILER_OPTIONS);
237
- ADD_ATTR(, INVALID_LINKER_OPTIONS);
238
- ADD_ATTR(, INVALID_DEVICE_PARTITION_COUNT);
239
- #endif
240
-
241
- #if PYOPENCL_CL_VERSION >= 0x2000
242
- ADD_ATTR(, INVALID_PIPE_SIZE);
243
- ADD_ATTR(, INVALID_DEVICE_QUEUE);
244
- #endif
245
-
246
- #if PYOPENCL_CL_VERSION >= 0x2020
247
- ADD_ATTR(, INVALID_SPEC_ID);
248
- ADD_ATTR(, MAX_SIZE_RESTRICTION_EXCEEDED);
249
- #endif
250
-
251
- #if defined(cl_ext_device_fission) && defined(PYOPENCL_USE_DEVICE_FISSION)
252
- ADD_ATTR(, DEVICE_PARTITION_FAILED_EXT);
253
- ADD_ATTR(, INVALID_PARTITION_COUNT_EXT);
254
- ADD_ATTR(, INVALID_PARTITION_NAME_EXT);
255
- #endif
256
- }
257
-
258
- {
259
- py::class_<platform_info> cls(m, "platform_info");
260
- ADD_ATTR(PLATFORM_, PROFILE);
261
- ADD_ATTR(PLATFORM_, VERSION);
262
- ADD_ATTR(PLATFORM_, NAME);
263
- ADD_ATTR(PLATFORM_, VENDOR);
264
- #if !(defined(CL_PLATFORM_NVIDIA) && CL_PLATFORM_NVIDIA == 0x3001)
265
- ADD_ATTR(PLATFORM_, EXTENSIONS);
266
- #endif
267
- #if PYOPENCL_CL_VERSION >= 0x2010
268
- ADD_ATTR(PLATFORM_, HOST_TIMER_RESOLUTION);
269
- #endif
270
- #if PYOPENCL_CL_VERSION >= 0x3000
271
- ADD_ATTR(PLATFORM_, NUMERIC_VERSION);
272
- ADD_ATTR(PLATFORM_, EXTENSIONS_WITH_VERSION);
273
- #endif
274
- }
275
-
276
- {
277
- py::class_<device_type> cls(m, "device_type");
278
- ADD_ATTR(DEVICE_TYPE_, DEFAULT);
279
- ADD_ATTR(DEVICE_TYPE_, CPU);
280
- ADD_ATTR(DEVICE_TYPE_, GPU);
281
- ADD_ATTR(DEVICE_TYPE_, ACCELERATOR);
282
- #if PYOPENCL_CL_VERSION >= 0x1020
283
- ADD_ATTR(DEVICE_TYPE_, CUSTOM);
284
- #endif
285
- ADD_ATTR(DEVICE_TYPE_, ALL);
286
- }
287
-
288
- {
289
- py::class_<device_info> cls(m, "device_info");
290
- ADD_ATTR(DEVICE_, TYPE);
291
- ADD_ATTR(DEVICE_, VENDOR_ID);
292
- ADD_ATTR(DEVICE_, MAX_COMPUTE_UNITS);
293
- ADD_ATTR(DEVICE_, MAX_WORK_ITEM_DIMENSIONS);
294
- ADD_ATTR(DEVICE_, MAX_WORK_GROUP_SIZE);
295
- ADD_ATTR(DEVICE_, MAX_WORK_ITEM_SIZES);
296
- ADD_ATTR(DEVICE_, PREFERRED_VECTOR_WIDTH_CHAR);
297
- ADD_ATTR(DEVICE_, PREFERRED_VECTOR_WIDTH_SHORT);
298
- ADD_ATTR(DEVICE_, PREFERRED_VECTOR_WIDTH_INT);
299
- ADD_ATTR(DEVICE_, PREFERRED_VECTOR_WIDTH_LONG);
300
- ADD_ATTR(DEVICE_, PREFERRED_VECTOR_WIDTH_FLOAT);
301
- ADD_ATTR(DEVICE_, PREFERRED_VECTOR_WIDTH_DOUBLE);
302
- ADD_ATTR(DEVICE_, MAX_CLOCK_FREQUENCY);
303
- ADD_ATTR(DEVICE_, ADDRESS_BITS);
304
- ADD_ATTR(DEVICE_, MAX_READ_IMAGE_ARGS);
305
- ADD_ATTR(DEVICE_, MAX_WRITE_IMAGE_ARGS);
306
- ADD_ATTR(DEVICE_, MAX_MEM_ALLOC_SIZE);
307
- ADD_ATTR(DEVICE_, IMAGE2D_MAX_WIDTH);
308
- ADD_ATTR(DEVICE_, IMAGE2D_MAX_HEIGHT);
309
- ADD_ATTR(DEVICE_, IMAGE3D_MAX_WIDTH);
310
- ADD_ATTR(DEVICE_, IMAGE3D_MAX_HEIGHT);
311
- ADD_ATTR(DEVICE_, IMAGE3D_MAX_DEPTH);
312
- ADD_ATTR(DEVICE_, IMAGE_SUPPORT);
313
- ADD_ATTR(DEVICE_, MAX_PARAMETER_SIZE);
314
- ADD_ATTR(DEVICE_, MAX_SAMPLERS);
315
- ADD_ATTR(DEVICE_, MEM_BASE_ADDR_ALIGN);
316
- ADD_ATTR(DEVICE_, MIN_DATA_TYPE_ALIGN_SIZE);
317
- ADD_ATTR(DEVICE_, SINGLE_FP_CONFIG);
318
- #ifdef CL_DEVICE_DOUBLE_FP_CONFIG
319
- ADD_ATTR(DEVICE_, DOUBLE_FP_CONFIG);
320
- #endif
321
- #ifdef CL_DEVICE_HALF_FP_CONFIG
322
- ADD_ATTR(DEVICE_, HALF_FP_CONFIG);
323
- #endif
324
- ADD_ATTR(DEVICE_, GLOBAL_MEM_CACHE_TYPE);
325
- ADD_ATTR(DEVICE_, GLOBAL_MEM_CACHELINE_SIZE);
326
- ADD_ATTR(DEVICE_, GLOBAL_MEM_CACHE_SIZE);
327
- ADD_ATTR(DEVICE_, GLOBAL_MEM_SIZE);
328
- ADD_ATTR(DEVICE_, MAX_CONSTANT_BUFFER_SIZE);
329
- ADD_ATTR(DEVICE_, MAX_CONSTANT_ARGS);
330
- ADD_ATTR(DEVICE_, LOCAL_MEM_TYPE);
331
- ADD_ATTR(DEVICE_, LOCAL_MEM_SIZE);
332
- ADD_ATTR(DEVICE_, ERROR_CORRECTION_SUPPORT);
333
- ADD_ATTR(DEVICE_, PROFILING_TIMER_RESOLUTION);
334
- ADD_ATTR(DEVICE_, ENDIAN_LITTLE);
335
- ADD_ATTR(DEVICE_, AVAILABLE);
336
- ADD_ATTR(DEVICE_, COMPILER_AVAILABLE);
337
- ADD_ATTR(DEVICE_, EXECUTION_CAPABILITIES);
338
- ADD_ATTR(DEVICE_, QUEUE_PROPERTIES);
339
- #if PYOPENCL_CL_VERSION >= 0x2000
340
- ADD_ATTR(DEVICE_, QUEUE_ON_HOST_PROPERTIES);
341
- #endif
342
- ADD_ATTR(DEVICE_, NAME);
343
- ADD_ATTR(DEVICE_, VENDOR);
344
- ADD_ATTR(, DRIVER_VERSION);
345
- ADD_ATTR(DEVICE_, VERSION);
346
- ADD_ATTR(DEVICE_, PROFILE);
347
- ADD_ATTR(DEVICE_, VERSION);
348
- ADD_ATTR(DEVICE_, EXTENSIONS);
349
- ADD_ATTR(DEVICE_, PLATFORM);
350
- #if PYOPENCL_CL_VERSION >= 0x1010
351
- ADD_ATTR(DEVICE_, PREFERRED_VECTOR_WIDTH_HALF);
352
- ADD_ATTR(DEVICE_, HOST_UNIFIED_MEMORY);
353
- ADD_ATTR(DEVICE_, NATIVE_VECTOR_WIDTH_CHAR);
354
- ADD_ATTR(DEVICE_, NATIVE_VECTOR_WIDTH_SHORT);
355
- ADD_ATTR(DEVICE_, NATIVE_VECTOR_WIDTH_INT);
356
- ADD_ATTR(DEVICE_, NATIVE_VECTOR_WIDTH_LONG);
357
- ADD_ATTR(DEVICE_, NATIVE_VECTOR_WIDTH_FLOAT);
358
- ADD_ATTR(DEVICE_, NATIVE_VECTOR_WIDTH_DOUBLE);
359
- ADD_ATTR(DEVICE_, NATIVE_VECTOR_WIDTH_HALF);
360
- ADD_ATTR(DEVICE_, OPENCL_C_VERSION);
361
- #endif
362
- // support for cl_nv_device_attribute_query
363
- #ifdef CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV
364
- ADD_ATTR(DEVICE_, COMPUTE_CAPABILITY_MAJOR_NV);
365
- ADD_ATTR(DEVICE_, COMPUTE_CAPABILITY_MINOR_NV);
366
- ADD_ATTR(DEVICE_, REGISTERS_PER_BLOCK_NV);
367
- ADD_ATTR(DEVICE_, WARP_SIZE_NV);
368
- ADD_ATTR(DEVICE_, GPU_OVERLAP_NV);
369
- ADD_ATTR(DEVICE_, KERNEL_EXEC_TIMEOUT_NV);
370
- ADD_ATTR(DEVICE_, INTEGRATED_MEMORY_NV);
371
- // Nvidia specific device attributes, not defined in Khronos CL/cl_ext.h
372
- #ifdef CL_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT_NV
373
- ADD_ATTR(DEVICE_, ATTRIBUTE_ASYNC_ENGINE_COUNT_NV);
374
- #endif
375
- #ifdef CL_DEVICE_PCI_BUS_ID_NV
376
- ADD_ATTR(DEVICE_, PCI_BUS_ID_NV);
377
- #endif
378
- #ifdef CL_DEVICE_PCI_SLOT_ID_NV
379
- ADD_ATTR(DEVICE_, PCI_SLOT_ID_NV);
380
- #endif
381
- #ifdef CL_DEVICE_PCI_SLOT_ID_NV
382
- ADD_ATTR(DEVICE_, PCI_DOMAIN_ID_NV);
383
- #endif
384
- #endif
385
-
386
- // {{{ cl_amd_device_attribute_query
387
- #ifdef CL_DEVICE_PROFILING_TIMER_OFFSET_AMD
388
- ADD_ATTR(DEVICE_, PROFILING_TIMER_OFFSET_AMD);
389
- #endif
390
- #ifdef CL_DEVICE_TOPOLOGY_AMD
391
- ADD_ATTR(DEVICE_, TOPOLOGY_AMD);
392
- #endif
393
- #ifdef CL_DEVICE_BOARD_NAME_AMD
394
- ADD_ATTR(DEVICE_, BOARD_NAME_AMD);
395
- #endif
396
- #ifdef CL_DEVICE_GLOBAL_FREE_MEMORY_AMD
397
- ADD_ATTR(DEVICE_, GLOBAL_FREE_MEMORY_AMD);
398
- #endif
399
- #ifdef CL_DEVICE_SIMD_PER_COMPUTE_UNIT_AMD
400
- ADD_ATTR(DEVICE_, SIMD_PER_COMPUTE_UNIT_AMD);
401
- #endif
402
- #ifdef CL_DEVICE_SIMD_WIDTH_AMD
403
- ADD_ATTR(DEVICE_, SIMD_WIDTH_AMD);
404
- #endif
405
- #ifdef CL_DEVICE_SIMD_INSTRUCTION_WIDTH_AMD
406
- ADD_ATTR(DEVICE_, SIMD_INSTRUCTION_WIDTH_AMD);
407
- #endif
408
- #ifdef CL_DEVICE_WAVEFRONT_WIDTH_AMD
409
- ADD_ATTR(DEVICE_, WAVEFRONT_WIDTH_AMD);
410
- #endif
411
- #ifdef CL_DEVICE_GLOBAL_MEM_CHANNELS_AMD
412
- ADD_ATTR(DEVICE_, GLOBAL_MEM_CHANNELS_AMD);
413
- #endif
414
- #ifdef CL_DEVICE_GLOBAL_MEM_CHANNEL_BANKS_AMD
415
- ADD_ATTR(DEVICE_, GLOBAL_MEM_CHANNEL_BANKS_AMD);
416
- #endif
417
- #ifdef CL_DEVICE_GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD
418
- ADD_ATTR(DEVICE_, GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD);
419
- #endif
420
- #ifdef CL_DEVICE_LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD
421
- ADD_ATTR(DEVICE_, LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD);
422
- #endif
423
- #ifdef CL_DEVICE_LOCAL_MEM_BANKS_AMD
424
- ADD_ATTR(DEVICE_, LOCAL_MEM_BANKS_AMD);
425
- #endif
426
- #ifdef CL_DEVICE_THREAD_TRACE_SUPPORTED_AMD
427
- ADD_ATTR(DEVICE_, THREAD_TRACE_SUPPORTED_AMD);
428
- #endif
429
- #ifdef CL_DEVICE_GFXIP_MAJOR_AMD
430
- ADD_ATTR(DEVICE_, GFXIP_MAJOR_AMD);
431
- #endif
432
- #ifdef CL_DEVICE_GFXIP_MINOR_AMD
433
- ADD_ATTR(DEVICE_, GFXIP_MINOR_AMD);
434
- #endif
435
- #ifdef CL_DEVICE_AVAILABLE_ASYNC_QUEUES_AMD
436
- ADD_ATTR(DEVICE_, AVAILABLE_ASYNC_QUEUES_AMD);
437
- #endif
438
- #ifdef CL_DEVICE_PREFERRED_WORK_GROUP_SIZE_AMD
439
- ADD_ATTR(DEVICE_, PREFERRED_WORK_GROUP_SIZE_AMD);
440
- #endif
441
- #ifdef CL_DEVICE_MAX_WORK_GROUP_SIZE_AMD
442
- ADD_ATTR(DEVICE_, MAX_WORK_GROUP_SIZE_AMD);
443
- #endif
444
- #ifdef CL_DEVICE_PREFERRED_CONSTANT_BUFFER_SIZE_AMD
445
- ADD_ATTR(DEVICE_, PREFERRED_CONSTANT_BUFFER_SIZE_AMD);
446
- #endif
447
- #ifdef CL_DEVICE_PCIE_ID_AMD
448
- ADD_ATTR(DEVICE_, PCIE_ID_AMD);
449
- #endif
450
- // }}}
451
-
452
- #ifdef CL_DEVICE_MAX_ATOMIC_COUNTERS_EXT
453
- ADD_ATTR(DEVICE_, MAX_ATOMIC_COUNTERS_EXT);
454
- #endif
455
- #if PYOPENCL_CL_VERSION >= 0x1020
456
- ADD_ATTR(DEVICE_, LINKER_AVAILABLE);
457
- ADD_ATTR(DEVICE_, BUILT_IN_KERNELS);
458
- ADD_ATTR(DEVICE_, IMAGE_MAX_BUFFER_SIZE);
459
- ADD_ATTR(DEVICE_, IMAGE_MAX_ARRAY_SIZE);
460
- ADD_ATTR(DEVICE_, PARENT_DEVICE);
461
- ADD_ATTR(DEVICE_, PARTITION_MAX_SUB_DEVICES);
462
- ADD_ATTR(DEVICE_, PARTITION_PROPERTIES);
463
- ADD_ATTR(DEVICE_, PARTITION_AFFINITY_DOMAIN);
464
- ADD_ATTR(DEVICE_, PARTITION_TYPE);
465
- ADD_ATTR(DEVICE_, REFERENCE_COUNT);
466
- ADD_ATTR(DEVICE_, PREFERRED_INTEROP_USER_SYNC);
467
- ADD_ATTR(DEVICE_, PRINTF_BUFFER_SIZE);
468
- #endif
469
- #ifdef cl_khr_image2d_from_buffer
470
- ADD_ATTR(DEVICE_, IMAGE_PITCH_ALIGNMENT);
471
- ADD_ATTR(DEVICE_, IMAGE_BASE_ADDRESS_ALIGNMENT);
472
- #endif
473
- #if PYOPENCL_CL_VERSION >= 0x2000
474
- ADD_ATTR(DEVICE_, MAX_READ_WRITE_IMAGE_ARGS);
475
- ADD_ATTR(DEVICE_, MAX_GLOBAL_VARIABLE_SIZE);
476
- ADD_ATTR(DEVICE_, QUEUE_ON_DEVICE_PROPERTIES);
477
- ADD_ATTR(DEVICE_, QUEUE_ON_DEVICE_PREFERRED_SIZE);
478
- ADD_ATTR(DEVICE_, QUEUE_ON_DEVICE_MAX_SIZE);
479
- ADD_ATTR(DEVICE_, MAX_ON_DEVICE_QUEUES);
480
- ADD_ATTR(DEVICE_, MAX_ON_DEVICE_EVENTS);
481
- ADD_ATTR(DEVICE_, SVM_CAPABILITIES);
482
- ADD_ATTR(DEVICE_, GLOBAL_VARIABLE_PREFERRED_TOTAL_SIZE);
483
- ADD_ATTR(DEVICE_, MAX_PIPE_ARGS);
484
- ADD_ATTR(DEVICE_, PIPE_MAX_ACTIVE_RESERVATIONS);
485
- ADD_ATTR(DEVICE_, PIPE_MAX_PACKET_SIZE);
486
- ADD_ATTR(DEVICE_, PREFERRED_PLATFORM_ATOMIC_ALIGNMENT);
487
- ADD_ATTR(DEVICE_, PREFERRED_GLOBAL_ATOMIC_ALIGNMENT);
488
- ADD_ATTR(DEVICE_, PREFERRED_LOCAL_ATOMIC_ALIGNMENT);
489
- #endif
490
- #if PYOPENCL_CL_VERSION >= 0x2010
491
- ADD_ATTR(DEVICE_, IL_VERSION);
492
- ADD_ATTR(DEVICE_, MAX_NUM_SUB_GROUPS);
493
- ADD_ATTR(DEVICE_, SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS);
494
- #endif
495
- #if PYOPENCL_CL_VERSION >= 0x3000
496
- ADD_ATTR(DEVICE_, NUMERIC_VERSION);
497
- ADD_ATTR(DEVICE_, EXTENSIONS_WITH_VERSION);
498
- ADD_ATTR(DEVICE_, ILS_WITH_VERSION);
499
- ADD_ATTR(DEVICE_, BUILT_IN_KERNELS_WITH_VERSION);
500
- ADD_ATTR(DEVICE_, ATOMIC_MEMORY_CAPABILITIES);
501
- ADD_ATTR(DEVICE_, ATOMIC_FENCE_CAPABILITIES);
502
- ADD_ATTR(DEVICE_, NON_UNIFORM_WORK_GROUP_SUPPORT);
503
- ADD_ATTR(DEVICE_, OPENCL_C_ALL_VERSIONS);
504
- ADD_ATTR(DEVICE_, PREFERRED_WORK_GROUP_SIZE_MULTIPLE);
505
- ADD_ATTR(DEVICE_, WORK_GROUP_COLLECTIVE_FUNCTIONS_SUPPORT);
506
- ADD_ATTR(DEVICE_, GENERIC_ADDRESS_SPACE_SUPPORT);
507
- ADD_ATTR(DEVICE_, OPENCL_C_FEATURES);
508
- #ifdef CL_DEVICE_DEVICE_ENQUEUE_SUPPORT
509
- // some busted headers shipped by Debian have this
510
- cls.attr("DEVICE_ENQUEUE_CAPABILITIES") = CL_DEVICE_DEVICE_ENQUEUE_SUPPORT;
511
- #else
512
- ADD_ATTR(DEVICE_, DEVICE_ENQUEUE_CAPABILITIES);
513
- #endif
514
- ADD_ATTR(DEVICE_, PIPE_SUPPORT);
515
- #endif
516
- /* cl_intel_advanced_motion_estimation */
517
- #ifdef CL_DEVICE_ME_VERSION_INTEL
518
- ADD_ATTR(DEVICE_, ME_VERSION_INTEL);
519
- #endif
520
-
521
- /* cl_qcom_ext_host_ptr */
522
- #ifdef CL_DEVICE_EXT_MEM_PADDING_IN_BYTES_QCOM
523
- ADD_ATTR(DEVICE_, EXT_MEM_PADDING_IN_BYTES_QCOM);
524
- #endif
525
- #ifdef CL_DEVICE_PAGE_SIZE_QCOM
526
- ADD_ATTR(DEVICE_, PAGE_SIZE_QCOM);
527
- #endif
528
-
529
- /* cl_khr_spir */
530
- #ifdef CL_DEVICE_SPIR_VERSIONS
531
- ADD_ATTR(DEVICE_, SPIR_VERSIONS);
532
- #endif
533
-
534
- /* cl_altera_device_temperature */
535
- #ifdef CL_DEVICE_CORE_TEMPERATURE_ALTERA
536
- ADD_ATTR(DEVICE_, CORE_TEMPERATURE_ALTERA);
537
- #endif
538
-
539
- /* cl_intel_simultaneous_sharing */
540
- #ifdef CL_DEVICE_SIMULTANEOUS_INTEROPS_INTEL
541
- ADD_ATTR(DEVICE_, SIMULTANEOUS_INTEROPS_INTEL);
542
- #endif
543
- #ifdef CL_DEVICE_NUM_SIMULTANEOUS_INTEROPS_INTEL
544
- ADD_ATTR(DEVICE_, NUM_SIMULTANEOUS_INTEROPS_INTEL);
545
- #endif
546
- }
547
-
548
- {
549
- py::class_<device_topology_type_amd> cls(m, "device_topology_type_amd");
550
- #ifdef CL_DEVICE_TOPOLOGY_TYPE_PCIE_AMD
551
- cls.attr("PCIE") = CL_DEVICE_TOPOLOGY_TYPE_PCIE_AMD;
552
- #endif
553
- }
554
-
555
- {
556
- py::class_<device_fp_config> cls(m, "device_fp_config");
557
- ADD_ATTR(FP_, DENORM);
558
- ADD_ATTR(FP_, INF_NAN);
559
- ADD_ATTR(FP_, ROUND_TO_NEAREST);
560
- ADD_ATTR(FP_, ROUND_TO_ZERO);
561
- ADD_ATTR(FP_, ROUND_TO_INF);
562
- ADD_ATTR(FP_, FMA);
563
- #if PYOPENCL_CL_VERSION >= 0x1010
564
- ADD_ATTR(FP_, SOFT_FLOAT);
565
- #endif
566
- #if PYOPENCL_CL_VERSION >= 0x1020
567
- ADD_ATTR(FP_, CORRECTLY_ROUNDED_DIVIDE_SQRT);
568
- #endif
569
- }
570
-
571
- {
572
- py::class_<device_mem_cache_type> cls(m, "device_mem_cache_type");
573
- ADD_ATTR( , NONE);
574
- ADD_ATTR( , READ_ONLY_CACHE);
575
- ADD_ATTR( , READ_WRITE_CACHE);
576
- }
577
-
578
- {
579
- py::class_<device_local_mem_type> cls(m, "device_local_mem_type");
580
- ADD_ATTR( , LOCAL);
581
- ADD_ATTR( , GLOBAL);
582
- }
583
-
584
- {
585
- py::class_<device_exec_capabilities> cls(m, "device_exec_capabilities");
586
- ADD_ATTR(EXEC_, KERNEL);
587
- ADD_ATTR(EXEC_, NATIVE_KERNEL);
588
- #ifdef CL_EXEC_IMMEDIATE_EXECUTION_INTEL
589
- ADD_ATTR(EXEC_, IMMEDIATE_EXECUTION_INTEL);
590
- #endif
591
- }
592
-
593
- {
594
- py::class_<device_svm_capabilities> cls(m, "device_svm_capabilities");
595
- #if PYOPENCL_CL_VERSION >= 0x2000
596
- // device_svm_capabilities
597
- ADD_ATTR(DEVICE_SVM_, COARSE_GRAIN_BUFFER);
598
- ADD_ATTR(DEVICE_SVM_, FINE_GRAIN_BUFFER);
599
- ADD_ATTR(DEVICE_SVM_, FINE_GRAIN_SYSTEM);
600
- ADD_ATTR(DEVICE_SVM_, ATOMICS);
601
- #endif
602
- }
603
-
604
- {
605
- py::class_<command_queue_properties> cls(m, "command_queue_properties");
606
- ADD_ATTR(QUEUE_, OUT_OF_ORDER_EXEC_MODE_ENABLE);
607
- ADD_ATTR(QUEUE_, PROFILING_ENABLE);
608
- #ifdef CL_QUEUE_IMMEDIATE_EXECUTION_ENABLE_INTEL
609
- ADD_ATTR(QUEUE_, IMMEDIATE_EXECUTION_ENABLE_INTEL);
610
- #endif
611
- #if PYOPENCL_CL_VERSION >= 0x2000
612
- ADD_ATTR(QUEUE_, ON_DEVICE);
613
- ADD_ATTR(QUEUE_, ON_DEVICE_DEFAULT);
614
- #endif
615
- }
616
-
617
- {
618
- py::class_<context_info> cls(m, "context_info");
619
- ADD_ATTR(CONTEXT_, REFERENCE_COUNT);
620
- ADD_ATTR(CONTEXT_, DEVICES);
621
- ADD_ATTR(CONTEXT_, PROPERTIES);
622
- #if PYOPENCL_CL_VERSION >= 0x1010
623
- ADD_ATTR(CONTEXT_, NUM_DEVICES);
624
- #endif
625
- #if PYOPENCL_CL_VERSION >= 0x1020
626
- ADD_ATTR(CONTEXT_, INTEROP_USER_SYNC);
627
- #endif
628
- }
629
-
630
- {
631
- py::class_<gl_context_info> cls(m, "gl_context_info");
632
- #if defined(cl_khr_gl_sharing) && (cl_khr_gl_sharing >= 1)
633
- ADD_ATTR(, CURRENT_DEVICE_FOR_GL_CONTEXT_KHR);
634
- ADD_ATTR(, DEVICES_FOR_GL_CONTEXT_KHR);
635
- #endif
636
- }
637
-
638
- {
639
- py::class_<context_properties> cls(m, "context_properties");
640
- ADD_ATTR(CONTEXT_, PLATFORM);
641
- #if defined(cl_khr_gl_sharing) && (cl_khr_gl_sharing >= 1)
642
- ADD_ATTR( ,GL_CONTEXT_KHR);
643
- ADD_ATTR( ,EGL_DISPLAY_KHR);
644
- ADD_ATTR( ,GLX_DISPLAY_KHR);
645
- ADD_ATTR( ,WGL_HDC_KHR);
646
- ADD_ATTR( ,CGL_SHAREGROUP_KHR);
647
- #endif
648
- #if defined(__APPLE__) && defined(HAVE_GL)
649
- ADD_ATTR( ,CONTEXT_PROPERTY_USE_CGL_SHAREGROUP_APPLE);
650
- #endif /* __APPLE__ */
651
- // cl_amd_offline_devices
652
- #ifdef CL_CONTEXT_OFFLINE_DEVICES_AMD
653
- ADD_ATTR(CONTEXT_, OFFLINE_DEVICES_AMD);
654
- #endif
655
- }
656
-
657
- {
658
- py::class_<command_queue_info> cls(m, "command_queue_info");
659
- ADD_ATTR(QUEUE_, CONTEXT);
660
- ADD_ATTR(QUEUE_, DEVICE);
661
- ADD_ATTR(QUEUE_, REFERENCE_COUNT);
662
- ADD_ATTR(QUEUE_, PROPERTIES);
663
- #if PYOPENCL_CL_VERSION >= 0x3000
664
- ADD_ATTR(QUEUE_, PROPERTIES_ARRAY);
665
- #endif
666
- }
667
-
668
- {
669
- py::class_<queue_properties> cls(m, "queue_properties");
670
- #if PYOPENCL_CL_VERSION >= 0x2000
671
- ADD_ATTR(QUEUE_, PROPERTIES);
672
- ADD_ATTR(QUEUE_, SIZE);
673
- #endif
674
- #if PYOPENCL_CL_VERSION >= 0x2010
675
- ADD_ATTR(QUEUE_, DEVICE_DEFAULT);
676
- #endif
677
- }
678
-
679
- {
680
- py::class_<mem_flags> cls(m, "mem_flags");
681
- ADD_ATTR(MEM_, READ_WRITE);
682
- ADD_ATTR(MEM_, WRITE_ONLY);
683
- ADD_ATTR(MEM_, READ_ONLY);
684
- ADD_ATTR(MEM_, USE_HOST_PTR);
685
- ADD_ATTR(MEM_, ALLOC_HOST_PTR);
686
- ADD_ATTR(MEM_, COPY_HOST_PTR);
687
- #ifdef cl_amd_device_memory_flags
688
- ADD_ATTR(MEM_, USE_PERSISTENT_MEM_AMD);
689
- #endif
690
- #if PYOPENCL_CL_VERSION >= 0x1020
691
- ADD_ATTR(MEM_, HOST_WRITE_ONLY);
692
- ADD_ATTR(MEM_, HOST_READ_ONLY);
693
- ADD_ATTR(MEM_, HOST_NO_ACCESS);
694
- #endif
695
- #if PYOPENCL_CL_VERSION >= 0x2000
696
- ADD_ATTR(MEM_, KERNEL_READ_AND_WRITE);
697
- #endif
698
- }
699
-
700
- {
701
- py::class_<svm_mem_flags> cls(m, "svm_mem_flags");
702
- #if PYOPENCL_CL_VERSION >= 0x2000
703
- ADD_ATTR(MEM_, READ_WRITE);
704
- ADD_ATTR(MEM_, WRITE_ONLY);
705
- ADD_ATTR(MEM_, READ_ONLY);
706
- ADD_ATTR(MEM_, SVM_FINE_GRAIN_BUFFER);
707
- ADD_ATTR(MEM_, SVM_ATOMICS);
708
- #endif
709
- }
710
-
711
- {
712
- py::class_<channel_order> cls(m, "channel_order");
713
- ADD_ATTR( , R);
714
- ADD_ATTR( , A);
715
- ADD_ATTR( , RG);
716
- ADD_ATTR( , RA);
717
- ADD_ATTR( , RGB);
718
- ADD_ATTR( , RGBA);
719
- ADD_ATTR( , BGRA);
720
- ADD_ATTR( , INTENSITY);
721
- ADD_ATTR( , LUMINANCE);
722
- #if PYOPENCL_CL_VERSION >= 0x1010
723
- ADD_ATTR( , Rx);
724
- ADD_ATTR( , RGx);
725
- ADD_ATTR( , RGBx);
726
- #endif
727
- #if PYOPENCL_CL_VERSION >= 0x2000
728
- ADD_ATTR( , sRGB);
729
- ADD_ATTR( , sRGBx);
730
- ADD_ATTR( , sRGBA);
731
- ADD_ATTR( , sBGRA);
732
- ADD_ATTR( , ABGR);
733
- #endif
734
- }
735
-
736
- {
737
- py::class_<channel_type> cls(m, "channel_type");
738
- ADD_ATTR( , SNORM_INT8);
739
- ADD_ATTR( , SNORM_INT16);
740
- ADD_ATTR( , UNORM_INT8);
741
- ADD_ATTR( , UNORM_INT16);
742
- ADD_ATTR( , UNORM_SHORT_565);
743
- ADD_ATTR( , UNORM_SHORT_555);
744
- ADD_ATTR( , UNORM_INT_101010);
745
- ADD_ATTR( , SIGNED_INT8);
746
- ADD_ATTR( , SIGNED_INT16);
747
- ADD_ATTR( , SIGNED_INT32);
748
- ADD_ATTR( , UNSIGNED_INT8);
749
- ADD_ATTR( , UNSIGNED_INT16);
750
- ADD_ATTR( , UNSIGNED_INT32);
751
- ADD_ATTR( , HALF_FLOAT);
752
- ADD_ATTR( , FLOAT);
753
- #if PYOPENCL_CL_VERSION >= 0x1020 && defined(cl_khr_gl_sharing)
754
- ADD_ATTR( , UNORM_INT24);
755
- #endif
756
- #if PYOPENCL_CL_VERSION >= 0x2010
757
- ADD_ATTR( , UNORM_INT_101010_2);
758
- #endif
759
- }
760
-
761
- {
762
- py::class_<mem_object_type> cls(m, "mem_object_type");
763
- ADD_ATTR(MEM_OBJECT_, BUFFER);
764
- ADD_ATTR(MEM_OBJECT_, IMAGE2D);
765
- ADD_ATTR(MEM_OBJECT_, IMAGE3D);
766
- #if PYOPENCL_CL_VERSION >= 0x1020
767
- ADD_ATTR(MEM_OBJECT_, IMAGE2D_ARRAY);
768
- ADD_ATTR(MEM_OBJECT_, IMAGE1D);
769
- ADD_ATTR(MEM_OBJECT_, IMAGE1D_ARRAY);
770
- ADD_ATTR(MEM_OBJECT_, IMAGE1D_BUFFER);
771
- #endif
772
- #if PYOPENCL_CL_VERSION >= 0x2000
773
- ADD_ATTR(MEM_OBJECT_, PIPE);
774
- #endif
775
- }
776
-
777
- {
778
- py::class_<mem_info> cls(m, "mem_info");
779
- ADD_ATTR(MEM_, TYPE);
780
- ADD_ATTR(MEM_, FLAGS);
781
- ADD_ATTR(MEM_, SIZE);
782
- ADD_ATTR(MEM_, HOST_PTR);
783
- ADD_ATTR(MEM_, MAP_COUNT);
784
- ADD_ATTR(MEM_, REFERENCE_COUNT);
785
- ADD_ATTR(MEM_, CONTEXT);
786
- #if PYOPENCL_CL_VERSION >= 0x1010
787
- ADD_ATTR(MEM_, ASSOCIATED_MEMOBJECT);
788
- ADD_ATTR(MEM_, OFFSET);
789
- #endif
790
- #if PYOPENCL_CL_VERSION >= 0x2000
791
- ADD_ATTR(MEM_, USES_SVM_POINTER);
792
- #endif
793
- #if PYOPENCL_CL_VERSION >= 0x3000
794
- ADD_ATTR(MEM_, PROPERTIES);
795
- #endif
796
- }
797
-
798
- {
799
- py::class_<image_info> cls(m, "image_info");
800
- ADD_ATTR(IMAGE_, FORMAT);
801
- ADD_ATTR(IMAGE_, ELEMENT_SIZE);
802
- ADD_ATTR(IMAGE_, ROW_PITCH);
803
- ADD_ATTR(IMAGE_, SLICE_PITCH);
804
- ADD_ATTR(IMAGE_, WIDTH);
805
- ADD_ATTR(IMAGE_, HEIGHT);
806
- ADD_ATTR(IMAGE_, DEPTH);
807
- #if PYOPENCL_CL_VERSION >= 0x1020
808
- ADD_ATTR(IMAGE_, ARRAY_SIZE);
809
- ADD_ATTR(IMAGE_, BUFFER);
810
- ADD_ATTR(IMAGE_, NUM_MIP_LEVELS);
811
- ADD_ATTR(IMAGE_, NUM_SAMPLES);
812
- #endif
813
- }
814
-
815
- {
816
- py::class_<pipe_info> cls(m, "pipe_info");
817
- #if PYOPENCL_CL_VERSION >= 0x2000
818
- ADD_ATTR(PIPE_, PACKET_SIZE);
819
- ADD_ATTR(PIPE_, MAX_PACKETS);
820
- #endif
821
- #if PYOPENCL_CL_VERSION >= 0x3000
822
- ADD_ATTR(PIPE_, PROPERTIES);
823
- #endif
824
- }
825
-
826
- {
827
- py::class_<pipe_properties> cls(m, "pipe_properties");
828
- #if PYOPENCL_CL_VERSION >= 0x2000
829
- ADD_ATTR(PIPE_, PACKET_SIZE);
830
- ADD_ATTR(PIPE_, MAX_PACKETS);
831
- #endif
832
- }
833
- {
834
- py::class_<addressing_mode> cls(m, "addressing_mode");
835
- ADD_ATTR(ADDRESS_, NONE);
836
- ADD_ATTR(ADDRESS_, CLAMP_TO_EDGE);
837
- ADD_ATTR(ADDRESS_, CLAMP);
838
- ADD_ATTR(ADDRESS_, REPEAT);
839
- #if PYOPENCL_CL_VERSION >= 0x1010
840
- ADD_ATTR(ADDRESS_, MIRRORED_REPEAT);
841
- #endif
842
- }
843
-
844
- {
845
- py::class_<filter_mode> cls(m, "filter_mode");
846
- ADD_ATTR(FILTER_, NEAREST);
847
- ADD_ATTR(FILTER_, LINEAR);
848
- }
849
-
850
- {
851
- py::class_<sampler_info> cls(m, "sampler_info");
852
- ADD_ATTR(SAMPLER_, REFERENCE_COUNT);
853
- ADD_ATTR(SAMPLER_, CONTEXT);
854
- ADD_ATTR(SAMPLER_, NORMALIZED_COORDS);
855
- ADD_ATTR(SAMPLER_, ADDRESSING_MODE);
856
- ADD_ATTR(SAMPLER_, FILTER_MODE);
857
- #if PYOPENCL_CL_VERSION >= 0x2000
858
- ADD_ATTR(SAMPLER_, MIP_FILTER_MODE);
859
- ADD_ATTR(SAMPLER_, LOD_MIN);
860
- ADD_ATTR(SAMPLER_, LOD_MAX);
861
- #endif
862
- #if PYOPENCL_CL_VERSION >= 0x3000
863
- ADD_ATTR(SAMPLER_, PROPERTIES);
864
- #endif
865
- // {{{ cl_khr_mipmap_image
866
- #ifdef CL_SAMPLER_MIP_FILTER_MODE_KHR
867
- ADD_ATTR(SAMPLER_, MIP_FILTER_MODE_KHR);
868
- ADD_ATTR(SAMPLER_, LOD_MIN_KHR);
869
- ADD_ATTR(SAMPLER_, LOD_MAX_KHR);
870
- #endif
871
- // }}}
872
- }
873
-
874
- {
875
- py::class_<sampler_properties> cls(m, "sampler_properties");
876
- ADD_ATTR(SAMPLER_, NORMALIZED_COORDS);
877
- ADD_ATTR(SAMPLER_, ADDRESSING_MODE);
878
- ADD_ATTR(SAMPLER_, FILTER_MODE);
879
- }
880
-
881
- {
882
- py::class_<map_flags> cls(m, "map_flags");
883
- ADD_ATTR(MAP_, READ);
884
- ADD_ATTR(MAP_, WRITE);
885
- #if PYOPENCL_CL_VERSION >= 0x1020
886
- ADD_ATTR(MAP_, WRITE_INVALIDATE_REGION);
887
- #endif
888
- }
889
-
890
- {
891
- py::class_<program_info> cls(m, "program_info");
892
- ADD_ATTR(PROGRAM_, REFERENCE_COUNT);
893
- ADD_ATTR(PROGRAM_, CONTEXT);
894
- ADD_ATTR(PROGRAM_, NUM_DEVICES);
895
- ADD_ATTR(PROGRAM_, DEVICES);
896
- ADD_ATTR(PROGRAM_, SOURCE);
897
- ADD_ATTR(PROGRAM_, BINARY_SIZES);
898
- ADD_ATTR(PROGRAM_, BINARIES);
899
- #if PYOPENCL_CL_VERSION >= 0x1020
900
- ADD_ATTR(PROGRAM_, NUM_KERNELS);
901
- ADD_ATTR(PROGRAM_, KERNEL_NAMES);
902
- #endif
903
- #if PYOPENCL_CL_VERSION >= 0x2010
904
- ADD_ATTR(PROGRAM_, IL);
905
- #endif
906
- #if PYOPENCL_CL_VERSION >= 0x2020
907
- ADD_ATTR(PROGRAM_, SCOPE_GLOBAL_CTORS_PRESENT);
908
- ADD_ATTR(PROGRAM_, SCOPE_GLOBAL_DTORS_PRESENT);
909
- #endif
910
- }
911
-
912
- {
913
- py::class_<program_build_info> cls(m, "program_build_info");
914
- ADD_ATTR(PROGRAM_BUILD_, STATUS);
915
- ADD_ATTR(PROGRAM_BUILD_, OPTIONS);
916
- ADD_ATTR(PROGRAM_BUILD_, LOG);
917
- #if PYOPENCL_CL_VERSION >= 0x1020
918
- ADD_ATTR(PROGRAM_, BINARY_TYPE);
919
- #endif
920
- #if PYOPENCL_CL_VERSION >= 0x2000
921
- ADD_ATTR(PROGRAM_BUILD_, GLOBAL_VARIABLE_TOTAL_SIZE);
922
- #endif
923
- }
924
-
925
- {
926
- py::class_<program_binary_type> cls(m, "program_binary_type");
927
- #if PYOPENCL_CL_VERSION >= 0x1020
928
- ADD_ATTR(PROGRAM_BINARY_TYPE_, NONE);
929
- ADD_ATTR(PROGRAM_BINARY_TYPE_, COMPILED_OBJECT);
930
- ADD_ATTR(PROGRAM_BINARY_TYPE_, LIBRARY);
931
- ADD_ATTR(PROGRAM_BINARY_TYPE_, EXECUTABLE);
932
- #endif
933
- }
934
-
935
- {
936
- py::class_<kernel_info> cls(m, "kernel_info");
937
- ADD_ATTR(KERNEL_, FUNCTION_NAME);
938
- ADD_ATTR(KERNEL_, NUM_ARGS);
939
- ADD_ATTR(KERNEL_, REFERENCE_COUNT);
940
- ADD_ATTR(KERNEL_, CONTEXT);
941
- ADD_ATTR(KERNEL_, PROGRAM);
942
- #if PYOPENCL_CL_VERSION >= 0x1020
943
- ADD_ATTR(KERNEL_, ATTRIBUTES);
944
- #endif
945
- }
946
-
947
- {
948
- py::class_<kernel_arg_info> cls(m, "kernel_arg_info");
949
- #if PYOPENCL_CL_VERSION >= 0x1020
950
- ADD_ATTR(KERNEL_ARG_, ADDRESS_QUALIFIER);
951
- ADD_ATTR(KERNEL_ARG_, ACCESS_QUALIFIER);
952
- ADD_ATTR(KERNEL_ARG_, TYPE_NAME);
953
- ADD_ATTR(KERNEL_ARG_, TYPE_QUALIFIER);
954
- ADD_ATTR(KERNEL_ARG_, NAME);
955
- #endif
956
- }
957
-
958
- {
959
- py::class_<kernel_arg_address_qualifier> cls(
960
- m, "kernel_arg_address_qualifier");
961
- #if PYOPENCL_CL_VERSION >= 0x1020
962
- ADD_ATTR(KERNEL_ARG_ADDRESS_, GLOBAL);
963
- ADD_ATTR(KERNEL_ARG_ADDRESS_, LOCAL);
964
- ADD_ATTR(KERNEL_ARG_ADDRESS_, CONSTANT);
965
- ADD_ATTR(KERNEL_ARG_ADDRESS_, PRIVATE);
966
- #endif
967
- }
968
-
969
- {
970
- py::class_<kernel_arg_access_qualifier> cls(
971
- m, "kernel_arg_access_qualifier");
972
- #if PYOPENCL_CL_VERSION >= 0x1020
973
- ADD_ATTR(KERNEL_ARG_ACCESS_, READ_ONLY);
974
- ADD_ATTR(KERNEL_ARG_ACCESS_, WRITE_ONLY);
975
- ADD_ATTR(KERNEL_ARG_ACCESS_, READ_WRITE);
976
- ADD_ATTR(KERNEL_ARG_ACCESS_, NONE);
977
- #endif
978
- }
979
-
980
- {
981
- py::class_<kernel_arg_type_qualifier> cls(
982
- m, "kernel_arg_type_qualifier");
983
- #if PYOPENCL_CL_VERSION >= 0x1020
984
- ADD_ATTR(KERNEL_ARG_TYPE_, NONE);
985
- ADD_ATTR(KERNEL_ARG_TYPE_, CONST);
986
- ADD_ATTR(KERNEL_ARG_TYPE_, RESTRICT);
987
- ADD_ATTR(KERNEL_ARG_TYPE_, VOLATILE);
988
- #endif
989
- #if PYOPENCL_CL_VERSION >= 0x2000
990
- ADD_ATTR(KERNEL_ARG_TYPE_, PIPE);
991
- #endif
992
- }
993
-
994
- {
995
- py::class_<kernel_work_group_info> cls(m, "kernel_work_group_info");
996
- ADD_ATTR(KERNEL_, WORK_GROUP_SIZE);
997
- ADD_ATTR(KERNEL_, COMPILE_WORK_GROUP_SIZE);
998
- ADD_ATTR(KERNEL_, LOCAL_MEM_SIZE);
999
- #if PYOPENCL_CL_VERSION >= 0x1010
1000
- ADD_ATTR(KERNEL_, PREFERRED_WORK_GROUP_SIZE_MULTIPLE);
1001
- ADD_ATTR(KERNEL_, PRIVATE_MEM_SIZE);
1002
- #endif
1003
- #if PYOPENCL_CL_VERSION >= 0x1020
1004
- ADD_ATTR(KERNEL_, GLOBAL_WORK_SIZE);
1005
- #endif
1006
- }
1007
-
1008
- {
1009
- py::class_<kernel_sub_group_info> cls(m, "kernel_sub_group_info");
1010
- #if PYOPENCL_CL_VERSION >= 0x2010
1011
- ADD_ATTR(KERNEL_, MAX_SUB_GROUP_SIZE_FOR_NDRANGE);
1012
- ADD_ATTR(KERNEL_, SUB_GROUP_COUNT_FOR_NDRANGE);
1013
- ADD_ATTR(KERNEL_, LOCAL_SIZE_FOR_SUB_GROUP_COUNT);
1014
- ADD_ATTR(KERNEL_, MAX_NUM_SUB_GROUPS);
1015
- ADD_ATTR(KERNEL_, COMPILE_NUM_SUB_GROUPS);
1016
- #endif
1017
- }
1018
-
1019
- {
1020
- py::class_<event_info> cls(m, "event_info");
1021
- ADD_ATTR(EVENT_, COMMAND_QUEUE);
1022
- ADD_ATTR(EVENT_, COMMAND_TYPE);
1023
- ADD_ATTR(EVENT_, REFERENCE_COUNT);
1024
- ADD_ATTR(EVENT_, COMMAND_EXECUTION_STATUS);
1025
- #if PYOPENCL_CL_VERSION >= 0x1010
1026
- ADD_ATTR(EVENT_, CONTEXT);
1027
- #endif
1028
- }
1029
-
1030
- {
1031
- py::class_<command_type> cls(m, "command_type");
1032
- ADD_ATTR(COMMAND_, NDRANGE_KERNEL);
1033
- ADD_ATTR(COMMAND_, TASK);
1034
- ADD_ATTR(COMMAND_, NATIVE_KERNEL);
1035
- ADD_ATTR(COMMAND_, READ_BUFFER);
1036
- ADD_ATTR(COMMAND_, WRITE_BUFFER);
1037
- ADD_ATTR(COMMAND_, COPY_BUFFER);
1038
- ADD_ATTR(COMMAND_, READ_IMAGE);
1039
- ADD_ATTR(COMMAND_, WRITE_IMAGE);
1040
- ADD_ATTR(COMMAND_, COPY_IMAGE);
1041
- ADD_ATTR(COMMAND_, COPY_IMAGE_TO_BUFFER);
1042
- ADD_ATTR(COMMAND_, COPY_BUFFER_TO_IMAGE);
1043
- ADD_ATTR(COMMAND_, MAP_BUFFER);
1044
- ADD_ATTR(COMMAND_, MAP_IMAGE);
1045
- ADD_ATTR(COMMAND_, UNMAP_MEM_OBJECT);
1046
- ADD_ATTR(COMMAND_, MARKER);
1047
- ADD_ATTR(COMMAND_, ACQUIRE_GL_OBJECTS);
1048
- ADD_ATTR(COMMAND_, RELEASE_GL_OBJECTS);
1049
- #if PYOPENCL_CL_VERSION >= 0x1010
1050
- ADD_ATTR(COMMAND_, READ_BUFFER_RECT);
1051
- ADD_ATTR(COMMAND_, WRITE_BUFFER_RECT);
1052
- ADD_ATTR(COMMAND_, COPY_BUFFER_RECT);
1053
- ADD_ATTR(COMMAND_, USER);
1054
- #endif
1055
- #if PYOPENCL_CL_VERSION >= 0x1020
1056
- ADD_ATTR(COMMAND_, BARRIER);
1057
- ADD_ATTR(COMMAND_, MIGRATE_MEM_OBJECTS);
1058
- ADD_ATTR(COMMAND_, FILL_BUFFER);
1059
- ADD_ATTR(COMMAND_, FILL_IMAGE);
1060
- #endif
1061
- #if PYOPENCL_CL_VERSION >= 0x2000
1062
- ADD_ATTR(COMMAND_, SVM_FREE);
1063
- ADD_ATTR(COMMAND_, SVM_MEMCPY);
1064
- ADD_ATTR(COMMAND_, SVM_MEMFILL);
1065
- ADD_ATTR(COMMAND_, SVM_MAP);
1066
- ADD_ATTR(COMMAND_, SVM_UNMAP);
1067
- #endif
1068
- #if PYOPENCL_CL_VERSION >= 0x3000
1069
- ADD_ATTR(COMMAND_, SVM_MIGRATE_MEM);
1070
- #endif
1071
- }
1072
-
1073
- {
1074
- py::class_<command_execution_status> cls(m, "command_execution_status");
1075
- ADD_ATTR(, COMPLETE);
1076
- ADD_ATTR(, RUNNING);
1077
- ADD_ATTR(, SUBMITTED);
1078
- ADD_ATTR(, QUEUED);
1079
- }
1080
-
1081
- {
1082
- py::class_<profiling_info> cls(m, "profiling_info");
1083
- ADD_ATTR(PROFILING_COMMAND_, QUEUED);
1084
- ADD_ATTR(PROFILING_COMMAND_, SUBMIT);
1085
- ADD_ATTR(PROFILING_COMMAND_, START);
1086
- ADD_ATTR(PROFILING_COMMAND_, END);
1087
- #if PYOPENCL_CL_VERSION >= 0x2000
1088
- ADD_ATTR(PROFILING_COMMAND_, COMPLETE);
1089
- #endif
1090
- }
1091
-
1092
- /* not needed--filled in automatically by implementation.
1093
- #if PYOPENCL_CL_VERSION >= 0x1010
1094
- {
1095
- py::class_<buffer_create_type> cls(m, "buffer_create_type");
1096
- ADD_ATTR(BUFFER_CREATE_TYPE_, REGION);
1097
- }
1098
- #endif
1099
- */
1100
-
1101
- {
1102
- py::class_<mem_migration_flags> cls(
1103
- m, "mem_migration_flags");
1104
- #if PYOPENCL_CL_VERSION >= 0x1020
1105
- ADD_ATTR(MIGRATE_MEM_OBJECT_, HOST);
1106
- ADD_ATTR(MIGRATE_MEM_OBJECT_, CONTENT_UNDEFINED);
1107
- #endif
1108
- }
1109
-
1110
- {
1111
- py::class_<device_partition_property> cls(
1112
- m, "device_partition_property");
1113
- #if PYOPENCL_CL_VERSION >= 0x1020
1114
- ADD_ATTR(DEVICE_PARTITION_, EQUALLY);
1115
- ADD_ATTR(DEVICE_PARTITION_, BY_COUNTS);
1116
- ADD_ATTR(DEVICE_PARTITION_, BY_COUNTS_LIST_END);
1117
- ADD_ATTR(DEVICE_PARTITION_, BY_AFFINITY_DOMAIN);
1118
- #endif
1119
- }
1120
-
1121
- {
1122
- py::class_<device_affinity_domain> cls(m, "device_affinity_domain");
1123
- #if PYOPENCL_CL_VERSION >= 0x1020
1124
- ADD_ATTR(DEVICE_AFFINITY_DOMAIN_, NUMA);
1125
- ADD_ATTR(DEVICE_AFFINITY_DOMAIN_, L4_CACHE);
1126
- ADD_ATTR(DEVICE_AFFINITY_DOMAIN_, L3_CACHE);
1127
- ADD_ATTR(DEVICE_AFFINITY_DOMAIN_, L2_CACHE);
1128
- ADD_ATTR(DEVICE_AFFINITY_DOMAIN_, L1_CACHE);
1129
- ADD_ATTR(DEVICE_AFFINITY_DOMAIN_, NEXT_PARTITIONABLE);
1130
- #endif
1131
- }
1132
-
1133
- {
1134
- py::class_<device_atomic_capabilities> cls(m, "device_atomic_capabilities");
1135
- #if PYOPENCL_CL_VERSION >= 0x3000
1136
- ADD_ATTR(DEVICE_ATOMIC_, ORDER_RELAXED);
1137
- ADD_ATTR(DEVICE_ATOMIC_, ORDER_ACQ_REL);
1138
- ADD_ATTR(DEVICE_ATOMIC_, ORDER_SEQ_CST);
1139
- ADD_ATTR(DEVICE_ATOMIC_, SCOPE_WORK_ITEM);
1140
- ADD_ATTR(DEVICE_ATOMIC_, SCOPE_WORK_GROUP);
1141
- ADD_ATTR(DEVICE_ATOMIC_, SCOPE_DEVICE);
1142
- ADD_ATTR(DEVICE_ATOMIC_, SCOPE_ALL_DEVICES);
1143
- #endif
1144
- }
1145
- {
1146
- py::class_<device_device_enqueue_capabilities> cls(m, "device_device_enqueue_capabilities");
1147
- #if (PYOPENCL_CL_VERSION >= 0x3000) && defined(CL_DEVICE_DEVICE_ENQUEUE_CAPABILITIES)
1148
- ADD_ATTR(DEVICE_QUEUE_, SUPPORTED);
1149
- ADD_ATTR(DEVICE_QUEUE_, REPLACEABLE_DEFAULT);
1150
- #endif
1151
- }
1152
-
1153
- {
1154
- py::class_<version_bits> cls(m, "version_bits");
1155
- #if PYOPENCL_CL_VERSION >= 0x3000
1156
- ADD_ATTR(VERSION_, MAJOR_BITS);
1157
- ADD_ATTR(VERSION_, MINOR_BITS);
1158
- ADD_ATTR(VERSION_, PATCH_BITS);
1159
-
1160
- ADD_ATTR(VERSION_, MAJOR_MASK);
1161
- ADD_ATTR(VERSION_, MINOR_MASK);
1162
- ADD_ATTR(VERSION_, PATCH_MASK);
1163
- #endif
1164
- }
1165
-
1166
- {
1167
- py::class_<khronos_vendor_id> cls(m, "khronos_vendor_id");
1168
- #if PYOPENCL_CL_VERSION >= 0x3000
1169
- ADD_ATTR(KHRONOS_VENDOR_ID_, CODEPLAY);
1170
- #endif
1171
- }
1172
-
1173
-
1174
- #ifdef HAVE_GL
1175
- {
1176
- py::class_<gl_object_type> cls(m, "gl_object_type");
1177
- ADD_ATTR(GL_OBJECT_, BUFFER);
1178
- ADD_ATTR(GL_OBJECT_, TEXTURE2D);
1179
- ADD_ATTR(GL_OBJECT_, TEXTURE3D);
1180
- ADD_ATTR(GL_OBJECT_, RENDERBUFFER);
1181
- }
1182
-
1183
- {
1184
- py::class_<gl_texture_info> cls(m, "gl_texture_info");
1185
- ADD_ATTR(GL_, TEXTURE_TARGET);
1186
- ADD_ATTR(GL_, MIPMAP_LEVEL);
1187
- }
1188
- #endif
1189
-
1190
- // }}}
1191
-
1192
- // {{{ cl_name_version
1193
- #if PYOPENCL_CL_VERSION >= 0x3000
1194
- {
1195
- typedef cl_name_version cls;
1196
- py::class_<cls>(m, "NameVersion")
1197
- .def("__init__",
1198
- [](cls *self, cl_version version, const std::string &name)
1199
- {
1200
- self->version = version;
1201
- self->name[0] = '\0';
1202
- // https://stackoverflow.com/a/1258577
1203
- strncat(self->name, name.c_str(), CL_NAME_VERSION_MAX_NAME_SIZE-1);
1204
- },
1205
- py::arg("version")=0,
1206
- py::arg("name")=0
1207
- )
1208
-
1209
- .def_prop_rw("version",
1210
- [](cls &t) { return t.version; },
1211
- [](cls &t, cl_version val) { t.version = val; })
1212
- .def_prop_rw("name",
1213
- [](cls &t) { return t.name; },
1214
- [](cls &t, const std::string &name)
1215
- {
1216
- t.name[0] = '\0';
1217
- // https://stackoverflow.com/a/1258577
1218
- strncat(t.name, name.c_str(), CL_NAME_VERSION_MAX_NAME_SIZE-1);
1219
- })
1220
- ;
1221
- }
1222
- #endif
1223
- // }}}
1224
-
1225
- // {{{ CL_DEVICE_TOPOLOGY_AMD
1226
-
1227
- #ifdef CL_DEVICE_TOPOLOGY_AMD
1228
- {
1229
- typedef cl_device_topology_amd cls;
1230
- py::class_<cls>(m, "DeviceTopologyAmd")
1231
- .def("__init__",
1232
-
1233
- // FIXME: Nanobind thinks of 'char' as "short string", not small integer.
1234
- // The detour via cl_int may lose data on assignment.
1235
- // [](cl_char bus, cl_char device, cl_char function)
1236
- [](cls *self, cl_int bus, cl_int device, cl_int function)
1237
- {
1238
- self->pcie.type = CL_DEVICE_TOPOLOGY_TYPE_PCIE_AMD;
1239
- self->pcie.bus = (cl_char) bus;
1240
- self->pcie.device = (cl_char) device;
1241
- self->pcie.function = (cl_char) function;
1242
- },
1243
- py::arg("bus")=0,
1244
- py::arg("device")=0,
1245
- py::arg("function")=0)
1246
-
1247
- .def_prop_rw("type",
1248
- [](cls &t) { return t.pcie.type; },
1249
- [](cls &t, cl_uint val) { t.pcie.type = val; })
1250
-
1251
- .def_prop_rw("bus",
1252
- [](cls &t) { return t.pcie.bus; },
1253
- // FIXME: Revert to cl_char when possible
1254
- [](cls &t, cl_int val) { t.pcie.bus = (cl_char) val; })
1255
- .def_prop_rw("device",
1256
- [](cls &t) { return t.pcie.device; },
1257
- // FIXME: Revert to cl_char when possible
1258
- [](cls &t, cl_int val) { t.pcie.device = (cl_char) val; })
1259
- .def_prop_rw("function",
1260
- [](cls &t) { return t.pcie.function; },
1261
- // FIXME: Revert to cl_char when possible
1262
- [](cls &t, cl_int val) { t.pcie.function = (cl_char) val; })
1263
- ;
1264
- }
1265
- #endif
1266
-
1267
- // }}}
1268
-
1269
- }
1270
-
1271
-
1272
-
1273
-
1274
- // vim: foldmethod=marker