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