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