cl_ext.h revision 848b8605
1848b8605Smrg/******************************************************************************* 2848b8605Smrg * Copyright (c) 2008-2013 The Khronos Group Inc. 3848b8605Smrg * 4848b8605Smrg * Permission is hereby granted, free of charge, to any person obtaining a 5848b8605Smrg * copy of this software and/or associated documentation files (the 6848b8605Smrg * "Materials"), to deal in the Materials without restriction, including 7848b8605Smrg * without limitation the rights to use, copy, modify, merge, publish, 8848b8605Smrg * distribute, sublicense, and/or sell copies of the Materials, and to 9848b8605Smrg * permit persons to whom the Materials are furnished to do so, subject to 10848b8605Smrg * the following conditions: 11848b8605Smrg * 12848b8605Smrg * The above copyright notice and this permission notice shall be included 13848b8605Smrg * in all copies or substantial portions of the Materials. 14848b8605Smrg * 15848b8605Smrg * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16848b8605Smrg * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17848b8605Smrg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18848b8605Smrg * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 19848b8605Smrg * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 20848b8605Smrg * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 21848b8605Smrg * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. 22848b8605Smrg ******************************************************************************/ 23848b8605Smrg 24848b8605Smrg/* $Revision: 1.1.1.1 $ on $Date: 2019/03/08 10:19:24 $ */ 25848b8605Smrg 26848b8605Smrg/* cl_ext.h contains OpenCL extensions which don't have external */ 27848b8605Smrg/* (OpenGL, D3D) dependencies. */ 28848b8605Smrg 29848b8605Smrg#ifndef __CL_EXT_H 30848b8605Smrg#define __CL_EXT_H 31848b8605Smrg 32848b8605Smrg#ifdef __cplusplus 33848b8605Smrgextern "C" { 34848b8605Smrg#endif 35848b8605Smrg 36848b8605Smrg#ifdef __APPLE__ 37848b8605Smrg #include <OpenCL/cl.h> 38848b8605Smrg #include <AvailabilityMacros.h> 39848b8605Smrg#else 40848b8605Smrg #include <CL/cl.h> 41848b8605Smrg#endif 42848b8605Smrg 43848b8605Smrg/* cl_khr_fp16 extension - no extension #define since it has no functions */ 44848b8605Smrg#define CL_DEVICE_HALF_FP_CONFIG 0x1033 45848b8605Smrg 46848b8605Smrg/* Memory object destruction 47848b8605Smrg * 48848b8605Smrg * Apple extension for use to manage externally allocated buffers used with cl_mem objects with CL_MEM_USE_HOST_PTR 49848b8605Smrg * 50848b8605Smrg * Registers a user callback function that will be called when the memory object is deleted and its resources 51848b8605Smrg * freed. Each call to clSetMemObjectCallbackFn registers the specified user callback function on a callback 52848b8605Smrg * stack associated with memobj. The registered user callback functions are called in the reverse order in 53848b8605Smrg * which they were registered. The user callback functions are called and then the memory object is deleted 54848b8605Smrg * and its resources freed. This provides a mechanism for the application (and libraries) using memobj to be 55848b8605Smrg * notified when the memory referenced by host_ptr, specified when the memory object is created and used as 56848b8605Smrg * the storage bits for the memory object, can be reused or freed. 57848b8605Smrg * 58848b8605Smrg * The application may not call CL api's with the cl_mem object passed to the pfn_notify. 59848b8605Smrg * 60848b8605Smrg * Please check for the "cl_APPLE_SetMemObjectDestructor" extension using clGetDeviceInfo(CL_DEVICE_EXTENSIONS) 61848b8605Smrg * before using. 62848b8605Smrg */ 63848b8605Smrg#define cl_APPLE_SetMemObjectDestructor 1 64848b8605Smrgcl_int CL_API_ENTRY clSetMemObjectDestructorAPPLE( cl_mem /* memobj */, 65848b8605Smrg void (* /*pfn_notify*/)( cl_mem /* memobj */, void* /*user_data*/), 66848b8605Smrg void * /*user_data */ ) CL_EXT_SUFFIX__VERSION_1_0; 67848b8605Smrg 68848b8605Smrg 69848b8605Smrg/* Context Logging Functions 70848b8605Smrg * 71848b8605Smrg * The next three convenience functions are intended to be used as the pfn_notify parameter to clCreateContext(). 72848b8605Smrg * Please check for the "cl_APPLE_ContextLoggingFunctions" extension using clGetDeviceInfo(CL_DEVICE_EXTENSIONS) 73848b8605Smrg * before using. 74848b8605Smrg * 75848b8605Smrg * clLogMessagesToSystemLog fowards on all log messages to the Apple System Logger 76848b8605Smrg */ 77848b8605Smrg#define cl_APPLE_ContextLoggingFunctions 1 78848b8605Smrgextern void CL_API_ENTRY clLogMessagesToSystemLogAPPLE( const char * /* errstr */, 79848b8605Smrg const void * /* private_info */, 80848b8605Smrg size_t /* cb */, 81848b8605Smrg void * /* user_data */ ) CL_EXT_SUFFIX__VERSION_1_0; 82848b8605Smrg 83848b8605Smrg/* clLogMessagesToStdout sends all log messages to the file descriptor stdout */ 84848b8605Smrgextern void CL_API_ENTRY clLogMessagesToStdoutAPPLE( const char * /* errstr */, 85848b8605Smrg const void * /* private_info */, 86848b8605Smrg size_t /* cb */, 87848b8605Smrg void * /* user_data */ ) CL_EXT_SUFFIX__VERSION_1_0; 88848b8605Smrg 89848b8605Smrg/* clLogMessagesToStderr sends all log messages to the file descriptor stderr */ 90848b8605Smrgextern void CL_API_ENTRY clLogMessagesToStderrAPPLE( const char * /* errstr */, 91848b8605Smrg const void * /* private_info */, 92848b8605Smrg size_t /* cb */, 93848b8605Smrg void * /* user_data */ ) CL_EXT_SUFFIX__VERSION_1_0; 94848b8605Smrg 95848b8605Smrg 96848b8605Smrg/************************ 97848b8605Smrg* cl_khr_icd extension * 98848b8605Smrg************************/ 99848b8605Smrg#define cl_khr_icd 1 100848b8605Smrg 101848b8605Smrg/* cl_platform_info */ 102848b8605Smrg#define CL_PLATFORM_ICD_SUFFIX_KHR 0x0920 103848b8605Smrg 104848b8605Smrg/* Additional Error Codes */ 105848b8605Smrg#define CL_PLATFORM_NOT_FOUND_KHR -1001 106848b8605Smrg 107848b8605Smrgextern CL_API_ENTRY cl_int CL_API_CALL 108848b8605SmrgclIcdGetPlatformIDsKHR(cl_uint /* num_entries */, 109848b8605Smrg cl_platform_id * /* platforms */, 110848b8605Smrg cl_uint * /* num_platforms */); 111848b8605Smrg 112848b8605Smrgtypedef CL_API_ENTRY cl_int (CL_API_CALL *clIcdGetPlatformIDsKHR_fn)( 113848b8605Smrg cl_uint /* num_entries */, 114848b8605Smrg cl_platform_id * /* platforms */, 115848b8605Smrg cl_uint * /* num_platforms */); 116848b8605Smrg 117848b8605Smrg 118848b8605Smrg/* Extension: cl_khr_image2D_buffer 119848b8605Smrg * 120848b8605Smrg * This extension allows a 2D image to be created from a cl_mem buffer without a copy. 121848b8605Smrg * The type associated with a 2D image created from a buffer in an OpenCL program is image2d_t. 122848b8605Smrg * Both the sampler and sampler-less read_image built-in functions are supported for 2D images 123848b8605Smrg * and 2D images created from a buffer. Similarly, the write_image built-ins are also supported 124848b8605Smrg * for 2D images created from a buffer. 125848b8605Smrg * 126848b8605Smrg * When the 2D image from buffer is created, the client must specify the width, 127848b8605Smrg * height, image format (i.e. channel order and channel data type) and optionally the row pitch 128848b8605Smrg * 129848b8605Smrg * The pitch specified must be a multiple of CL_DEVICE_IMAGE_PITCH_ALIGNMENT pixels. 130848b8605Smrg * The base address of the buffer must be aligned to CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT pixels. 131848b8605Smrg */ 132848b8605Smrg 133848b8605Smrg/************************************* 134848b8605Smrg * cl_khr_initalize_memory extension * 135848b8605Smrg *************************************/ 136848b8605Smrg 137848b8605Smrg#define CL_CONTEXT_MEMORY_INITIALIZE_KHR 0x200E 138848b8605Smrg 139848b8605Smrg 140848b8605Smrg/************************************** 141848b8605Smrg * cl_khr_terminate_context extension * 142848b8605Smrg **************************************/ 143848b8605Smrg 144848b8605Smrg#define CL_DEVICE_TERMINATE_CAPABILITY_KHR 0x200F 145848b8605Smrg#define CL_CONTEXT_TERMINATE_KHR 0x2010 146848b8605Smrg 147848b8605Smrg#define cl_khr_terminate_context 1 148848b8605Smrgextern CL_API_ENTRY cl_int CL_API_CALL clTerminateContextKHR(cl_context /* context */) CL_EXT_SUFFIX__VERSION_1_2; 149848b8605Smrg 150848b8605Smrgtypedef CL_API_ENTRY cl_int (CL_API_CALL *clTerminateContextKHR_fn)(cl_context /* context */) CL_EXT_SUFFIX__VERSION_1_2; 151848b8605Smrg 152848b8605Smrg 153848b8605Smrg/* 154848b8605Smrg * Extension: cl_khr_spir 155848b8605Smrg * 156848b8605Smrg * This extension adds support to create an OpenCL program object from a 157848b8605Smrg * Standard Portable Intermediate Representation (SPIR) instance 158848b8605Smrg */ 159848b8605Smrg 160848b8605Smrg#define CL_DEVICE_SPIR_VERSIONS 0x40E0 161848b8605Smrg#define CL_PROGRAM_BINARY_TYPE_INTERMEDIATE 0x40E1 162848b8605Smrg 163848b8605Smrg 164848b8605Smrg/****************************************** 165848b8605Smrg* cl_nv_device_attribute_query extension * 166848b8605Smrg******************************************/ 167848b8605Smrg/* cl_nv_device_attribute_query extension - no extension #define since it has no functions */ 168848b8605Smrg#define CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV 0x4000 169848b8605Smrg#define CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV 0x4001 170848b8605Smrg#define CL_DEVICE_REGISTERS_PER_BLOCK_NV 0x4002 171848b8605Smrg#define CL_DEVICE_WARP_SIZE_NV 0x4003 172848b8605Smrg#define CL_DEVICE_GPU_OVERLAP_NV 0x4004 173848b8605Smrg#define CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV 0x4005 174848b8605Smrg#define CL_DEVICE_INTEGRATED_MEMORY_NV 0x4006 175848b8605Smrg 176848b8605Smrg/********************************* 177848b8605Smrg* cl_amd_device_attribute_query * 178848b8605Smrg*********************************/ 179848b8605Smrg#define CL_DEVICE_PROFILING_TIMER_OFFSET_AMD 0x4036 180848b8605Smrg 181848b8605Smrg/********************************* 182848b8605Smrg* cl_arm_printf extension 183848b8605Smrg*********************************/ 184848b8605Smrg#define CL_PRINTF_CALLBACK_ARM 0x40B0 185848b8605Smrg#define CL_PRINTF_BUFFERSIZE_ARM 0x40B1 186848b8605Smrg 187848b8605Smrg#ifdef CL_VERSION_1_1 188848b8605Smrg /*********************************** 189848b8605Smrg * cl_ext_device_fission extension * 190848b8605Smrg ***********************************/ 191848b8605Smrg #define cl_ext_device_fission 1 192848b8605Smrg 193848b8605Smrg extern CL_API_ENTRY cl_int CL_API_CALL 194848b8605Smrg clReleaseDeviceEXT( cl_device_id /*device*/ ) CL_EXT_SUFFIX__VERSION_1_1; 195848b8605Smrg 196848b8605Smrg typedef CL_API_ENTRY cl_int 197848b8605Smrg (CL_API_CALL *clReleaseDeviceEXT_fn)( cl_device_id /*device*/ ) CL_EXT_SUFFIX__VERSION_1_1; 198848b8605Smrg 199848b8605Smrg extern CL_API_ENTRY cl_int CL_API_CALL 200848b8605Smrg clRetainDeviceEXT( cl_device_id /*device*/ ) CL_EXT_SUFFIX__VERSION_1_1; 201848b8605Smrg 202848b8605Smrg typedef CL_API_ENTRY cl_int 203848b8605Smrg (CL_API_CALL *clRetainDeviceEXT_fn)( cl_device_id /*device*/ ) CL_EXT_SUFFIX__VERSION_1_1; 204848b8605Smrg 205848b8605Smrg typedef cl_ulong cl_device_partition_property_ext; 206848b8605Smrg extern CL_API_ENTRY cl_int CL_API_CALL 207848b8605Smrg clCreateSubDevicesEXT( cl_device_id /*in_device*/, 208848b8605Smrg const cl_device_partition_property_ext * /* properties */, 209848b8605Smrg cl_uint /*num_entries*/, 210848b8605Smrg cl_device_id * /*out_devices*/, 211848b8605Smrg cl_uint * /*num_devices*/ ) CL_EXT_SUFFIX__VERSION_1_1; 212848b8605Smrg 213848b8605Smrg typedef CL_API_ENTRY cl_int 214848b8605Smrg ( CL_API_CALL * clCreateSubDevicesEXT_fn)( cl_device_id /*in_device*/, 215848b8605Smrg const cl_device_partition_property_ext * /* properties */, 216848b8605Smrg cl_uint /*num_entries*/, 217848b8605Smrg cl_device_id * /*out_devices*/, 218848b8605Smrg cl_uint * /*num_devices*/ ) CL_EXT_SUFFIX__VERSION_1_1; 219848b8605Smrg 220848b8605Smrg /* cl_device_partition_property_ext */ 221848b8605Smrg #define CL_DEVICE_PARTITION_EQUALLY_EXT 0x4050 222848b8605Smrg #define CL_DEVICE_PARTITION_BY_COUNTS_EXT 0x4051 223848b8605Smrg #define CL_DEVICE_PARTITION_BY_NAMES_EXT 0x4052 224848b8605Smrg #define CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN_EXT 0x4053 225848b8605Smrg 226848b8605Smrg /* clDeviceGetInfo selectors */ 227848b8605Smrg #define CL_DEVICE_PARENT_DEVICE_EXT 0x4054 228848b8605Smrg #define CL_DEVICE_PARTITION_TYPES_EXT 0x4055 229848b8605Smrg #define CL_DEVICE_AFFINITY_DOMAINS_EXT 0x4056 230848b8605Smrg #define CL_DEVICE_REFERENCE_COUNT_EXT 0x4057 231848b8605Smrg #define CL_DEVICE_PARTITION_STYLE_EXT 0x4058 232848b8605Smrg 233848b8605Smrg /* error codes */ 234848b8605Smrg #define CL_DEVICE_PARTITION_FAILED_EXT -1057 235848b8605Smrg #define CL_INVALID_PARTITION_COUNT_EXT -1058 236848b8605Smrg #define CL_INVALID_PARTITION_NAME_EXT -1059 237848b8605Smrg 238848b8605Smrg /* CL_AFFINITY_DOMAINs */ 239848b8605Smrg #define CL_AFFINITY_DOMAIN_L1_CACHE_EXT 0x1 240848b8605Smrg #define CL_AFFINITY_DOMAIN_L2_CACHE_EXT 0x2 241848b8605Smrg #define CL_AFFINITY_DOMAIN_L3_CACHE_EXT 0x3 242848b8605Smrg #define CL_AFFINITY_DOMAIN_L4_CACHE_EXT 0x4 243848b8605Smrg #define CL_AFFINITY_DOMAIN_NUMA_EXT 0x10 244848b8605Smrg #define CL_AFFINITY_DOMAIN_NEXT_FISSIONABLE_EXT 0x100 245848b8605Smrg 246848b8605Smrg /* cl_device_partition_property_ext list terminators */ 247848b8605Smrg #define CL_PROPERTIES_LIST_END_EXT ((cl_device_partition_property_ext) 0) 248848b8605Smrg #define CL_PARTITION_BY_COUNTS_LIST_END_EXT ((cl_device_partition_property_ext) 0) 249848b8605Smrg #define CL_PARTITION_BY_NAMES_LIST_END_EXT ((cl_device_partition_property_ext) 0 - 1) 250848b8605Smrg 251848b8605Smrg/********************************* 252848b8605Smrg* cl_qcom_ext_host_ptr extension 253848b8605Smrg*********************************/ 254848b8605Smrg 255848b8605Smrg#define CL_MEM_EXT_HOST_PTR_QCOM (1 << 29) 256848b8605Smrg 257848b8605Smrg#define CL_DEVICE_EXT_MEM_PADDING_IN_BYTES_QCOM 0x40A0 258848b8605Smrg#define CL_DEVICE_PAGE_SIZE_QCOM 0x40A1 259848b8605Smrg#define CL_IMAGE_ROW_ALIGNMENT_QCOM 0x40A2 260848b8605Smrg#define CL_IMAGE_SLICE_ALIGNMENT_QCOM 0x40A3 261848b8605Smrg#define CL_MEM_HOST_UNCACHED_QCOM 0x40A4 262848b8605Smrg#define CL_MEM_HOST_WRITEBACK_QCOM 0x40A5 263848b8605Smrg#define CL_MEM_HOST_WRITETHROUGH_QCOM 0x40A6 264848b8605Smrg#define CL_MEM_HOST_WRITE_COMBINING_QCOM 0x40A7 265848b8605Smrg 266848b8605Smrgtypedef cl_uint cl_image_pitch_info_qcom; 267848b8605Smrg 268848b8605Smrgextern CL_API_ENTRY cl_int CL_API_CALL 269848b8605SmrgclGetDeviceImageInfoQCOM(cl_device_id device, 270848b8605Smrg size_t image_width, 271848b8605Smrg size_t image_height, 272848b8605Smrg const cl_image_format *image_format, 273848b8605Smrg cl_image_pitch_info_qcom param_name, 274848b8605Smrg size_t param_value_size, 275848b8605Smrg void *param_value, 276848b8605Smrg size_t *param_value_size_ret); 277848b8605Smrg 278848b8605Smrgtypedef struct _cl_mem_ext_host_ptr 279848b8605Smrg{ 280848b8605Smrg /* Type of external memory allocation. */ 281848b8605Smrg /* Legal values will be defined in layered extensions. */ 282848b8605Smrg cl_uint allocation_type; 283848b8605Smrg 284848b8605Smrg /* Host cache policy for this external memory allocation. */ 285848b8605Smrg cl_uint host_cache_policy; 286848b8605Smrg 287848b8605Smrg} cl_mem_ext_host_ptr; 288848b8605Smrg 289848b8605Smrg/********************************* 290848b8605Smrg* cl_qcom_ion_host_ptr extension 291848b8605Smrg*********************************/ 292848b8605Smrg 293848b8605Smrg#define CL_MEM_ION_HOST_PTR_QCOM 0x40A8 294848b8605Smrg 295848b8605Smrgtypedef struct _cl_mem_ion_host_ptr 296848b8605Smrg{ 297848b8605Smrg /* Type of external memory allocation. */ 298848b8605Smrg /* Must be CL_MEM_ION_HOST_PTR_QCOM for ION allocations. */ 299848b8605Smrg cl_mem_ext_host_ptr ext_host_ptr; 300848b8605Smrg 301848b8605Smrg /* ION file descriptor */ 302848b8605Smrg int ion_filedesc; 303848b8605Smrg 304848b8605Smrg /* Host pointer to the ION allocated memory */ 305848b8605Smrg void* ion_hostptr; 306848b8605Smrg 307848b8605Smrg} cl_mem_ion_host_ptr; 308848b8605Smrg 309848b8605Smrg#endif /* CL_VERSION_1_1 */ 310848b8605Smrg 311848b8605Smrg#ifdef __cplusplus 312848b8605Smrg} 313848b8605Smrg#endif 314848b8605Smrg 315848b8605Smrg 316848b8605Smrg#endif /* __CL_EXT_H */ 317