Clover Git
OpenCL 1.1 software implementation

api_platform.cpp

Go to the documentation of this file.
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 <cstring>
00035 #include <core/config.h>
00036 
00037 static const char platform_profile[] = "FULL_PROFILE";
00038 static const char platform_version[] = "OpenCL 1.1 MESA " COAL_VERSION;
00039 static const char platform_name[] = "Default";
00040 static const char platform_vendor[] = "Mesa";
00041 static const char platform_extensions[] = "cl_khr_fp64 cl_khr_int64_base_atomics cl_khr_int64_extended_atomics";
00042 
00043 // Platform API
00044 
00045 cl_int CL_API_CALL
00046 clGetPlatformIDs(cl_uint          num_entries,
00047                  cl_platform_id * platforms,
00048                  cl_uint *        num_platforms)
00049 {
00050     if (num_platforms)
00051         *num_platforms = 1;
00052     else if (!platforms)
00053         return CL_INVALID_VALUE;
00054 
00055     if (!num_entries && platforms)
00056         return CL_INVALID_VALUE;
00057 
00058     if (platforms != 0)
00059         // Only one "default" platform, identified by NULL
00060         *platforms = 0;
00061 
00062     return CL_SUCCESS;
00063 }
00064 
00065 cl_int
00066 clGetPlatformInfo(cl_platform_id   platform,
00067                   cl_platform_info param_name,
00068                   size_t           param_value_size,
00069                   void *           param_value,
00070                   size_t *         param_value_size_ret)
00071 {
00072     const char *string = 0;
00073     unsigned long len = 0;
00074 
00075     if (platform != 0)
00076         // NULL or what is returned by clGetPlatformIDs, that's to say also NULL
00077         return CL_INVALID_PLATFORM;
00078 
00079     switch (param_name) {
00080         case CL_PLATFORM_PROFILE:
00081             string = platform_profile;
00082             len = sizeof(platform_profile);
00083             break;
00084 
00085         case CL_PLATFORM_VERSION:
00086             string = platform_version;
00087             len = sizeof(platform_version);
00088             break;
00089 
00090         case CL_PLATFORM_NAME:
00091             string = platform_name;
00092             len = sizeof(platform_name);
00093             break;
00094 
00095         case CL_PLATFORM_VENDOR:
00096             string = platform_vendor;
00097             len = sizeof(platform_vendor);
00098             break;
00099 
00100         case CL_PLATFORM_EXTENSIONS:
00101             string = platform_extensions;
00102             len = sizeof(platform_extensions);
00103             break;
00104 
00105         default:
00106             return CL_INVALID_VALUE;
00107     }
00108 
00109     if (param_value_size < len && param_value != 0)
00110         return CL_INVALID_VALUE;
00111 
00112     if (param_value != 0)
00113         std::memcpy(param_value, string, len);
00114 
00115     if (param_value_size_ret)
00116         *param_value_size_ret = len;
00117 
00118     return CL_SUCCESS;
00119 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines