xref: /aosp_15_r20/external/OpenCL-Headers/scripts/cl_ext.h.mako (revision 3cc257528f335c5672e46865a03b8ee020e5fe2d)
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