cl_ext.h revision 848b8605
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: 1.1.1.1 $ on $Date: 2019/03/08 10:19:24 $ */ 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 33extern "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 64cl_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 78extern 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 */ 84extern 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 */ 90extern 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 107extern CL_API_ENTRY cl_int CL_API_CALL 108clIcdGetPlatformIDsKHR(cl_uint /* num_entries */, 109 cl_platform_id * /* platforms */, 110 cl_uint * /* num_platforms */); 111 112typedef 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 148extern CL_API_ENTRY cl_int CL_API_CALL clTerminateContextKHR(cl_context /* context */) CL_EXT_SUFFIX__VERSION_1_2; 149 150typedef 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#define CL_DEVICE_SPIR_VERSIONS 0x40E0 161#define CL_PROGRAM_BINARY_TYPE_INTERMEDIATE 0x40E1 162 163 164/****************************************** 165* cl_nv_device_attribute_query extension * 166******************************************/ 167/* cl_nv_device_attribute_query extension - no extension #define since it has no functions */ 168#define CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV 0x4000 169#define CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV 0x4001 170#define CL_DEVICE_REGISTERS_PER_BLOCK_NV 0x4002 171#define CL_DEVICE_WARP_SIZE_NV 0x4003 172#define CL_DEVICE_GPU_OVERLAP_NV 0x4004 173#define CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV 0x4005 174#define CL_DEVICE_INTEGRATED_MEMORY_NV 0x4006 175 176/********************************* 177* cl_amd_device_attribute_query * 178*********************************/ 179#define CL_DEVICE_PROFILING_TIMER_OFFSET_AMD 0x4036 180 181/********************************* 182* cl_arm_printf extension 183*********************************/ 184#define CL_PRINTF_CALLBACK_ARM 0x40B0 185#define CL_PRINTF_BUFFERSIZE_ARM 0x40B1 186 187#ifdef CL_VERSION_1_1 188 /*********************************** 189 * cl_ext_device_fission extension * 190 ***********************************/ 191 #define cl_ext_device_fission 1 192 193 extern CL_API_ENTRY cl_int CL_API_CALL 194 clReleaseDeviceEXT( cl_device_id /*device*/ ) CL_EXT_SUFFIX__VERSION_1_1; 195 196 typedef CL_API_ENTRY cl_int 197 (CL_API_CALL *clReleaseDeviceEXT_fn)( cl_device_id /*device*/ ) CL_EXT_SUFFIX__VERSION_1_1; 198 199 extern CL_API_ENTRY cl_int CL_API_CALL 200 clRetainDeviceEXT( cl_device_id /*device*/ ) CL_EXT_SUFFIX__VERSION_1_1; 201 202 typedef CL_API_ENTRY cl_int 203 (CL_API_CALL *clRetainDeviceEXT_fn)( cl_device_id /*device*/ ) CL_EXT_SUFFIX__VERSION_1_1; 204 205 typedef cl_ulong cl_device_partition_property_ext; 206 extern CL_API_ENTRY cl_int CL_API_CALL 207 clCreateSubDevicesEXT( cl_device_id /*in_device*/, 208 const cl_device_partition_property_ext * /* properties */, 209 cl_uint /*num_entries*/, 210 cl_device_id * /*out_devices*/, 211 cl_uint * /*num_devices*/ ) CL_EXT_SUFFIX__VERSION_1_1; 212 213 typedef CL_API_ENTRY cl_int 214 ( CL_API_CALL * clCreateSubDevicesEXT_fn)( cl_device_id /*in_device*/, 215 const cl_device_partition_property_ext * /* properties */, 216 cl_uint /*num_entries*/, 217 cl_device_id * /*out_devices*/, 218 cl_uint * /*num_devices*/ ) CL_EXT_SUFFIX__VERSION_1_1; 219 220 /* cl_device_partition_property_ext */ 221 #define CL_DEVICE_PARTITION_EQUALLY_EXT 0x4050 222 #define CL_DEVICE_PARTITION_BY_COUNTS_EXT 0x4051 223 #define CL_DEVICE_PARTITION_BY_NAMES_EXT 0x4052 224 #define CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN_EXT 0x4053 225 226 /* clDeviceGetInfo selectors */ 227 #define CL_DEVICE_PARENT_DEVICE_EXT 0x4054 228 #define CL_DEVICE_PARTITION_TYPES_EXT 0x4055 229 #define CL_DEVICE_AFFINITY_DOMAINS_EXT 0x4056 230 #define CL_DEVICE_REFERENCE_COUNT_EXT 0x4057 231 #define CL_DEVICE_PARTITION_STYLE_EXT 0x4058 232 233 /* error codes */ 234 #define CL_DEVICE_PARTITION_FAILED_EXT -1057 235 #define CL_INVALID_PARTITION_COUNT_EXT -1058 236 #define CL_INVALID_PARTITION_NAME_EXT -1059 237 238 /* CL_AFFINITY_DOMAINs */ 239 #define CL_AFFINITY_DOMAIN_L1_CACHE_EXT 0x1 240 #define CL_AFFINITY_DOMAIN_L2_CACHE_EXT 0x2 241 #define CL_AFFINITY_DOMAIN_L3_CACHE_EXT 0x3 242 #define CL_AFFINITY_DOMAIN_L4_CACHE_EXT 0x4 243 #define CL_AFFINITY_DOMAIN_NUMA_EXT 0x10 244 #define CL_AFFINITY_DOMAIN_NEXT_FISSIONABLE_EXT 0x100 245 246 /* cl_device_partition_property_ext list terminators */ 247 #define CL_PROPERTIES_LIST_END_EXT ((cl_device_partition_property_ext) 0) 248 #define CL_PARTITION_BY_COUNTS_LIST_END_EXT ((cl_device_partition_property_ext) 0) 249 #define CL_PARTITION_BY_NAMES_LIST_END_EXT ((cl_device_partition_property_ext) 0 - 1) 250 251/********************************* 252* cl_qcom_ext_host_ptr extension 253*********************************/ 254 255#define CL_MEM_EXT_HOST_PTR_QCOM (1 << 29) 256 257#define CL_DEVICE_EXT_MEM_PADDING_IN_BYTES_QCOM 0x40A0 258#define CL_DEVICE_PAGE_SIZE_QCOM 0x40A1 259#define CL_IMAGE_ROW_ALIGNMENT_QCOM 0x40A2 260#define CL_IMAGE_SLICE_ALIGNMENT_QCOM 0x40A3 261#define CL_MEM_HOST_UNCACHED_QCOM 0x40A4 262#define CL_MEM_HOST_WRITEBACK_QCOM 0x40A5 263#define CL_MEM_HOST_WRITETHROUGH_QCOM 0x40A6 264#define CL_MEM_HOST_WRITE_COMBINING_QCOM 0x40A7 265 266typedef cl_uint cl_image_pitch_info_qcom; 267 268extern CL_API_ENTRY cl_int CL_API_CALL 269clGetDeviceImageInfoQCOM(cl_device_id device, 270 size_t image_width, 271 size_t image_height, 272 const cl_image_format *image_format, 273 cl_image_pitch_info_qcom param_name, 274 size_t param_value_size, 275 void *param_value, 276 size_t *param_value_size_ret); 277 278typedef struct _cl_mem_ext_host_ptr 279{ 280 /* Type of external memory allocation. */ 281 /* Legal values will be defined in layered extensions. */ 282 cl_uint allocation_type; 283 284 /* Host cache policy for this external memory allocation. */ 285 cl_uint host_cache_policy; 286 287} cl_mem_ext_host_ptr; 288 289/********************************* 290* cl_qcom_ion_host_ptr extension 291*********************************/ 292 293#define CL_MEM_ION_HOST_PTR_QCOM 0x40A8 294 295typedef struct _cl_mem_ion_host_ptr 296{ 297 /* Type of external memory allocation. */ 298 /* Must be CL_MEM_ION_HOST_PTR_QCOM for ION allocations. */ 299 cl_mem_ext_host_ptr ext_host_ptr; 300 301 /* ION file descriptor */ 302 int ion_filedesc; 303 304 /* Host pointer to the ION allocated memory */ 305 void* ion_hostptr; 306 307} cl_mem_ion_host_ptr; 308 309#endif /* CL_VERSION_1_1 */ 310 311#ifdef __cplusplus 312} 313#endif 314 315 316#endif /* __CL_EXT_H */ 317