Clover Git
OpenCL 1.1 software implementation
|
00001 /* 00002 * Copyright (c) 2011, Denis Steckelmacher <steckdenis@yahoo.fr> 00003 * All rights reserved. 00004 * 00005 * Redistribution and use in source and binary forms, with or without 00006 * modification, are permitted provided that the following conditions are met: 00007 * * Redistributions of source code must retain the above copyright 00008 * notice, this list of conditions and the following disclaimer. 00009 * * Redistributions in binary form must reproduce the above copyright 00010 * notice, this list of conditions and the following disclaimer in the 00011 * documentation and/or other materials provided with the distribution. 00012 * * Neither the name of the copyright holder nor the 00013 * names of its contributors may be used to endorse or promote products 00014 * derived from this software without specific prior written permission. 00015 * 00016 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 00017 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 00018 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00019 * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY 00020 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00021 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00022 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 00023 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00024 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00025 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00026 */ 00027 00033 #include "CL/cl.h" 00034 #include <core/cpu/device.h> 00035 00036 static Coal::CPUDevice cpudevice; 00037 00038 cl_int 00039 clGetDeviceIDs(cl_platform_id platform, 00040 cl_device_type device_type, 00041 cl_uint num_entries, 00042 cl_device_id * devices, 00043 cl_uint * num_devices) 00044 { 00045 if (platform != 0) 00046 // We currently implement only one platform 00047 return CL_INVALID_PLATFORM; 00048 00049 if (num_entries == 0 && devices != 0) 00050 return CL_INVALID_VALUE; 00051 00052 if (num_devices == 0 && devices == 0) 00053 return CL_INVALID_VALUE; 00054 00055 // We currently implement only CPU-based acceleration 00056 if (device_type & (CL_DEVICE_TYPE_DEFAULT | CL_DEVICE_TYPE_CPU)) 00057 { 00058 cpudevice.init(); 00059 00060 if (devices) 00061 devices[0] = (cl_device_id)(&cpudevice); 00062 00063 if (num_devices) 00064 *num_devices = 1; 00065 } 00066 else 00067 return CL_DEVICE_NOT_FOUND; 00068 00069 return CL_SUCCESS; 00070 } 00071 00072 cl_int 00073 clGetDeviceInfo(cl_device_id device, 00074 cl_device_info param_name, 00075 size_t param_value_size, 00076 void * param_value, 00077 size_t * param_value_size_ret) 00078 { 00079 if (!device->isA(Coal::Object::T_Device)) 00080 return CL_INVALID_DEVICE; 00081 00082 Coal::DeviceInterface *iface = (Coal::DeviceInterface *)device; 00083 return iface->info(param_name, param_value_size, param_value, 00084 param_value_size_ret); 00085 }