cl_int clGetCommandQueueInfoFCL (cl_command_queue command_queue, cl_command_queue_info param_name, size_t param_value_size, void *param_value, size_t *param_value_size_ret) { MSG(clGetCommandQueueInfoFCL); if (!FreeOCL::is_valid(command_queue)) return CL_INVALID_COMMAND_QUEUE; bool bTooSmall = false; switch(param_name) { case CL_QUEUE_CONTEXT: bTooSmall = SET_VAR(command_queue->context); break; case CL_QUEUE_DEVICE: bTooSmall = SET_VAR(command_queue->device); break; case CL_QUEUE_REFERENCE_COUNT: bTooSmall = SET_VAR(command_queue->get_ref_count()); break; case CL_QUEUE_PROPERTIES: bTooSmall = SET_VAR(command_queue->properties); break; default: command_queue->unlock(); return CL_INVALID_VALUE; } command_queue->unlock(); if (bTooSmall && param_value != NULL) return CL_INVALID_VALUE; return CL_SUCCESS; }
cl_int clReleaseCommandQueueFCL (cl_command_queue command_queue) { MSG(clReleaseCommandQueueFCL); if (!FreeOCL::is_valid(command_queue)) return CL_INVALID_COMMAND_QUEUE; command_queue->release(); if (command_queue->get_ref_count() == 0) { command_queue->invalidate(); command_queue->unlock(); delete command_queue; } else command_queue->unlock(); return CL_SUCCESS; }