… | |
… | |
400 | |
400 | |
401 | void |
401 | void |
402 | info (OpenCL::Platform self, cl_platform_info name) |
402 | info (OpenCL::Platform self, cl_platform_info name) |
403 | PPCODE: |
403 | PPCODE: |
404 | INFO (Platform) |
404 | INFO (Platform) |
|
|
405 | |
|
|
406 | void |
|
|
407 | unload_compiler (OpenCL::Platform self) |
|
|
408 | CODE: |
|
|
409 | #if CL_VERSION_1_2 |
|
|
410 | clUnloadPlatformCompiler (self); |
|
|
411 | #endif |
405 | |
412 | |
406 | #BEGIN:platform |
413 | #BEGIN:platform |
407 | |
414 | |
408 | void |
415 | void |
409 | profile (OpenCL::Platform self) |
416 | profile (OpenCL::Platform self) |
… | |
… | |
1243 | if (ev) |
1250 | if (ev) |
1244 | XPUSH_NEW_OBJ ("OpenCL::Event", ev); |
1251 | XPUSH_NEW_OBJ ("OpenCL::Event", ev); |
1245 | |
1252 | |
1246 | #endif |
1253 | #endif |
1247 | |
1254 | |
1248 | #if !CL_VERSION_1_2 || defined CL_USE_DEPRECATED_OPENCL_1_1_APIS |
|
|
1249 | |
|
|
1250 | void |
1255 | void |
1251 | enqueue_wait_for_events (OpenCL::Queue self, ...) |
1256 | enqueue_wait_for_events (OpenCL::Queue self, ...) |
1252 | CODE: |
1257 | CODE: |
1253 | EVENT_LIST (1, items - 1); |
1258 | EVENT_LIST (1, items - 1); |
|
|
1259 | #if PREFER_1_1 |
1254 | NEED_SUCCESS (EnqueueWaitForEvents, (self, event_list_count, event_list_ptr)); |
1260 | NEED_SUCCESS (EnqueueWaitForEvents, (self, event_list_count, event_list_ptr)); |
1255 | |
1261 | #else |
|
|
1262 | NEED_SUCCESS (EnqueueBarrierWithWaitList, (self, event_list_count, event_list_ptr, 0)); |
1256 | #endif |
1263 | #endif |
1257 | |
1264 | |
1258 | void |
1265 | void |
1259 | enqueue_marker (OpenCL::Queue self, ...) |
1266 | enqueue_marker (OpenCL::Queue self, ...) |
1260 | PPCODE: |
1267 | PPCODE: |
1261 | cl_event ev = 0; |
1268 | cl_event ev = 0; |
1262 | EVENT_LIST (1, items - 1); |
1269 | EVENT_LIST (1, items - 1); |
1263 | #if PREFER_1_1 |
1270 | #if PREFER_1_1 |
|
|
1271 | if (!event_list_count) |
|
|
1272 | NEED_SUCCESS (EnqueueMarker, (self, GIMME_V != G_VOID ? &ev : 0)); |
|
|
1273 | else |
1264 | #if CL_VERSION_1_2 |
1274 | #if CL_VERSION_1_2 |
1265 | if (event_list_count) |
|
|
1266 | NEED_SUCCESS (EnqueueMarkerWithWaitList, (self, event_list_count, event_list_ptr, GIMME_V != G_VOID ? &ev : 0)); |
1275 | NEED_SUCCESS (EnqueueMarkerWithWaitList, (self, event_list_count, event_list_ptr, GIMME_V != G_VOID ? &ev : 0)); |
1267 | else |
|
|
1268 | NEED_SUCCESS (EnqueueMarker, (self, GIMME_V != G_VOID ? &ev : 0)); |
|
|
1269 | #else |
1276 | #else |
1270 | if (event_list_count) |
1277 | NEED_SUCCESS (EnqueueWaitForEvents, (self, event_list_count, event_list_ptr, GIMME_V != G_VOID ? &ev : 0)); // also a barrier |
1271 | croak ("OpenCL::Queue->enqueue_marker does not support a wait list in OpenCL 1.1 - upgrade to 1.2"); |
|
|
1272 | NEED_SUCCESS (EnqueueMarker, (self, GIMME_V != G_VOID ? &ev : 0)); |
|
|
1273 | #endif |
1278 | #endif |
1274 | #else |
1279 | #else |
1275 | NEED_SUCCESS (EnqueueMarkerWithWaitList, (self, event_list_count, event_list_ptr, GIMME_V != G_VOID ? &ev : 0)); |
1280 | NEED_SUCCESS (EnqueueMarkerWithWaitList, (self, event_list_count, event_list_ptr, GIMME_V != G_VOID ? &ev : 0)); |
1276 | #endif |
1281 | #endif |
1277 | if (ev) |
1282 | if (ev) |
… | |
… | |
1281 | enqueue_barrier (OpenCL::Queue self, ...) |
1286 | enqueue_barrier (OpenCL::Queue self, ...) |
1282 | PPCODE: |
1287 | PPCODE: |
1283 | cl_event ev = 0; |
1288 | cl_event ev = 0; |
1284 | EVENT_LIST (1, items - 1); |
1289 | EVENT_LIST (1, items - 1); |
1285 | #if PREFER_1_1 |
1290 | #if PREFER_1_1 |
|
|
1291 | if (!event_list_count && GIMME_V == G_VOID) |
|
|
1292 | NEED_SUCCESS (EnqueueBarrier, (self)); |
|
|
1293 | else |
1286 | #if CL_VERSION_1_2 |
1294 | #if CL_VERSION_1_2 |
1287 | if (event_list_count || GIMME_V != G_VOID) |
|
|
1288 | NEED_SUCCESS (EnqueueBarrierWithWaitList, (self, event_list_count, event_list_ptr, GIMME_V != G_VOID ? &ev : 0)); |
1295 | NEED_SUCCESS (EnqueueBarrierWithWaitList, (self, event_list_count, event_list_ptr, GIMME_V != G_VOID ? &ev : 0)); |
1289 | else |
|
|
1290 | NEED_SUCCESS (EnqueueBarrier, (self)); |
|
|
1291 | #else |
1296 | #else |
|
|
1297 | { |
1292 | if (event_list_count) |
1298 | if (event_list_count) |
1293 | croak ("OpenCL::Queue->enqueue_barrier does not support a wait list in OpenCL 1.1 - upgrade to 1.2"); |
1299 | NEED_SUCCESS (EnqueueWaitForEvents, (self, event_list_count, event_list_ptr, GIMME_V != G_VOID ? &ev : 0)); |
|
|
1300 | |
1294 | if (GIMME_V != G_VOID) |
1301 | if (GIMME_V != G_VOID) |
1295 | croak ("OpenCL::Queue->enqueue_barrier does not return an event object in OpenCL 1.1 - upgrade to 1.2"); |
|
|
1296 | NEED_SUCCESS (EnqueueBarrier, (self)); |
1302 | NEED_SUCCESS (EnqueueMarker, (self, &ev)); |
|
|
1303 | } |
1297 | #endif |
1304 | #endif |
1298 | #else |
1305 | #else |
1299 | NEED_SUCCESS (EnqueueBarrierWithWaitList, (self, event_list_count, event_list_ptr, GIMME_V != G_VOID ? &ev : 0)); |
1306 | NEED_SUCCESS (EnqueueBarrierWithWaitList, (self, event_list_count, event_list_ptr, GIMME_V != G_VOID ? &ev : 0)); |
1300 | #endif |
1307 | #endif |
1301 | if (ev) |
1308 | if (ev) |
… | |
… | |
1650 | void |
1657 | void |
1651 | kernel (OpenCL::Program program, SV *function) |
1658 | kernel (OpenCL::Program program, SV *function) |
1652 | PPCODE: |
1659 | PPCODE: |
1653 | NEED_SUCCESS_ARG (cl_kernel kernel, CreateKernel, (program, SvPVbyte_nolen (function), &res)); |
1660 | NEED_SUCCESS_ARG (cl_kernel kernel, CreateKernel, (program, SvPVbyte_nolen (function), &res)); |
1654 | XPUSH_NEW_OBJ ("OpenCL::Kernel", kernel); |
1661 | XPUSH_NEW_OBJ ("OpenCL::Kernel", kernel); |
|
|
1662 | |
|
|
1663 | void |
|
|
1664 | kernels_in_program (OpenCL::Program program) |
|
|
1665 | PPCODE: |
|
|
1666 | cl_uint num_kernels; |
|
|
1667 | NEED_SUCCESS (CreateKernelsInProgram, (program, 0, 0, &num_kernels)); |
|
|
1668 | cl_kernel *kernels = tmpbuf (sizeof (cl_kernel) * num_kernels); |
|
|
1669 | NEED_SUCCESS (CreateKernelsInProgram, (program, num_kernels, kernels, 0)); |
|
|
1670 | |
|
|
1671 | int i; |
|
|
1672 | EXTEND (SP, num_kernels); |
|
|
1673 | for (i = 0; i < num_kernels; ++i) |
|
|
1674 | PUSHs (NEW_MORTAL_OBJ ("OpenCL::Kernel", kernels [i])); |
1655 | |
1675 | |
1656 | void |
1676 | void |
1657 | info (OpenCL::Program self, cl_program_info name) |
1677 | info (OpenCL::Program self, cl_program_info name) |
1658 | PPCODE: |
1678 | PPCODE: |
1659 | INFO (Program) |
1679 | INFO (Program) |