1 /******************************************************************************* 2 * Copyright (c) 2008-2013 The Khronos Group Inc. 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and/or associated documentation files (the 6 * "Materials"), to deal in the Materials without restriction, including 7 * without limitation the rights to use, copy, modify, merge, publish, 8 * distribute, sublicense, and/or sell copies of the Materials, and to 9 * permit persons to whom the Materials are furnished to do so, subject to 10 * the following conditions: 11 * 12 * The above copyright notice and this permission notice shall be included 13 * in all copies or substantial portions of the Materials. 14 * 15 * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 19 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 20 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 21 * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. 22 ******************************************************************************/ 23 24 /* $Revision: 11928 $ on $Date: 2010-07-13 09:04:56 -0700 (Tue, 13 Jul 2010) $ */ 25 26 /* cl_ext.h contains OpenCL extensions which don't have external */ 27 /* (OpenGL, D3D) dependencies. */ 28 29 #ifndef __CL_EXT_H 30 #define __CL_EXT_H 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 #ifdef __APPLE__ 37 #include <OpenCL/cl.h> 38 #include <AvailabilityMacros.h> 39 #else 40 #include <CL/cl.h> 41 #endif 42 43 /* cl_khr_fp16 extension - no extension #define since it has no functions */ 44 #define CL_DEVICE_HALF_FP_CONFIG 0x1033 45 46 /* Memory object destruction 47 * 48 * Apple extension for use to manage externally allocated buffers used with cl_mem objects with CL_MEM_USE_HOST_PTR 49 * 50 * Registers a user callback function that will be called when the memory object is deleted and its resources 51 * freed. Each call to clSetMemObjectCallbackFn registers the specified user callback function on a callback 52 * stack associated with memobj. The registered user callback functions are called in the reverse order in 53 * which they were registered. The user callback functions are called and then the memory object is deleted 54 * and its resources freed. This provides a mechanism for the application (and libraries) using memobj to be 55 * notified when the memory referenced by host_ptr, specified when the memory object is created and used as 56 * the storage bits for the memory object, can be reused or freed. 57 * 58 * The application may not call CL api's with the cl_mem object passed to the pfn_notify. 59 * 60 * Please check for the "cl_APPLE_SetMemObjectDestructor" extension using clGetDeviceInfo(CL_DEVICE_EXTENSIONS) 61 * before using. 62 */ 63 #define cl_APPLE_SetMemObjectDestructor 1 64 cl_int CL_API_ENTRY clSetMemObjectDestructorAPPLE( cl_mem /* memobj */, 65 void (* /*pfn_notify*/)( cl_mem /* memobj */, void* /*user_data*/), 66 void * /*user_data */ ) CL_EXT_SUFFIX__VERSION_1_0; 67 68 69 /* Context Logging Functions 70 * 71 * The next three convenience functions are intended to be used as the pfn_notify parameter to clCreateContext(). 72 * Please check for the "cl_APPLE_ContextLoggingFunctions" extension using clGetDeviceInfo(CL_DEVICE_EXTENSIONS) 73 * before using. 74 * 75 * clLogMessagesToSystemLog fowards on all log messages to the Apple System Logger 76 */ 77 #define cl_APPLE_ContextLoggingFunctions 1 78 extern void CL_API_ENTRY clLogMessagesToSystemLogAPPLE( const char * /* errstr */, 79 const void * /* private_info */, 80 size_t /* cb */, 81 void * /* user_data */ ) CL_EXT_SUFFIX__VERSION_1_0; 82 83 /* clLogMessagesToStdout sends all log messages to the file descriptor stdout */ 84 extern void CL_API_ENTRY clLogMessagesToStdoutAPPLE( const char * /* errstr */, 85 const void * /* private_info */, 86 size_t /* cb */, 87 void * /* user_data */ ) CL_EXT_SUFFIX__VERSION_1_0; 88 89 /* clLogMessagesToStderr sends all log messages to the file descriptor stderr */ 90 extern void CL_API_ENTRY clLogMessagesToStderrAPPLE( const char * /* errstr */, 91 const void * /* private_info */, 92 size_t /* cb */, 93 void * /* user_data */ ) CL_EXT_SUFFIX__VERSION_1_0; 94 95 96 /************************ 97 * cl_khr_icd extension * 98 ************************/ 99 #define cl_khr_icd 1 100 101 /* cl_platform_info */ 102 #define CL_PLATFORM_ICD_SUFFIX_KHR 0x0920 103 104 /* Additional Error Codes */ 105 #define CL_PLATFORM_NOT_FOUND_KHR -1001 106 107 extern CL_API_ENTRY cl_int CL_API_CALL 108 clIcdGetPlatformIDsKHR(cl_uint /* num_entries */, 109 cl_platform_id * /* platforms */, 110 cl_uint * /* num_platforms */); 111 112 typedef CL_API_ENTRY cl_int (CL_API_CALL *clIcdGetPlatformIDsKHR_fn)( 113 cl_uint /* num_entries */, 114 cl_platform_id * /* platforms */, 115 cl_uint * /* num_platforms */); 116 117 118 /* Extension: cl_khr_image2D_buffer 119 * 120 * This extension allows a 2D image to be created from a cl_mem buffer without a copy. 121 * The type associated with a 2D image created from a buffer in an OpenCL program is image2d_t. 122 * Both the sampler and sampler-less read_image built-in functions are supported for 2D images 123 * and 2D images created from a buffer. Similarly, the write_image built-ins are also supported 124 * for 2D images created from a buffer. 125 * 126 * When the 2D image from buffer is created, the client must specify the width, 127 * height, image format (i.e. channel order and channel data type) and optionally the row pitch 128 * 129 * The pitch specified must be a multiple of CL_DEVICE_IMAGE_PITCH_ALIGNMENT pixels. 130 * The base address of the buffer must be aligned to CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT pixels. 131 */ 132 133 /************************************* 134 * cl_khr_initalize_memory extension * 135 *************************************/ 136 137 #define CL_CONTEXT_MEMORY_INITIALIZE_KHR 0x200E 138 139 140 /************************************** 141 * cl_khr_terminate_context extension * 142 **************************************/ 143 144 #define CL_DEVICE_TERMINATE_CAPABILITY_KHR 0x200F 145 #define CL_CONTEXT_TERMINATE_KHR 0x2010 146 147 #define cl_khr_terminate_context 1 148 extern CL_API_ENTRY cl_int CL_API_CALL clTerminateContextKHR(cl_context /* context */) CL_EXT_SUFFIX__VERSION_1_2; 149 150 typedef CL_API_ENTRY cl_int (CL_API_CALL *clTerminateContextKHR_fn)(cl_context /* context */) CL_EXT_SUFFIX__VERSION_1_2; 151 152 153 /* 154 * Extension: cl_khr_spir 155 * 156 * This extension adds support to create an OpenCL program object from a 157 * Standard Portable Intermediate Representation (SPIR) instance 158 */ 159 160 /****************************************** 161 * cl_nv_device_attribute_query extension * 162 ******************************************/ 163 /* cl_nv_device_attribute_query extension - no extension #define since it has no functions */ 164 #define CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV 0x4000 165 #define CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV 0x4001 166 #define CL_DEVICE_REGISTERS_PER_BLOCK_NV 0x4002 167 #define CL_DEVICE_WARP_SIZE_NV 0x4003 168 #define CL_DEVICE_GPU_OVERLAP_NV 0x4004 169 #define CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV 0x4005 170 #define CL_DEVICE_INTEGRATED_MEMORY_NV 0x4006 171 172 /********************************* 173 * cl_amd_device_attribute_query * 174 *********************************/ 175 #define CL_DEVICE_PROFILING_TIMER_OFFSET_AMD 0x4036 176 177 #ifdef CL_VERSION_1_1 178 /*********************************** 179 * cl_ext_device_fission extension * 180 ***********************************/ 181 #define cl_ext_device_fission 1 182 183 extern CL_API_ENTRY cl_int CL_API_CALL 184 clReleaseDeviceEXT( cl_device_id /*device*/ ) CL_EXT_SUFFIX__VERSION_1_1; 185 186 typedef CL_API_ENTRY cl_int 187 (CL_API_CALL *clReleaseDeviceEXT_fn)( cl_device_id /*device*/ ) CL_EXT_SUFFIX__VERSION_1_1; 188 189 extern CL_API_ENTRY cl_int CL_API_CALL 190 clRetainDeviceEXT( cl_device_id /*device*/ ) CL_EXT_SUFFIX__VERSION_1_1; 191 192 typedef CL_API_ENTRY cl_int 193 (CL_API_CALL *clRetainDeviceEXT_fn)( cl_device_id /*device*/ ) CL_EXT_SUFFIX__VERSION_1_1; 194 195 typedef cl_ulong cl_device_partition_property_ext; 196 extern CL_API_ENTRY cl_int CL_API_CALL 197 clCreateSubDevicesEXT( cl_device_id /*in_device*/, 198 const cl_device_partition_property_ext * /* properties */, 199 cl_uint /*num_entries*/, 200 cl_device_id * /*out_devices*/, 201 cl_uint * /*num_devices*/ ) CL_EXT_SUFFIX__VERSION_1_1; 202 203 typedef CL_API_ENTRY cl_int 204 ( CL_API_CALL * clCreateSubDevicesEXT_fn)( cl_device_id /*in_device*/, 205 const cl_device_partition_property_ext * /* properties */, 206 cl_uint /*num_entries*/, 207 cl_device_id * /*out_devices*/, 208 cl_uint * /*num_devices*/ ) CL_EXT_SUFFIX__VERSION_1_1; 209 210 /* cl_device_partition_property_ext */ 211 #define CL_DEVICE_PARTITION_EQUALLY_EXT 0x4050 212 #define CL_DEVICE_PARTITION_BY_COUNTS_EXT 0x4051 213 #define CL_DEVICE_PARTITION_BY_NAMES_EXT 0x4052 214 #define CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN_EXT 0x4053 215 216 /* clDeviceGetInfo selectors */ 217 #define CL_DEVICE_PARENT_DEVICE_EXT 0x4054 218 #define CL_DEVICE_PARTITION_TYPES_EXT 0x4055 219 #define CL_DEVICE_AFFINITY_DOMAINS_EXT 0x4056 220 #define CL_DEVICE_REFERENCE_COUNT_EXT 0x4057 221 #define CL_DEVICE_PARTITION_STYLE_EXT 0x4058 222 223 /* error codes */ 224 #define CL_DEVICE_PARTITION_FAILED_EXT -1057 225 #define CL_INVALID_PARTITION_COUNT_EXT -1058 226 #define CL_INVALID_PARTITION_NAME_EXT -1059 227 228 /* CL_AFFINITY_DOMAINs */ 229 #define CL_AFFINITY_DOMAIN_L1_CACHE_EXT 0x1 230 #define CL_AFFINITY_DOMAIN_L2_CACHE_EXT 0x2 231 #define CL_AFFINITY_DOMAIN_L3_CACHE_EXT 0x3 232 #define CL_AFFINITY_DOMAIN_L4_CACHE_EXT 0x4 233 #define CL_AFFINITY_DOMAIN_NUMA_EXT 0x10 234 #define CL_AFFINITY_DOMAIN_NEXT_FISSIONABLE_EXT 0x100 235 236 /* cl_device_partition_property_ext list terminators */ 237 #define CL_PROPERTIES_LIST_END_EXT ((cl_device_partition_property_ext) 0) 238 #define CL_PARTITION_BY_COUNTS_LIST_END_EXT ((cl_device_partition_property_ext) 0) 239 #define CL_PARTITION_BY_NAMES_LIST_END_EXT ((cl_device_partition_property_ext) 0 - 1) 240 241 /********************************* 242 * cl_qcom_ext_host_ptr extension 243 *********************************/ 244 245 #define CL_MEM_EXT_HOST_PTR_QCOM (1 << 29) 246 247 #define CL_DEVICE_EXT_MEM_PADDING_IN_BYTES_QCOM 0x40A0 248 #define CL_DEVICE_PAGE_SIZE_QCOM 0x40A1 249 #define CL_IMAGE_ROW_ALIGNMENT_QCOM 0x40A2 250 #define CL_IMAGE_SLICE_ALIGNMENT_QCOM 0x40A3 251 #define CL_MEM_HOST_UNCACHED_QCOM 0x40A4 252 #define CL_MEM_HOST_WRITEBACK_QCOM 0x40A5 253 #define CL_MEM_HOST_WRITETHROUGH_QCOM 0x40A6 254 #define CL_MEM_HOST_WRITE_COMBINING_QCOM 0x40A7 255 256 typedef cl_uint cl_image_pitch_info_qcom; 257 258 extern CL_API_ENTRY cl_int CL_API_CALL 259 clGetDeviceImageInfoQCOM(cl_device_id device, 260 size_t image_width, 261 size_t image_height, 262 const cl_image_format *image_format, 263 cl_image_pitch_info_qcom param_name, 264 size_t param_value_size, 265 void *param_value, 266 size_t *param_value_size_ret); 267 268 typedef struct _cl_mem_ext_host_ptr 269 { 270 // Type of external memory allocation. 271 // Legal values will be defined in layered extensions. 272 cl_uint allocation_type; 273 274 // Host cache policy for this external memory allocation. 275 cl_uint host_cache_policy; 276 277 } cl_mem_ext_host_ptr; 278 279 /********************************* 280 * cl_qcom_ion_host_ptr extension 281 *********************************/ 282 283 #define CL_MEM_ION_HOST_PTR_QCOM 0x40A8 284 285 typedef struct _cl_mem_ion_host_ptr 286 { 287 // Type of external memory allocation. 288 // Must be CL_MEM_ION_HOST_PTR_QCOM for ION allocations. 289 cl_mem_ext_host_ptr ext_host_ptr; 290 291 // ION file descriptor 292 int ion_filedesc; 293 294 // Host pointer to the ION allocated memory 295 void* ion_hostptr; 296 297 } cl_mem_ion_host_ptr; 298 299 #endif /* CL_VERSION_1_1 */ 300 301 #ifdef __cplusplus 302 } 303 #endif 304 305 306 #endif /* __CL_EXT_H */ 307