1*3cc25752SFrank Piva<% 2*3cc25752SFrank Piva# Extensions to skip by default because they are in dedicated headers: 3*3cc25752SFrank PivaskipExtensions = { 4*3cc25752SFrank Piva 'cl_khr_d3d10_sharing', 5*3cc25752SFrank Piva 'cl_khr_d3d11_sharing', 6*3cc25752SFrank Piva 'cl_khr_dx9_media_sharing', 7*3cc25752SFrank Piva 'cl_khr_egl_event', 8*3cc25752SFrank Piva 'cl_khr_egl_image', 9*3cc25752SFrank Piva 'cl_khr_gl_depth_images', 10*3cc25752SFrank Piva 'cl_khr_gl_event', 11*3cc25752SFrank Piva 'cl_khr_gl_msaa_sharing', 12*3cc25752SFrank Piva 'cl_khr_gl_sharing', 13*3cc25752SFrank Piva 'cl_loader_layers', 14*3cc25752SFrank Piva 'cl_intel_dx9_media_sharing', 15*3cc25752SFrank Piva 'cl_intel_va_api_media_sharing', 16*3cc25752SFrank Piva 'cl_intel_sharing_format_query_d3d10', 17*3cc25752SFrank Piva 'cl_intel_sharing_format_query_d3d11', 18*3cc25752SFrank Piva 'cl_intel_sharing_format_query_dx9', 19*3cc25752SFrank Piva 'cl_intel_sharing_format_query_gl', 20*3cc25752SFrank Piva 'cl_intel_sharing_format_query_va_api', 21*3cc25752SFrank Piva } 22*3cc25752SFrank Piva 23*3cc25752SFrank Piva# Extensions to include in this header: 24*3cc25752SFrank Pivadef shouldGenerate(extension): 25*3cc25752SFrank Piva if extension in genExtensions: 26*3cc25752SFrank Piva return True 27*3cc25752SFrank Piva elif not genExtensions and not extension in skipExtensions: 28*3cc25752SFrank Piva return True 29*3cc25752SFrank Piva return False 30*3cc25752SFrank Piva 31*3cc25752SFrank Piva# XML blocks to include in the headers: 32*3cc25752SFrank Pivadef shouldEmit(block): 33*3cc25752SFrank Piva for type in block.findall('type'): 34*3cc25752SFrank Piva if type.get('name') in typedefs: 35*3cc25752SFrank Piva return True 36*3cc25752SFrank Piva elif type.get('name') in macros: 37*3cc25752SFrank Piva return True 38*3cc25752SFrank Piva elif type.get('name') in structs: 39*3cc25752SFrank Piva return True 40*3cc25752SFrank Piva for enum in block.findall('enum'): 41*3cc25752SFrank Piva #if enum.get('name') in enums: 42*3cc25752SFrank Piva return True 43*3cc25752SFrank Piva for func in block.findall('command'): 44*3cc25752SFrank Piva return True 45*3cc25752SFrank Piva return False 46*3cc25752SFrank Piva 47*3cc25752SFrank Piva# Initially, keep the same extension order as the original headers: 48*3cc25752SFrank PivaorderedExtensions = [ 49*3cc25752SFrank Piva # cl_ext.h: 50*3cc25752SFrank Piva 'cl_khr_command_buffer', 51*3cc25752SFrank Piva 'cl_khr_command_buffer_multi_device', 52*3cc25752SFrank Piva 'cl_khr_command_buffer_mutable_dispatch', 53*3cc25752SFrank Piva 'cl_khr_fp64', 54*3cc25752SFrank Piva 'cl_khr_fp16', 55*3cc25752SFrank Piva 'cl_APPLE_SetMemObjectDestructor', 56*3cc25752SFrank Piva 'cl_APPLE_ContextLoggingFunctions', 57*3cc25752SFrank Piva 'cl_khr_icd', 58*3cc25752SFrank Piva 'cl_khr_il_program', 59*3cc25752SFrank Piva 'cl_khr_image2D_from_buffer', # incorrect name 60*3cc25752SFrank Piva 'cl_khr_image2d_from_buffer', 61*3cc25752SFrank Piva 'cl_khr_initialize_memory', 62*3cc25752SFrank Piva 'cl_khr_terminate_context', 63*3cc25752SFrank Piva 'cl_khr_spir', 64*3cc25752SFrank Piva 'cl_khr_create_command_queue', 65*3cc25752SFrank Piva 'cl_nv_device_attribute_query', 66*3cc25752SFrank Piva 'cl_amd_device_attribute_query', 67*3cc25752SFrank Piva 'cl_arm_printf', 68*3cc25752SFrank Piva 'cl_ext_device_fission', 69*3cc25752SFrank Piva 'cl_ext_migrate_memobject', 70*3cc25752SFrank Piva 'cl_ext_cxx_for_opencl', 71*3cc25752SFrank Piva 'cl_qcom_ext_host_ptr', 72*3cc25752SFrank Piva 'cl_qcom_ext_host_ptr_iocoherent', 73*3cc25752SFrank Piva 'cl_qcom_ion_host_ptr', 74*3cc25752SFrank Piva 'cl_qcom_android_native_buffer_host_ptr', 75*3cc25752SFrank Piva 'cl_img_yuv_image', 76*3cc25752SFrank Piva 'cl_img_cached_allocations', 77*3cc25752SFrank Piva 'cl_img_use_gralloc_ptr', 78*3cc25752SFrank Piva 'cl_img_generate_mipmap', 79*3cc25752SFrank Piva 'cl_img_mem_properties', 80*3cc25752SFrank Piva 'cl_khr_subgroups', 81*3cc25752SFrank Piva 'cl_khr_mipmap_image', 82*3cc25752SFrank Piva 'cl_khr_priority_hints', 83*3cc25752SFrank Piva 'cl_khr_throttle_hints', 84*3cc25752SFrank Piva 'cl_khr_subgroup_named_barrier', 85*3cc25752SFrank Piva 'cl_khr_extended_versioning', 86*3cc25752SFrank Piva 'cl_khr_device_uuid', 87*3cc25752SFrank Piva 'cl_khr_pci_bus_info', 88*3cc25752SFrank Piva 'cl_khr_suggested_local_work_size', 89*3cc25752SFrank Piva 'cl_khr_integer_dot_product', 90*3cc25752SFrank Piva 'cl_khr_external_memory', 91*3cc25752SFrank Piva 'cl_khr_external_memory_dma_buf', 92*3cc25752SFrank Piva 'cl_khr_external_memory_dx', 93*3cc25752SFrank Piva 'cl_khr_external_memory_opaque_fd', 94*3cc25752SFrank Piva 'cl_khr_external_memory_win32', 95*3cc25752SFrank Piva 'cl_khr_external_semaphore', 96*3cc25752SFrank Piva 'cl_khr_external_semaphore_dx_fence', 97*3cc25752SFrank Piva 'cl_khr_external_semaphore_opaque_fd', 98*3cc25752SFrank Piva 'cl_khr_external_semaphore_sync_fd', 99*3cc25752SFrank Piva 'cl_khr_external_semaphore_win32', 100*3cc25752SFrank Piva 'cl_khr_semaphore', 101*3cc25752SFrank Piva 'cl_arm_import_memory', 102*3cc25752SFrank Piva 'cl_arm_shared_virtual_memory', 103*3cc25752SFrank Piva 'cl_arm_get_core_id', 104*3cc25752SFrank Piva 'cl_arm_job_slot_selection', 105*3cc25752SFrank Piva 'cl_arm_scheduling_controls', 106*3cc25752SFrank Piva 'cl_arm_controlled_kernel_termination', 107*3cc25752SFrank Piva 'cl_arm_protected_memory_allocation', 108*3cc25752SFrank Piva 'cl_intel_exec_by_local_thread', 109*3cc25752SFrank Piva 'cl_intel_device_attribute_query', 110*3cc25752SFrank Piva 'cl_intel_device_partition_by_names', 111*3cc25752SFrank Piva 'cl_intel_accelerator', 112*3cc25752SFrank Piva 'cl_intel_motion_estimation', 113*3cc25752SFrank Piva 'cl_intel_advanced_motion_estimation', 114*3cc25752SFrank Piva 'cl_intel_simultaneous_sharing', 115*3cc25752SFrank Piva 'cl_intel_egl_image_yuv', 116*3cc25752SFrank Piva 'cl_intel_packed_yuv', 117*3cc25752SFrank Piva 'cl_intel_required_subgroup_size', 118*3cc25752SFrank Piva 'cl_intel_driver_diagnostics', 119*3cc25752SFrank Piva 'cl_intel_planar_yuv', 120*3cc25752SFrank Piva 'cl_intel_device_side_avc_motion_estimation', 121*3cc25752SFrank Piva 'cl_intel_unified_shared_memory', 122*3cc25752SFrank Piva 'cl_intel_mem_alloc_buffer_location', 123*3cc25752SFrank Piva 'cl_intel_create_buffer_with_properties', 124*3cc25752SFrank Piva 'cl_intel_program_scope_host_pipe', 125*3cc25752SFrank Piva 'cl_intel_mem_channel_property', 126*3cc25752SFrank Piva 'cl_intel_mem_force_host_memory', 127*3cc25752SFrank Piva 'cl_intel_command_queue_families', 128*3cc25752SFrank Piva 'cl_intel_queue_no_sync_operations', 129*3cc25752SFrank Piva 'cl_intel_sharing_format_query', 130*3cc25752SFrank Piva 'cl_ext_image_requirements_info', 131*3cc25752SFrank Piva 'cl_ext_image_from_buffer', 132*3cc25752SFrank Piva 'cl_loader_info', 133*3cc25752SFrank Piva 'cl_khr_depth_images', 134*3cc25752SFrank Piva 'cl_ext_float_atomics', 135*3cc25752SFrank Piva 'cl_intel_create_mem_object_properties', 136*3cc25752SFrank Piva 'cl_pocl_content_size', 137*3cc25752SFrank Piva 'cl_ext_image_raw10_raw12', 138*3cc25752SFrank Piva # cl_d3d10.h 139*3cc25752SFrank Piva 'cl_khr_d3d10_sharing', 140*3cc25752SFrank Piva 'cl_intel_sharing_format_query_d3d10', 141*3cc25752SFrank Piva # cl_d3d11.h 142*3cc25752SFrank Piva 'cl_khr_d3d11_sharing', 143*3cc25752SFrank Piva 'cl_intel_sharing_format_query_d3d11', 144*3cc25752SFrank Piva # cl_dx9_media_sharing.h 145*3cc25752SFrank Piva 'cl_khr_dx9_media_sharing', 146*3cc25752SFrank Piva 'cl_intel_dx9_media_sharing', 147*3cc25752SFrank Piva 'cl_intel_sharing_format_query_dx9', 148*3cc25752SFrank Piva # cl_egl.h 149*3cc25752SFrank Piva 'cl_khr_egl_image', 150*3cc25752SFrank Piva 'cl_khr_egl_event', 151*3cc25752SFrank Piva # cl_gl.h 152*3cc25752SFrank Piva 'cl_khr_gl_sharing', 153*3cc25752SFrank Piva 'cl_khr_gl_event', 154*3cc25752SFrank Piva 'cl_khr_gl_depth_images', 155*3cc25752SFrank Piva 'cl_khr_gl_msaa_sharing', 156*3cc25752SFrank Piva 'cl_intel_sharing_format_query_gl', 157*3cc25752SFrank Piva # cl_layer.h 158*3cc25752SFrank Piva 'cl_loader_layers', 159*3cc25752SFrank Piva # cl_va_api_media_sharing_intel.h 160*3cc25752SFrank Piva 'cl_intel_sharing_format_query_va_api', 161*3cc25752SFrank Piva 'cl_intel_va_api_media_sharing', 162*3cc25752SFrank Piva ] 163*3cc25752SFrank Piva 164*3cc25752SFrank Pivadef getExtensionSortKey(item): 165*3cc25752SFrank Piva name = item.get('name') 166*3cc25752SFrank Piva try: 167*3cc25752SFrank Piva index = orderedExtensions.index(name) 168*3cc25752SFrank Piva except ValueError: 169*3cc25752SFrank Piva if name.startswith('cl_khr'): 170*3cc25752SFrank Piva index = 10000 171*3cc25752SFrank Piva elif name.startswith('cl_ext'): 172*3cc25752SFrank Piva index = 10001 173*3cc25752SFrank Piva else: 174*3cc25752SFrank Piva index = 10002 175*3cc25752SFrank Piva return index, name 176*3cc25752SFrank Piva 177*3cc25752SFrank Piva# Order the extensions should be emitted in the headers. 178*3cc25752SFrank Piva# KHR -> EXT -> Vendor Extensions 179*3cc25752SFrank Pivadef getExtensionSortKey_ideal(item): 180*3cc25752SFrank Piva name = item.get('name') 181*3cc25752SFrank Piva if name.startswith('cl_khr'): 182*3cc25752SFrank Piva return 0, name 183*3cc25752SFrank Piva if name.startswith('cl_ext'): 184*3cc25752SFrank Piva return 1, name 185*3cc25752SFrank Piva return 99, name 186*3cc25752SFrank Piva 187*3cc25752SFrank Piva# Order enums should be emitted in the headers. 188*3cc25752SFrank Piva# Enums Without Bits -> Ordered Bit Enums 189*3cc25752SFrank Pivadef getEnumSortKey(item): 190*3cc25752SFrank Piva name = item.get('name') 191*3cc25752SFrank Piva if name in enums: 192*3cc25752SFrank Piva if enums[name].Value: 193*3cc25752SFrank Piva return -1 194*3cc25752SFrank Piva if enums[name].Bitpos: 195*3cc25752SFrank Piva return int(enums[name].Bitpos) 196*3cc25752SFrank Piva return 99 197*3cc25752SFrank Piva 198*3cc25752SFrank Piva# Gets C function parameter strings for the specified API params: 199*3cc25752SFrank Pivadef getCParameterStrings(params): 200*3cc25752SFrank Piva strings = [] 201*3cc25752SFrank Piva if len(params) == 0: 202*3cc25752SFrank Piva strings.append("void") 203*3cc25752SFrank Piva else: 204*3cc25752SFrank Piva for param in params: 205*3cc25752SFrank Piva paramstr = param.Type + ' ' + param.Name + param.TypeEnd 206*3cc25752SFrank Piva strings.append(paramstr) 207*3cc25752SFrank Piva return strings 208*3cc25752SFrank Piva 209*3cc25752SFrank Piva# Gets a bit string for the specified bit position: 210*3cc25752SFrank Pivadef getBitPosString(bitpos): 211*3cc25752SFrank Piva ret = '(' 212*3cc25752SFrank Piva ret += '(cl_bitfield)' if int(bitpos) >= 31 else '' 213*3cc25752SFrank Piva ret += '1 << ' 214*3cc25752SFrank Piva ret += bitpos 215*3cc25752SFrank Piva ret += ')' 216*3cc25752SFrank Piva return ret 217*3cc25752SFrank Piva 218*3cc25752SFrank Piva# Extensions that are included in the ICD dispatch table for historical reasons. 219*3cc25752SFrank Piva# This should not be required for new extensions! 220*3cc25752SFrank PivaloaderExtensions = { 221*3cc25752SFrank Piva 'cl_ext_device_fission', 222*3cc25752SFrank Piva 'cl_khr_d3d10_sharing', 223*3cc25752SFrank Piva 'cl_khr_d3d11_sharing', 224*3cc25752SFrank Piva 'cl_khr_dx9_media_sharing', 225*3cc25752SFrank Piva 'cl_khr_egl_event', 226*3cc25752SFrank Piva 'cl_khr_egl_image', 227*3cc25752SFrank Piva 'cl_khr_gl_event', 228*3cc25752SFrank Piva 'cl_khr_gl_sharing', 229*3cc25752SFrank Piva 'cl_khr_subgroups' 230*3cc25752SFrank Piva } 231*3cc25752SFrank Piva 232*3cc25752SFrank Piva# Gets the preprocessor guard for the given extension: 233*3cc25752SFrank Pivadef getPrototypeIfGuard(name): 234*3cc25752SFrank Piva if name in loaderExtensions: 235*3cc25752SFrank Piva guard = '!defined(CL_NO_ICD_DISPATCH_EXTENSION_PROTOTYPES)' 236*3cc25752SFrank Piva else: 237*3cc25752SFrank Piva guard = '!defined(CL_NO_NON_ICD_DISPATCH_EXTENSION_PROTOTYPES)' 238*3cc25752SFrank Piva return guard 239*3cc25752SFrank Piva 240*3cc25752SFrank Piva# Names that have been generated already, since some may be shared by multiple 241*3cc25752SFrank Piva# extensions: 242*3cc25752SFrank PivageneratedNames = set() 243*3cc25752SFrank Piva 244*3cc25752SFrank Pivadef isDuplicateName(name): 245*3cc25752SFrank Piva if name in generatedNames: 246*3cc25752SFrank Piva return True 247*3cc25752SFrank Piva generatedNames.add(name) 248*3cc25752SFrank Piva return False 249*3cc25752SFrank Piva 250*3cc25752SFrank Piva%>/******************************************************************************* 251*3cc25752SFrank Piva * Copyright (c) 2008-2023 The Khronos Group Inc. 252*3cc25752SFrank Piva * 253*3cc25752SFrank Piva * Licensed under the Apache License, Version 2.0 (the "License"); 254*3cc25752SFrank Piva * you may not use this file except in compliance with the License. 255*3cc25752SFrank Piva * You may obtain a copy of the License at 256*3cc25752SFrank Piva * 257*3cc25752SFrank Piva * http://www.apache.org/licenses/LICENSE-2.0 258*3cc25752SFrank Piva * 259*3cc25752SFrank Piva * Unless required by applicable law or agreed to in writing, software 260*3cc25752SFrank Piva * distributed under the License is distributed on an "AS IS" BASIS, 261*3cc25752SFrank Piva * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 262*3cc25752SFrank Piva * See the License for the specific language governing permissions and 263*3cc25752SFrank Piva * limitations under the License. 264*3cc25752SFrank Piva ******************************************************************************/ 265*3cc25752SFrank Piva 266*3cc25752SFrank Piva#ifndef ${guard} 267*3cc25752SFrank Piva#define ${guard} 268*3cc25752SFrank Piva 269*3cc25752SFrank Piva/* 270*3cc25752SFrank Piva** This header is generated from the Khronos OpenCL XML API Registry. 271*3cc25752SFrank Piva*/ 272*3cc25752SFrank Piva 273*3cc25752SFrank Piva%if includes: 274*3cc25752SFrank Piva${includes} 275*3cc25752SFrank Piva 276*3cc25752SFrank Piva%endif 277*3cc25752SFrank Piva#include <CL/cl.h> 278*3cc25752SFrank Piva 279*3cc25752SFrank Piva/* CL_NO_PROTOTYPES implies CL_NO_EXTENSION_PROTOTYPES: */ 280*3cc25752SFrank Piva#if defined(CL_NO_PROTOTYPES) && !defined(CL_NO_EXTENSION_PROTOTYPES) 281*3cc25752SFrank Piva#define CL_NO_EXTENSION_PROTOTYPES 282*3cc25752SFrank Piva#endif 283*3cc25752SFrank Piva 284*3cc25752SFrank Piva/* CL_NO_EXTENSION_PROTOTYPES implies 285*3cc25752SFrank Piva CL_NO_ICD_DISPATCH_EXTENSION_PROTOTYPES and 286*3cc25752SFrank Piva CL_NO_NON_ICD_DISPATCH_EXTENSION_PROTOTYPES: */ 287*3cc25752SFrank Piva#if defined(CL_NO_EXTENSION_PROTOTYPES) && ${"\\"} 288*3cc25752SFrank Piva !defined(CL_NO_ICD_DISPATCH_EXTENSION_PROTOTYPES) 289*3cc25752SFrank Piva#define CL_NO_ICD_DISPATCH_EXTENSION_PROTOTYPES 290*3cc25752SFrank Piva#endif 291*3cc25752SFrank Piva#if defined(CL_NO_EXTENSION_PROTOTYPES) && ${"\\"} 292*3cc25752SFrank Piva !defined(CL_NO_NON_ICD_DISPATCH_EXTENSION_PROTOTYPES) 293*3cc25752SFrank Piva#define CL_NO_NON_ICD_DISPATCH_EXTENSION_PROTOTYPES 294*3cc25752SFrank Piva#endif 295*3cc25752SFrank Piva 296*3cc25752SFrank Piva#ifdef __cplusplus 297*3cc25752SFrank Pivaextern "C" { 298*3cc25752SFrank Piva#endif 299*3cc25752SFrank Piva 300*3cc25752SFrank Piva%for extension in sorted(spec.findall('extensions/extension'), key=getExtensionSortKey): 301*3cc25752SFrank Piva% if shouldGenerate(extension.get('name')): 302*3cc25752SFrank Piva<% 303*3cc25752SFrank Piva name = extension.get('name') 304*3cc25752SFrank Piva%>/*************************************************************** 305*3cc25752SFrank Piva* ${name} 306*3cc25752SFrank Piva***************************************************************/ 307*3cc25752SFrank Piva%if extension.get('condition'): 308*3cc25752SFrank Piva#if ${extension.get('condition')} 309*3cc25752SFrank Piva 310*3cc25752SFrank Piva%endif 311*3cc25752SFrank Piva#define ${name} 1 312*3cc25752SFrank Piva#define ${name.upper()}_EXTENSION_NAME ${"\\"} 313*3cc25752SFrank Piva "${name}" 314*3cc25752SFrank Piva 315*3cc25752SFrank Piva%for block in extension.findall('require'): 316*3cc25752SFrank Piva% if shouldEmit(block): 317*3cc25752SFrank Piva% if block.get('condition'): 318*3cc25752SFrank Piva#if ${block.get('condition')} 319*3cc25752SFrank Piva% endif 320*3cc25752SFrank Piva% if block.get('comment'): 321*3cc25752SFrank Piva/* ${block.get('comment')} */ 322*3cc25752SFrank Piva% endif 323*3cc25752SFrank Piva% for type in block.findall('type'): 324*3cc25752SFrank Piva% if isDuplicateName(type.get('name')): 325*3cc25752SFrank Piva/* type ${type.get('name')} */ 326*3cc25752SFrank Piva% else: 327*3cc25752SFrank Piva% if type.get('name') in typedefs: 328*3cc25752SFrank Piva${typedefs[type.get('name')].Typedef.ljust(27)} ${type.get('name')}; 329*3cc25752SFrank Piva% elif type.get('name') in macros: 330*3cc25752SFrank Piva#define ${type.get('name')}${macros[type.get('name')].Macro} 331*3cc25752SFrank Piva% elif type.get('name') in structs: 332*3cc25752SFrank Piva<% 333*3cc25752SFrank Piva struct = structs[type.get('name')] 334*3cc25752SFrank Piva%>typedef struct _${struct.Name} { 335*3cc25752SFrank Piva% for i, member in enumerate(struct.Members): 336*3cc25752SFrank Piva ${member.Type} ${member.Name}${member.TypeEnd}; 337*3cc25752SFrank Piva% endfor 338*3cc25752SFrank Piva} ${struct.Name}; 339*3cc25752SFrank Piva% else: 340*3cc25752SFrank Piva// type ${type.get('name')} not found! 341*3cc25752SFrank Piva% endif 342*3cc25752SFrank Piva% endif 343*3cc25752SFrank Piva% endfor 344*3cc25752SFrank Piva% for enum in sorted(block.findall('enum'), key=getEnumSortKey): 345*3cc25752SFrank Piva% if isDuplicateName(enum.get('name')): 346*3cc25752SFrank Piva/* enum ${enum.get('name')} */ 347*3cc25752SFrank Piva% else: 348*3cc25752SFrank Piva% if enum.get('name') in enums: 349*3cc25752SFrank Piva% if enums[enum.get('name')].Value: 350*3cc25752SFrank Piva#define ${enum.get('name').ljust(51)} ${enums[enum.get('name')].Value} 351*3cc25752SFrank Piva% elif enums[enum.get('name')].Bitpos: 352*3cc25752SFrank Piva#define ${enum.get('name').ljust(51)} ${getBitPosString(enums[enum.get('name')].Bitpos)} 353*3cc25752SFrank Piva% else: 354*3cc25752SFrank Piva// enum ${enum.get('name')} is unassigned! 355*3cc25752SFrank Piva% endif 356*3cc25752SFrank Piva% else: 357*3cc25752SFrank Piva// enum ${enum.get('name')} not found! 358*3cc25752SFrank Piva% endif 359*3cc25752SFrank Piva% endif 360*3cc25752SFrank Piva% endfor 361*3cc25752SFrank Piva% if block.findall('command'): 362*3cc25752SFrank Piva% for func in block.findall('command'): 363*3cc25752SFrank Piva<% 364*3cc25752SFrank Piva api = apisigs[func.get('name')] 365*3cc25752SFrank Piva%> 366*3cc25752SFrank Pivatypedef ${api.RetType} CL_API_CALL 367*3cc25752SFrank Piva${api.Name}_t( 368*3cc25752SFrank Piva% for i, paramStr in enumerate(getCParameterStrings(api.Params)): 369*3cc25752SFrank Piva% if i < len(api.Params)-1: 370*3cc25752SFrank Piva ${paramStr}, 371*3cc25752SFrank Piva% else: 372*3cc25752SFrank Piva ${paramStr}); 373*3cc25752SFrank Piva% endif 374*3cc25752SFrank Piva% endfor 375*3cc25752SFrank Piva 376*3cc25752SFrank Pivatypedef ${api.Name}_t * 377*3cc25752SFrank Piva${api.Name}_fn ${api.Suffix}; 378*3cc25752SFrank Piva% endfor 379*3cc25752SFrank Piva% if generate_pfn_typedefs: 380*3cc25752SFrank Piva 381*3cc25752SFrank Piva/* 382*3cc25752SFrank Piva** The function pointer typedefs prefixed with "pfn_" are provided for 383*3cc25752SFrank Piva** compatibility with earlier versions of the headers. New code is 384*3cc25752SFrank Piva** encouraged to use the function pointer typedefs that are suffixed with 385*3cc25752SFrank Piva** "_fn" instead, for consistency. 386*3cc25752SFrank Piva*/ 387*3cc25752SFrank Piva% for func in block.findall('command'): 388*3cc25752SFrank Piva<% 389*3cc25752SFrank Piva api = apisigs[func.get('name')] 390*3cc25752SFrank Piva%> 391*3cc25752SFrank Pivatypedef ${api.Name}_t * 392*3cc25752SFrank Pivapfn_${api.Name} ${api.Suffix}; 393*3cc25752SFrank Piva% endfor 394*3cc25752SFrank Piva% endif 395*3cc25752SFrank Piva 396*3cc25752SFrank Piva#if ${getPrototypeIfGuard(name)} 397*3cc25752SFrank Piva% for func in block.findall('command'): 398*3cc25752SFrank Piva<% 399*3cc25752SFrank Piva api = apisigs[func.get('name')] 400*3cc25752SFrank Piva%> 401*3cc25752SFrank Pivaextern CL_API_ENTRY ${api.RetType} CL_API_CALL 402*3cc25752SFrank Piva${api.Name}( 403*3cc25752SFrank Piva% for i, paramStr in enumerate(getCParameterStrings(api.Params)): 404*3cc25752SFrank Piva% if i < len(api.Params)-1: 405*3cc25752SFrank Piva ${paramStr}, 406*3cc25752SFrank Piva% else: 407*3cc25752SFrank Piva ${paramStr}) ${api.Suffix}; 408*3cc25752SFrank Piva% endif 409*3cc25752SFrank Piva% endfor 410*3cc25752SFrank Piva% endfor 411*3cc25752SFrank Piva 412*3cc25752SFrank Piva#endif /* ${getPrototypeIfGuard(name)} */ 413*3cc25752SFrank Piva% endif 414*3cc25752SFrank Piva% if block.get('condition'): 415*3cc25752SFrank Piva 416*3cc25752SFrank Piva#endif /* ${block.get('condition')} */ 417*3cc25752SFrank Piva% endif 418*3cc25752SFrank Piva 419*3cc25752SFrank Piva% endif 420*3cc25752SFrank Piva%endfor 421*3cc25752SFrank Piva%if extension.get('condition'): 422*3cc25752SFrank Piva#endif /* ${extension.get('condition')} */ 423*3cc25752SFrank Piva 424*3cc25752SFrank Piva%endif 425*3cc25752SFrank Piva% endif 426*3cc25752SFrank Piva%endfor 427*3cc25752SFrank Piva#ifdef __cplusplus 428*3cc25752SFrank Piva} 429*3cc25752SFrank Piva#endif 430*3cc25752SFrank Piva 431*3cc25752SFrank Piva#endif /* ${guard} */ 432