cl_int clEnqueueReadImage(cl_command_queue command_queue, cl_mem image, cl_bool blocking_read, const size_t * origin, const size_t * region, size_t row_pitch, size_t slice_pitch, void * ptr, cl_uint num_events_in_wait_list, const cl_event * event_wait_list, cl_event * event) { cl_int rs = CL_SUCCESS; if (!command_queue->isA(Coal::Object::T_CommandQueue)) return CL_INVALID_COMMAND_QUEUE; if (!image || (image->type() != Coal::MemObject::Image2D && image->type() != Coal::MemObject::Image3D)) return CL_INVALID_MEM_OBJECT; Coal::ReadImageEvent *command = new Coal::ReadImageEvent( (Coal::CommandQueue *)command_queue, (Coal::Image2D *)image, origin, region, row_pitch, slice_pitch, (void *)ptr, num_events_in_wait_list, (const Coal::Event **)event_wait_list, &rs ); if (rs != CL_SUCCESS) { delete command; return rs; } return queueEvent(command_queue, command, event, blocking_read); }
cl_int clGetImageInfo(cl_mem image, cl_image_info param_name, size_t param_value_size, void * param_value, size_t * param_value_size_ret) { if (!image->isA(Coal::Object::T_MemObject) || (image->type() != Coal::MemObject::Image2D && image->type() != Coal::MemObject::Image3D)) return CL_INVALID_MEM_OBJECT; Coal::Image2D *image2d = (Coal::Image2D *)image; return image2d->imageInfo(param_name, param_value_size, param_value, param_value_size_ret); }
PUBLIC cl_int clGetMemObjectInfo(cl_mem obj, cl_mem_info param, size_t size, void *buf, size_t *size_ret) { if (!obj) return CL_INVALID_MEM_OBJECT; switch (param) { case CL_MEM_TYPE: return scalar_property<cl_mem_object_type>(buf, size, size_ret, obj->type()); case CL_MEM_FLAGS: return scalar_property<cl_mem_flags>(buf, size, size_ret, obj->flags()); case CL_MEM_SIZE: return scalar_property<size_t>(buf, size, size_ret, obj->size()); case CL_MEM_HOST_PTR: return scalar_property<void *>(buf, size, size_ret, obj->host_ptr()); case CL_MEM_MAP_COUNT: return scalar_property<cl_uint>(buf, size, size_ret, 0); case CL_MEM_REFERENCE_COUNT: return scalar_property<cl_uint>(buf, size, size_ret, obj->ref_count()); case CL_MEM_CONTEXT: return scalar_property<cl_context>(buf, size, size_ret, &obj->ctx); case CL_MEM_ASSOCIATED_MEMOBJECT: { sub_buffer *sub = dynamic_cast<sub_buffer *>(obj); return scalar_property<cl_mem>(buf, size, size_ret, (sub ? &sub->parent : NULL)); } case CL_MEM_OFFSET: { sub_buffer *sub = dynamic_cast<sub_buffer *>(obj); return scalar_property<size_t>(buf, size, size_ret, (sub ? sub->offset() : 0)); } default: return CL_INVALID_VALUE; } }