1c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// 2c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// Copyright 2012 Francisco Jerez 3c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// 4c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// Permission is hereby granted, free of charge, to any person obtaining a 5c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// copy of this software and associated documentation files (the "Software"), 6c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// to deal in the Software without restriction, including without limitation 7c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// the rights to use, copy, modify, merge, publish, distribute, sublicense, 8c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// and/or sell copies of the Software, and to permit persons to whom the 9c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// Software is furnished to do so, subject to the following conditions: 10c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// 11c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// The above copyright notice and this permission notice shall be included in 12c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// all copies or substantial portions of the Software. 13c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// 14c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 18c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 19c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// SOFTWARE. 21c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// 22c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 23c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez#include "api/util.hpp" 24c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez#include "core/event.hpp" 25c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 26c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerezusing namespace clover; 27c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 28c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezPUBLIC cl_event 29c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezclCreateUserEvent(cl_context ctx, cl_int *errcode_ret) try { 30c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (!ctx) 31c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez throw error(CL_INVALID_CONTEXT); 32c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 33c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez ret_error(errcode_ret, CL_SUCCESS); 34c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return new soft_event(*ctx, {}, false); 35c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 36c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} catch(error &e) { 37c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez ret_error(errcode_ret, e); 38c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return NULL; 39c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} 40c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 41c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezPUBLIC cl_int 42c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezclSetUserEventStatus(cl_event ev, cl_int status) { 43c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (!dynamic_cast<soft_event *>(ev)) 44c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_INVALID_EVENT; 45c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 46c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (status > 0) 47c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_INVALID_VALUE; 48c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 49c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (ev->status() <= 0) 50c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_INVALID_OPERATION; 51c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 52c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (status) 53c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez ev->abort(status); 54c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez else 55c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez ev->trigger(); 56c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 57c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_SUCCESS; 58c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} 59c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 60c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezPUBLIC cl_int 61c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezclWaitForEvents(cl_uint num_evs, const cl_event *evs) try { 62c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (!num_evs || !evs) 63c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez throw error(CL_INVALID_VALUE); 64c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 65c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez std::for_each(evs, evs + num_evs, [&](const cl_event ev) { 66c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (!ev) 67c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez throw error(CL_INVALID_EVENT); 68c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 69c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (&ev->ctx != &evs[0]->ctx) 70c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez throw error(CL_INVALID_CONTEXT); 71c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 72c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (ev->status() < 0) 73c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez throw error(CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST); 74c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez }); 75c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 76c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez // Create a temporary soft event that depends on all the events in 77c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez // the wait list 78c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez ref_ptr<soft_event> sev = transfer( 79c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez new soft_event(evs[0]->ctx, { evs, evs + num_evs }, true)); 80c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 81c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez // ...and wait on it. 82c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez sev->wait(); 83c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 84c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_SUCCESS; 85c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 86c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} catch(error &e) { 87c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return e.get(); 88c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} 89c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 90c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezPUBLIC cl_int 91c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezclGetEventInfo(cl_event ev, cl_event_info param, 92c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez size_t size, void *buf, size_t *size_ret) { 93c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (!ev) 94c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_INVALID_EVENT; 95c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 96c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez switch (param) { 97c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_EVENT_COMMAND_QUEUE: 98c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_command_queue>(buf, size, size_ret, ev->queue()); 99c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 100c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_EVENT_CONTEXT: 101c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_context>(buf, size, size_ret, &ev->ctx); 102c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 103c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_EVENT_COMMAND_TYPE: 104c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_command_type>(buf, size, size_ret, ev->command()); 105c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 106c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_EVENT_COMMAND_EXECUTION_STATUS: 107c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_int>(buf, size, size_ret, ev->status()); 108c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 109c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_EVENT_REFERENCE_COUNT: 110c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, ev->ref_count()); 111c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 112c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez default: 113c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_INVALID_VALUE; 114c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez } 115c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} 116c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 117c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezPUBLIC cl_int 118c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezclSetEventCallback(cl_event ev, cl_int type, 119c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez void (CL_CALLBACK *pfn_event_notify)(cl_event, cl_int, 120c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez void *), 121c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez void *user_data) try { 122c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (!ev) 123c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez throw error(CL_INVALID_EVENT); 124c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 125c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (!pfn_event_notify || type != CL_COMPLETE) 126c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez throw error(CL_INVALID_VALUE); 127c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 128c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez // Create a temporary soft event that depends on ev, with 129c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez // pfn_event_notify as completion action. 130c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez ref_ptr<soft_event> sev = transfer( 131c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez new soft_event(ev->ctx, { ev }, true, 132c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez [=](event &) { 133c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez ev->wait(); 134c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez pfn_event_notify(ev, ev->status(), user_data); 135c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez })); 136c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 137c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_SUCCESS; 138c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 139c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} catch(error &e) { 140c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return e.get(); 141c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} 142c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 143c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezPUBLIC cl_int 144c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezclRetainEvent(cl_event ev) { 145c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (!ev) 146c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_INVALID_EVENT; 147c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 148c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez ev->retain(); 149c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_SUCCESS; 150c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} 151c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 152c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezPUBLIC cl_int 153c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezclReleaseEvent(cl_event ev) { 154c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (!ev) 155c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_INVALID_EVENT; 156c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 157c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (ev->release()) 158c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez delete ev; 159c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 160c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_SUCCESS; 161c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} 162c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 163c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezPUBLIC cl_int 164c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezclEnqueueMarker(cl_command_queue q, cl_event *ev) try { 165c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (!q) 166c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez throw error(CL_INVALID_COMMAND_QUEUE); 167c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 168c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (!ev) 169c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez throw error(CL_INVALID_VALUE); 170c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 171c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez *ev = new hard_event(*q, CL_COMMAND_MARKER, {}); 172c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 173c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_SUCCESS; 174c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 175c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} catch(error &e) { 176c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return e.get(); 177c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} 178c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 179c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezPUBLIC cl_int 180c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezclEnqueueBarrier(cl_command_queue q) { 181c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (!q) 182c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_INVALID_COMMAND_QUEUE; 183c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 184c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez // No need to do anything, q preserves data ordering strictly. 185c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_SUCCESS; 186c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} 187c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 188c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezPUBLIC cl_int 189c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezclEnqueueWaitForEvents(cl_command_queue q, cl_uint num_evs, 190c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez const cl_event *evs) try { 191c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (!q) 192c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez throw error(CL_INVALID_COMMAND_QUEUE); 193c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 194c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (!num_evs || !evs) 195c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez throw error(CL_INVALID_VALUE); 196c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 197c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez std::for_each(evs, evs + num_evs, [&](const cl_event ev) { 198c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (!ev) 199c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez throw error(CL_INVALID_EVENT); 200c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 201c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (&ev->ctx != &q->ctx) 202c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez throw error(CL_INVALID_CONTEXT); 203c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez }); 204c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 205c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez // Create a hard event that depends on the events in the wait list: 206c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez // subsequent commands in the same queue will be implicitly 207c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez // serialized with respect to it -- hard events always are. 208c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez ref_ptr<hard_event> hev = transfer( 209c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez new hard_event(*q, 0, { evs, evs + num_evs })); 210c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 211c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_SUCCESS; 212c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 213c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} catch(error &e) { 214c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return e.get(); 215c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} 216c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 217c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezPUBLIC cl_int 218c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezclGetEventProfilingInfo(cl_event ev, cl_profiling_info param, 219c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez size_t size, void *buf, size_t *size_ret) { 220c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_PROFILING_INFO_NOT_AVAILABLE; 221c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} 222c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 223c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezPUBLIC cl_int 224c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezclFinish(cl_command_queue q) try { 225c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (!q) 226c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez throw error(CL_INVALID_COMMAND_QUEUE); 227c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 228c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez // Create a temporary hard event -- it implicitly depends on all 229c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez // the previously queued hard events. 230c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez ref_ptr<hard_event> hev = transfer(new hard_event(*q, 0, { })); 231c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 232c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez // And wait on it. 233c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez hev->wait(); 234c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 235c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_SUCCESS; 236c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 237c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} catch(error &e) { 238c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return e.get(); 239c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} 240