operator cl_event() const { cl_int err = CL_SUCCESS; if(e_.size() == 1) { return e_[0]; } if(!e_.empty()) { cl_context ctx = get_info<command_queue::context_info_type>(command_queue()); cl_event e = clCreateUserEvent(ctx, &err); OCLM_THROW_IF_EXCEPTION(err, "clCreateUserEvents"); #ifdef CL_VERSION_1_2 err = clEnqueueMarkerWithWaitList(command_queue(), static_cast<cl_uint>(e_.size()), &e_[0], &e); OCLM_THROW_IF_EXCEPTION(err, "clEnqueueMarkerWithWaitList"); #else get(); err = clSetUserEventStatus(e, CL_COMPLETE); #endif return e; } else return cl_event(); }
static VbResult normal_queue(Client *c, const NormalCmdInfo *info) { #ifdef FEATURE_QUEUE command_queue(c, &((Arg){COMMAND_QUEUE_POP})); #endif return RESULT_COMPLETE; }
command_queue default_queue() { static command_queue queue; if (!queue.get()) { context c = default_context(); device d = default_device(); queue = command_queue(c, d); } return queue; }
inline command_queue default_queue_for_copy(InputIterator first, OutputIterator result, typename boost::enable_if< typename boost::mpl::and_< is_buffer_iterator<InputIterator>, boost::mpl::not_<is_buffer_iterator<OutputIterator> > > >::type* = 0) { (void) result; const buffer &buffer = first.get_buffer(); const context &context = buffer.get_context(); const device &device = context.get_device(); return command_queue(context, device); }
/// Create command queue on the same context and device as the given one. inline command_queue duplicate_queue(const command_queue &q) { return command_queue(q.context(), q.device(), q.flags()); }