1c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// 2c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// Copyright 2012 Francisco Jerez 3c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// 4c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// Permission is hereby granted, free of charge, to any person obtaining a 5c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// copy of this software and associated documentation files (the "Software"), 6c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// to deal in the Software without restriction, including without limitation 7c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// the rights to use, copy, modify, merge, publish, distribute, sublicense, 8c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// and/or sell copies of the Software, and to permit persons to whom the 9c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// Software is furnished to do so, subject to the following conditions: 10c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// 11c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// The above copyright notice and this permission notice shall be included in 12c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// all copies or substantial portions of the Software. 13c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// 14c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 18c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 19c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// SOFTWARE. 21c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// 22c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 23c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez#include "api/util.hpp" 24c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez#include "core/device.hpp" 25c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 26c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerezusing namespace clover; 27c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 28c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerezstatic device_registry registry; 29c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 30c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezPUBLIC cl_int 31c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezclGetDeviceIDs(cl_platform_id platform, cl_device_type device_type, 32c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez cl_uint num_entries, cl_device_id *devices, 33c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez cl_uint *num_devices) { 34c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez std::vector<cl_device_id> devs; 35c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 36c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (platform != NULL) 37c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_INVALID_PLATFORM; 38c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 39c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if ((!num_entries && devices) || 40c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez (!num_devices && !devices)) 41c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_INVALID_VALUE; 42c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 43c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez // Collect matching devices 44c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez for (device &dev : registry) { 45c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (((device_type & CL_DEVICE_TYPE_DEFAULT) && 46c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez &dev == ®istry.front()) || 47c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez (device_type & dev.type())) 48c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez devs.push_back(&dev); 49c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez } 50c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 51c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (devs.empty()) 52c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_DEVICE_NOT_FOUND; 53c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 54c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez // ...and return the requested data. 55c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (num_devices) 56c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez *num_devices = devs.size(); 57c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (devices) 58c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez std::copy_n(devs.begin(), 59c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez std::min((cl_uint)devs.size(), num_entries), 60c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez devices); 61c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 62c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_SUCCESS; 63c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} 64c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 65c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezPUBLIC cl_int 66c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezclGetDeviceInfo(cl_device_id dev, cl_device_info param, 67c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez size_t size, void *buf, size_t *size_ret) { 68c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (!dev) 69c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_INVALID_DEVICE; 70c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 71c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez switch (param) { 72c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_TYPE: 73c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_device_type>(buf, size, size_ret, dev->type()); 74c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 75c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_VENDOR_ID: 76c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, dev->vendor_id()); 77c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 78c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_MAX_COMPUTE_UNITS: 79c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, 1); 80c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 81c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS: 82c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, 83c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez dev->max_block_size().size()); 84c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 85c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_MAX_WORK_ITEM_SIZES: 86c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return vector_property<size_t>(buf, size, size_ret, 87c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez dev->max_block_size()); 88c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 89c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_MAX_WORK_GROUP_SIZE: 905c9bccc97e9fb0776f2ca5bb57e55116a7efb43bChristoph Bumiller return scalar_property<size_t>(buf, size, size_ret, 915c9bccc97e9fb0776f2ca5bb57e55116a7efb43bChristoph Bumiller dev->max_threads_per_block()); 92c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 93c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR: 94c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, 16); 95c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 96c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT: 97c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, 8); 98c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 99c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT: 100c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, 4); 101c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 102c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG: 103c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, 2); 104c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 105c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT: 106c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, 4); 107c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 108c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE: 109c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, 2); 110c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 111c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF: 112c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, 0); 113c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 114c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_MAX_CLOCK_FREQUENCY: 115c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, 0); 116c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 117c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_ADDRESS_BITS: 118c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, 32); 119c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 120c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_MAX_READ_IMAGE_ARGS: 121c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, 122c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez dev->max_images_read()); 123c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 124c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_MAX_WRITE_IMAGE_ARGS: 125c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, 126c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez dev->max_images_write()); 127c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 128c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_MAX_MEM_ALLOC_SIZE: 129c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_ulong>(buf, size, size_ret, 0); 130c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 131c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_IMAGE2D_MAX_WIDTH: 132c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_IMAGE2D_MAX_HEIGHT: 133c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<size_t>(buf, size, size_ret, 134c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 1 << dev->max_image_levels_2d()); 135c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 136c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_IMAGE3D_MAX_WIDTH: 137c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_IMAGE3D_MAX_HEIGHT: 138c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_IMAGE3D_MAX_DEPTH: 139c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<size_t>(buf, size, size_ret, 140c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 1 << dev->max_image_levels_3d()); 141c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 142c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_IMAGE_SUPPORT: 143c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_bool>(buf, size, size_ret, CL_TRUE); 144c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 145c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_MAX_PARAMETER_SIZE: 146c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<size_t>(buf, size, size_ret, 147c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez dev->max_mem_input()); 148c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 149c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_MAX_SAMPLERS: 150c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, 151c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez dev->max_samplers()); 152c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 153c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_MEM_BASE_ADDR_ALIGN: 154c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE: 155c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, 128); 156c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 157c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_SINGLE_FP_CONFIG: 158c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_device_fp_config>(buf, size, size_ret, 159c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez CL_FP_DENORM | CL_FP_INF_NAN | CL_FP_ROUND_TO_NEAREST); 160c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 161c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_GLOBAL_MEM_CACHE_TYPE: 162c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_device_mem_cache_type>(buf, size, size_ret, 163c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez CL_NONE); 164c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 165c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE: 166c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, 0); 167c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 168c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_GLOBAL_MEM_CACHE_SIZE: 169c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_ulong>(buf, size, size_ret, 0); 170c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 171c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_GLOBAL_MEM_SIZE: 172c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_ulong>(buf, size, size_ret, 173c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez dev->max_mem_global()); 174c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 175c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE: 176c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_ulong>(buf, size, size_ret, 177c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez dev->max_const_buffer_size()); 178c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 179c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_MAX_CONSTANT_ARGS: 180c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, 181c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez dev->max_const_buffers()); 182c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 183c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_LOCAL_MEM_TYPE: 184c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_device_local_mem_type>(buf, size, size_ret, 185c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez CL_LOCAL); 186c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 187c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_LOCAL_MEM_SIZE: 188c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_ulong>(buf, size, size_ret, 189c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez dev->max_mem_local()); 190c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 191c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_ERROR_CORRECTION_SUPPORT: 192c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_bool>(buf, size, size_ret, CL_FALSE); 193c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 194c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_PROFILING_TIMER_RESOLUTION: 195c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<size_t>(buf, size, size_ret, 0); 196c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 197c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_ENDIAN_LITTLE: 198c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_bool>(buf, size, size_ret, CL_TRUE); 199c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 200c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_AVAILABLE: 201c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_COMPILER_AVAILABLE: 202c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_bool>(buf, size, size_ret, CL_TRUE); 203c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 204c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_EXECUTION_CAPABILITIES: 205c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_device_exec_capabilities>(buf, size, size_ret, 206c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez CL_EXEC_KERNEL); 207c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 208c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_QUEUE_PROPERTIES: 209c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_command_queue_properties>(buf, size, size_ret, 210c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez CL_QUEUE_PROFILING_ENABLE); 211c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 212c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_NAME: 213c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return string_property(buf, size, size_ret, dev->device_name()); 214c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 215c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_VENDOR: 216c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return string_property(buf, size, size_ret, dev->vendor_name()); 217c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 218c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DRIVER_VERSION: 219c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return string_property(buf, size, size_ret, MESA_VERSION); 220c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 221c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_PROFILE: 222c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return string_property(buf, size, size_ret, "FULL_PROFILE"); 223c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 224c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_VERSION: 225c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return string_property(buf, size, size_ret, "OpenCL 1.1 MESA " MESA_VERSION); 226c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 227c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_EXTENSIONS: 228c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return string_property(buf, size, size_ret, ""); 229c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 230c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_PLATFORM: 231c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_platform_id>(buf, size, size_ret, NULL); 232c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 233c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_HOST_UNIFIED_MEMORY: 234c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_bool>(buf, size, size_ret, CL_TRUE); 235c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 236c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR: 237c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, 16); 238c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 239c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT: 240c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, 8); 241c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 242c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_NATIVE_VECTOR_WIDTH_INT: 243c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, 4); 244c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 245c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG: 246c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, 2); 247c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 248c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT: 249c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, 4); 250c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 251c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE: 252c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, 2); 253c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 254c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF: 255c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, 0); 256c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 257c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_DEVICE_OPENCL_C_VERSION: 258c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return string_property(buf, size, size_ret, "OpenCL C 1.1"); 259c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 260c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez default: 261c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_INVALID_VALUE; 262c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez } 263c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} 264