xref: /aosp_15_r20/external/angle/scripts/generate_entry_points.py (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker#!/usr/bin/python3
2*8975f5c5SAndroid Build Coastguard Worker#
3*8975f5c5SAndroid Build Coastguard Worker# Copyright 2017 The ANGLE Project Authors. All rights reserved.
4*8975f5c5SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
5*8975f5c5SAndroid Build Coastguard Worker# found in the LICENSE file.
6*8975f5c5SAndroid Build Coastguard Worker#
7*8975f5c5SAndroid Build Coastguard Worker# generate_entry_points.py:
8*8975f5c5SAndroid Build Coastguard Worker#   Generates the OpenGL bindings and entry point layers for ANGLE.
9*8975f5c5SAndroid Build Coastguard Worker#   NOTE: don't run this script directly. Run scripts/run_code_generation.py.
10*8975f5c5SAndroid Build Coastguard Worker
11*8975f5c5SAndroid Build Coastguard Workerimport sys, os, pprint, json
12*8975f5c5SAndroid Build Coastguard Workerimport fnmatch
13*8975f5c5SAndroid Build Coastguard Workerimport registry_xml
14*8975f5c5SAndroid Build Coastguard Workerfrom registry_xml import apis, script_relative, strip_api_prefix, api_enums
15*8975f5c5SAndroid Build Coastguard Worker
16*8975f5c5SAndroid Build Coastguard Worker# Paths
17*8975f5c5SAndroid Build Coastguard WorkerCL_STUBS_HEADER_PATH = "../src/libGLESv2/cl_stubs_autogen.h"
18*8975f5c5SAndroid Build Coastguard WorkerEGL_GET_LABELED_OBJECT_DATA_PATH = "../src/libGLESv2/egl_get_labeled_object_data.json"
19*8975f5c5SAndroid Build Coastguard WorkerEGL_STUBS_HEADER_PATH = "../src/libGLESv2/egl_stubs_autogen.h"
20*8975f5c5SAndroid Build Coastguard WorkerEGL_EXT_STUBS_HEADER_PATH = "../src/libGLESv2/egl_ext_stubs_autogen.h"
21*8975f5c5SAndroid Build Coastguard Worker
22*8975f5c5SAndroid Build Coastguard Worker# List of GLES1 extensions for which we don't need to add Context.h decls.
23*8975f5c5SAndroid Build Coastguard WorkerGLES1_NO_CONTEXT_DECL_EXTENSIONS = [
24*8975f5c5SAndroid Build Coastguard Worker    "GL_OES_framebuffer_object",
25*8975f5c5SAndroid Build Coastguard Worker]
26*8975f5c5SAndroid Build Coastguard Worker
27*8975f5c5SAndroid Build Coastguard Worker# This is a list of exceptions for entry points which don't want to have
28*8975f5c5SAndroid Build Coastguard Worker# the EVENT macro. This is required for some debug marker entry points.
29*8975f5c5SAndroid Build Coastguard WorkerNO_EVENT_MARKER_EXCEPTIONS_LIST = sorted([
30*8975f5c5SAndroid Build Coastguard Worker    "glPushGroupMarkerEXT",
31*8975f5c5SAndroid Build Coastguard Worker    "glPopGroupMarkerEXT",
32*8975f5c5SAndroid Build Coastguard Worker    "glInsertEventMarkerEXT",
33*8975f5c5SAndroid Build Coastguard Worker])
34*8975f5c5SAndroid Build Coastguard Worker
35*8975f5c5SAndroid Build Coastguard WorkerALIASING_EXCEPTIONS = [
36*8975f5c5SAndroid Build Coastguard Worker    # glRenderbufferStorageMultisampleEXT aliases
37*8975f5c5SAndroid Build Coastguard Worker    # glRenderbufferStorageMultisample on desktop GL, and is marked as such in
38*8975f5c5SAndroid Build Coastguard Worker    # the registry.  However, that is not correct for GLES where this entry
39*8975f5c5SAndroid Build Coastguard Worker    # point comes from GL_EXT_multisampled_render_to_texture which is never
40*8975f5c5SAndroid Build Coastguard Worker    # promoted to core GLES.
41*8975f5c5SAndroid Build Coastguard Worker    'renderbufferStorageMultisampleEXT',
42*8975f5c5SAndroid Build Coastguard Worker    # Other entry points where the extension behavior is not identical to core
43*8975f5c5SAndroid Build Coastguard Worker    # behavior.
44*8975f5c5SAndroid Build Coastguard Worker    'drawArraysInstancedBaseInstanceANGLE',
45*8975f5c5SAndroid Build Coastguard Worker    'drawElementsInstancedBaseVertexBaseInstanceANGLE',
46*8975f5c5SAndroid Build Coastguard Worker    'logicOpANGLE',
47*8975f5c5SAndroid Build Coastguard Worker]
48*8975f5c5SAndroid Build Coastguard Worker
49*8975f5c5SAndroid Build Coastguard Worker# These are the entry points which potentially are used first by an application
50*8975f5c5SAndroid Build Coastguard Worker# and require that the back ends are initialized before the front end is called.
51*8975f5c5SAndroid Build Coastguard WorkerINIT_DICT = {
52*8975f5c5SAndroid Build Coastguard Worker    "clGetPlatformIDs": "false",
53*8975f5c5SAndroid Build Coastguard Worker    "clGetPlatformInfo": "false",
54*8975f5c5SAndroid Build Coastguard Worker    "clGetDeviceIDs": "false",
55*8975f5c5SAndroid Build Coastguard Worker    "clCreateContext": "false",
56*8975f5c5SAndroid Build Coastguard Worker    "clCreateContextFromType": "false",
57*8975f5c5SAndroid Build Coastguard Worker    "clIcdGetPlatformIDsKHR": "true",
58*8975f5c5SAndroid Build Coastguard Worker}
59*8975f5c5SAndroid Build Coastguard Worker
60*8975f5c5SAndroid Build Coastguard Worker# These are the only entry points that are allowed while pixel local storage is active.
61*8975f5c5SAndroid Build Coastguard WorkerPLS_ALLOW_LIST = {
62*8975f5c5SAndroid Build Coastguard Worker    "ActiveTexture",
63*8975f5c5SAndroid Build Coastguard Worker    "BindBuffer",
64*8975f5c5SAndroid Build Coastguard Worker    "BindBufferBase",
65*8975f5c5SAndroid Build Coastguard Worker    "BindBufferRange",
66*8975f5c5SAndroid Build Coastguard Worker    "BindFramebuffer",
67*8975f5c5SAndroid Build Coastguard Worker    "BindSampler",
68*8975f5c5SAndroid Build Coastguard Worker    "BindTexture",
69*8975f5c5SAndroid Build Coastguard Worker    "BindVertexArray",
70*8975f5c5SAndroid Build Coastguard Worker    "BlendEquation",
71*8975f5c5SAndroid Build Coastguard Worker    "BlendEquationSeparate",
72*8975f5c5SAndroid Build Coastguard Worker    "BlendFunc",
73*8975f5c5SAndroid Build Coastguard Worker    "BlendFuncSeparate",
74*8975f5c5SAndroid Build Coastguard Worker    "BufferData",
75*8975f5c5SAndroid Build Coastguard Worker    "BufferSubData",
76*8975f5c5SAndroid Build Coastguard Worker    "CheckFramebufferStatus",
77*8975f5c5SAndroid Build Coastguard Worker    "ClipControlEXT",
78*8975f5c5SAndroid Build Coastguard Worker    "ColorMask",
79*8975f5c5SAndroid Build Coastguard Worker    "CullFace",
80*8975f5c5SAndroid Build Coastguard Worker    "DepthFunc",
81*8975f5c5SAndroid Build Coastguard Worker    "DepthMask",
82*8975f5c5SAndroid Build Coastguard Worker    "DepthRangef",
83*8975f5c5SAndroid Build Coastguard Worker    "Disable",
84*8975f5c5SAndroid Build Coastguard Worker    "DisableVertexAttribArray",
85*8975f5c5SAndroid Build Coastguard Worker    "DispatchComputeIndirect",
86*8975f5c5SAndroid Build Coastguard Worker    "DrawBuffers",
87*8975f5c5SAndroid Build Coastguard Worker    "Enable",
88*8975f5c5SAndroid Build Coastguard Worker    "EnableClientState",
89*8975f5c5SAndroid Build Coastguard Worker    "EnableVertexAttribArray",
90*8975f5c5SAndroid Build Coastguard Worker    "EndPixelLocalStorageANGLE",
91*8975f5c5SAndroid Build Coastguard Worker    "FenceSync",
92*8975f5c5SAndroid Build Coastguard Worker    "FlushMappedBufferRange",
93*8975f5c5SAndroid Build Coastguard Worker    "FramebufferMemorylessPixelLocalStorageANGLE",
94*8975f5c5SAndroid Build Coastguard Worker    "FramebufferPixelLocalStorageInterruptANGLE",
95*8975f5c5SAndroid Build Coastguard Worker    "FramebufferRenderbuffer",
96*8975f5c5SAndroid Build Coastguard Worker    "FrontFace",
97*8975f5c5SAndroid Build Coastguard Worker    "MapBufferRange",
98*8975f5c5SAndroid Build Coastguard Worker    "PixelLocalStorageBarrierANGLE",
99*8975f5c5SAndroid Build Coastguard Worker    "ProvokingVertexANGLE",
100*8975f5c5SAndroid Build Coastguard Worker    "Scissor",
101*8975f5c5SAndroid Build Coastguard Worker    "StencilFunc",
102*8975f5c5SAndroid Build Coastguard Worker    "StencilFuncSeparate",
103*8975f5c5SAndroid Build Coastguard Worker    "StencilMask",
104*8975f5c5SAndroid Build Coastguard Worker    "StencilMaskSeparate",
105*8975f5c5SAndroid Build Coastguard Worker    "StencilOp",
106*8975f5c5SAndroid Build Coastguard Worker    "StencilOpSeparate",
107*8975f5c5SAndroid Build Coastguard Worker    "UnmapBuffer",
108*8975f5c5SAndroid Build Coastguard Worker    "UseProgram",
109*8975f5c5SAndroid Build Coastguard Worker    "ValidateProgram",
110*8975f5c5SAndroid Build Coastguard Worker    "Viewport",
111*8975f5c5SAndroid Build Coastguard Worker}
112*8975f5c5SAndroid Build Coastguard WorkerPLS_ALLOW_WILDCARDS = [
113*8975f5c5SAndroid Build Coastguard Worker    "BlendEquationSeparatei*",
114*8975f5c5SAndroid Build Coastguard Worker    "BlendEquationi*",
115*8975f5c5SAndroid Build Coastguard Worker    "BlendFuncSeparatei*",
116*8975f5c5SAndroid Build Coastguard Worker    "BlendFunci*",
117*8975f5c5SAndroid Build Coastguard Worker    "ClearBuffer*",
118*8975f5c5SAndroid Build Coastguard Worker    "ColorMaski*",
119*8975f5c5SAndroid Build Coastguard Worker    "DebugMessageCallback*",
120*8975f5c5SAndroid Build Coastguard Worker    "DebugMessageControl*",
121*8975f5c5SAndroid Build Coastguard Worker    "DebugMessageInsert*",
122*8975f5c5SAndroid Build Coastguard Worker    "Delete*",
123*8975f5c5SAndroid Build Coastguard Worker    "Disablei*",
124*8975f5c5SAndroid Build Coastguard Worker    "DrawArrays*",
125*8975f5c5SAndroid Build Coastguard Worker    "DrawElements*",
126*8975f5c5SAndroid Build Coastguard Worker    "DrawRangeElements*",
127*8975f5c5SAndroid Build Coastguard Worker    "Enablei*",
128*8975f5c5SAndroid Build Coastguard Worker    "FramebufferParameter*",
129*8975f5c5SAndroid Build Coastguard Worker    "FramebufferTexture*",
130*8975f5c5SAndroid Build Coastguard Worker    "Gen*",
131*8975f5c5SAndroid Build Coastguard Worker    "Get*",
132*8975f5c5SAndroid Build Coastguard Worker    "Is*",
133*8975f5c5SAndroid Build Coastguard Worker    "ObjectLabel*",
134*8975f5c5SAndroid Build Coastguard Worker    "ObjectPtrLabel*",
135*8975f5c5SAndroid Build Coastguard Worker    "PolygonMode*",
136*8975f5c5SAndroid Build Coastguard Worker    "PolygonOffset*",
137*8975f5c5SAndroid Build Coastguard Worker    "PopDebugGroup*",
138*8975f5c5SAndroid Build Coastguard Worker    "PushDebugGroup*",
139*8975f5c5SAndroid Build Coastguard Worker    "SamplerParameter*",
140*8975f5c5SAndroid Build Coastguard Worker    "TexParameter*",
141*8975f5c5SAndroid Build Coastguard Worker    "Uniform*",
142*8975f5c5SAndroid Build Coastguard Worker    "VertexAttrib*",
143*8975f5c5SAndroid Build Coastguard Worker]
144*8975f5c5SAndroid Build Coastguard Worker
145*8975f5c5SAndroid Build Coastguard Worker# These are the entry points which purely set state in the current context with
146*8975f5c5SAndroid Build Coastguard Worker# no interaction with the other contexts, including through shared resources.
147*8975f5c5SAndroid Build Coastguard Worker# As a result, they don't require the share group lock.
148*8975f5c5SAndroid Build Coastguard WorkerCONTEXT_PRIVATE_LIST = [
149*8975f5c5SAndroid Build Coastguard Worker    'glActiveTexture',
150*8975f5c5SAndroid Build Coastguard Worker    'glBlendColor',
151*8975f5c5SAndroid Build Coastguard Worker    'glBlobCacheCallbacksANGLE',
152*8975f5c5SAndroid Build Coastguard Worker    'glClearColor',
153*8975f5c5SAndroid Build Coastguard Worker    'glClearDepthf',
154*8975f5c5SAndroid Build Coastguard Worker    'glClearStencil',
155*8975f5c5SAndroid Build Coastguard Worker    'glClipControl',
156*8975f5c5SAndroid Build Coastguard Worker    'glColorMask',
157*8975f5c5SAndroid Build Coastguard Worker    'glColorMaski',
158*8975f5c5SAndroid Build Coastguard Worker    'glCoverageModulation',
159*8975f5c5SAndroid Build Coastguard Worker    'glCullFace',
160*8975f5c5SAndroid Build Coastguard Worker    'glDepthFunc',
161*8975f5c5SAndroid Build Coastguard Worker    'glDepthMask',
162*8975f5c5SAndroid Build Coastguard Worker    'glDepthRangef',
163*8975f5c5SAndroid Build Coastguard Worker    'glDisable',
164*8975f5c5SAndroid Build Coastguard Worker    'glDisablei',
165*8975f5c5SAndroid Build Coastguard Worker    'glEnable',
166*8975f5c5SAndroid Build Coastguard Worker    'glEnablei',
167*8975f5c5SAndroid Build Coastguard Worker    'glFrontFace',
168*8975f5c5SAndroid Build Coastguard Worker    'glHint',
169*8975f5c5SAndroid Build Coastguard Worker    'glIsEnabled',
170*8975f5c5SAndroid Build Coastguard Worker    'glIsEnabledi',
171*8975f5c5SAndroid Build Coastguard Worker    'glLineWidth',
172*8975f5c5SAndroid Build Coastguard Worker    'glLogicOpANGLE',
173*8975f5c5SAndroid Build Coastguard Worker    'glMinSampleShading',
174*8975f5c5SAndroid Build Coastguard Worker    'glPatchParameteri',
175*8975f5c5SAndroid Build Coastguard Worker    'glPixelStorei',
176*8975f5c5SAndroid Build Coastguard Worker    'glPolygonMode',
177*8975f5c5SAndroid Build Coastguard Worker    'glPolygonModeNV',
178*8975f5c5SAndroid Build Coastguard Worker    'glPolygonOffset',
179*8975f5c5SAndroid Build Coastguard Worker    'glPolygonOffsetClamp',
180*8975f5c5SAndroid Build Coastguard Worker    'glPrimitiveBoundingBox',
181*8975f5c5SAndroid Build Coastguard Worker    'glProvokingVertex',
182*8975f5c5SAndroid Build Coastguard Worker    'glSampleCoverage',
183*8975f5c5SAndroid Build Coastguard Worker    'glSampleMaski',
184*8975f5c5SAndroid Build Coastguard Worker    'glScissor',
185*8975f5c5SAndroid Build Coastguard Worker    'glShadingRate',
186*8975f5c5SAndroid Build Coastguard Worker    'glStencilFunc',
187*8975f5c5SAndroid Build Coastguard Worker    'glStencilFuncSeparate',
188*8975f5c5SAndroid Build Coastguard Worker    'glStencilMask',
189*8975f5c5SAndroid Build Coastguard Worker    'glStencilMaskSeparate',
190*8975f5c5SAndroid Build Coastguard Worker    'glStencilOp',
191*8975f5c5SAndroid Build Coastguard Worker    'glStencilOpSeparate',
192*8975f5c5SAndroid Build Coastguard Worker    'glViewport',
193*8975f5c5SAndroid Build Coastguard Worker    # GLES1 entry points
194*8975f5c5SAndroid Build Coastguard Worker    'glAlphaFunc',
195*8975f5c5SAndroid Build Coastguard Worker    'glAlphaFuncx',
196*8975f5c5SAndroid Build Coastguard Worker    'glClearColorx',
197*8975f5c5SAndroid Build Coastguard Worker    'glClearDepthx',
198*8975f5c5SAndroid Build Coastguard Worker    'glColor4f',
199*8975f5c5SAndroid Build Coastguard Worker    'glColor4ub',
200*8975f5c5SAndroid Build Coastguard Worker    'glColor4x',
201*8975f5c5SAndroid Build Coastguard Worker    'glDepthRangex',
202*8975f5c5SAndroid Build Coastguard Worker    'glLineWidthx',
203*8975f5c5SAndroid Build Coastguard Worker    'glLoadIdentity',
204*8975f5c5SAndroid Build Coastguard Worker    'glLogicOp',
205*8975f5c5SAndroid Build Coastguard Worker    'glMatrixMode',
206*8975f5c5SAndroid Build Coastguard Worker    'glPointSize',
207*8975f5c5SAndroid Build Coastguard Worker    'glPointSizex',
208*8975f5c5SAndroid Build Coastguard Worker    'glPopMatrix',
209*8975f5c5SAndroid Build Coastguard Worker    'glPolygonOffsetx',
210*8975f5c5SAndroid Build Coastguard Worker    'glPushMatrix',
211*8975f5c5SAndroid Build Coastguard Worker    'glSampleCoveragex',
212*8975f5c5SAndroid Build Coastguard Worker    'glShadeModel',
213*8975f5c5SAndroid Build Coastguard Worker]
214*8975f5c5SAndroid Build Coastguard WorkerCONTEXT_PRIVATE_WILDCARDS = [
215*8975f5c5SAndroid Build Coastguard Worker    'glBlendFunc*',
216*8975f5c5SAndroid Build Coastguard Worker    'glBlendEquation*',
217*8975f5c5SAndroid Build Coastguard Worker    'glVertexAttrib[1-4]*',
218*8975f5c5SAndroid Build Coastguard Worker    'glVertexAttribI[1-4]*',
219*8975f5c5SAndroid Build Coastguard Worker    'glVertexAttribP[1-4]*',
220*8975f5c5SAndroid Build Coastguard Worker    'glVertexAttribL[1-4]*',
221*8975f5c5SAndroid Build Coastguard Worker    # GLES1 entry points
222*8975f5c5SAndroid Build Coastguard Worker    'glClipPlane[fx]',
223*8975f5c5SAndroid Build Coastguard Worker    'glGetClipPlane[fx]',
224*8975f5c5SAndroid Build Coastguard Worker    'glFog[fx]*',
225*8975f5c5SAndroid Build Coastguard Worker    'glFrustum[fx]',
226*8975f5c5SAndroid Build Coastguard Worker    'glGetLight[fx]v',
227*8975f5c5SAndroid Build Coastguard Worker    'glGetMaterial[fx]v',
228*8975f5c5SAndroid Build Coastguard Worker    'glGetTexEnv[fix]v',
229*8975f5c5SAndroid Build Coastguard Worker    'glLoadMatrix[fx]',
230*8975f5c5SAndroid Build Coastguard Worker    'glLight[fx]*',
231*8975f5c5SAndroid Build Coastguard Worker    'glLightModel[fx]*',
232*8975f5c5SAndroid Build Coastguard Worker    'glMaterial[fx]*',
233*8975f5c5SAndroid Build Coastguard Worker    'glMultMatrix[fx]',
234*8975f5c5SAndroid Build Coastguard Worker    'glMultiTexCoord4[fx]',
235*8975f5c5SAndroid Build Coastguard Worker    'glNormal3[fx]',
236*8975f5c5SAndroid Build Coastguard Worker    'glOrtho[fx]',
237*8975f5c5SAndroid Build Coastguard Worker    'glPointParameter[fx]*',
238*8975f5c5SAndroid Build Coastguard Worker    'glRotate[fx]',
239*8975f5c5SAndroid Build Coastguard Worker    'glScale[fx]',
240*8975f5c5SAndroid Build Coastguard Worker    'glTexEnv[fix]*',
241*8975f5c5SAndroid Build Coastguard Worker    'glTranslate[fx]',
242*8975f5c5SAndroid Build Coastguard Worker]
243*8975f5c5SAndroid Build Coastguard Worker
244*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_ENTRY_POINT_HEADER = """\
245*8975f5c5SAndroid Build Coastguard Worker// GENERATED FILE - DO NOT EDIT.
246*8975f5c5SAndroid Build Coastguard Worker// Generated by {script_name} using data from {data_source_name}.
247*8975f5c5SAndroid Build Coastguard Worker//
248*8975f5c5SAndroid Build Coastguard Worker// Copyright 2020 The ANGLE Project Authors. All rights reserved.
249*8975f5c5SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be
250*8975f5c5SAndroid Build Coastguard Worker// found in the LICENSE file.
251*8975f5c5SAndroid Build Coastguard Worker//
252*8975f5c5SAndroid Build Coastguard Worker// entry_points_{annotation_lower}_autogen.h:
253*8975f5c5SAndroid Build Coastguard Worker//   Defines the {comment} entry points.
254*8975f5c5SAndroid Build Coastguard Worker
255*8975f5c5SAndroid Build Coastguard Worker#ifndef {lib}_ENTRY_POINTS_{annotation_upper}_AUTOGEN_H_
256*8975f5c5SAndroid Build Coastguard Worker#define {lib}_ENTRY_POINTS_{annotation_upper}_AUTOGEN_H_
257*8975f5c5SAndroid Build Coastguard Worker
258*8975f5c5SAndroid Build Coastguard Worker{includes}
259*8975f5c5SAndroid Build Coastguard Worker
260*8975f5c5SAndroid Build Coastguard Worker{entry_points}
261*8975f5c5SAndroid Build Coastguard Worker
262*8975f5c5SAndroid Build Coastguard Worker#endif  // {lib}_ENTRY_POINTS_{annotation_upper}_AUTOGEN_H_
263*8975f5c5SAndroid Build Coastguard Worker"""
264*8975f5c5SAndroid Build Coastguard Worker
265*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_ENTRY_POINT_SOURCE = """\
266*8975f5c5SAndroid Build Coastguard Worker// GENERATED FILE - DO NOT EDIT.
267*8975f5c5SAndroid Build Coastguard Worker// Generated by {script_name} using data from {data_source_name}.
268*8975f5c5SAndroid Build Coastguard Worker//
269*8975f5c5SAndroid Build Coastguard Worker// Copyright 2020 The ANGLE Project Authors. All rights reserved.
270*8975f5c5SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be
271*8975f5c5SAndroid Build Coastguard Worker// found in the LICENSE file.
272*8975f5c5SAndroid Build Coastguard Worker//
273*8975f5c5SAndroid Build Coastguard Worker// entry_points_{annotation_lower}_autogen.cpp:
274*8975f5c5SAndroid Build Coastguard Worker//   Defines the {comment} entry points.
275*8975f5c5SAndroid Build Coastguard Worker
276*8975f5c5SAndroid Build Coastguard Worker{includes}
277*8975f5c5SAndroid Build Coastguard Worker
278*8975f5c5SAndroid Build Coastguard Worker{entry_points}
279*8975f5c5SAndroid Build Coastguard Worker"""
280*8975f5c5SAndroid Build Coastguard Worker
281*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_ENTRY_POINTS_ENUM_HEADER = """\
282*8975f5c5SAndroid Build Coastguard Worker// GENERATED FILE - DO NOT EDIT.
283*8975f5c5SAndroid Build Coastguard Worker// Generated by {script_name} using data from {data_source_name}.
284*8975f5c5SAndroid Build Coastguard Worker//
285*8975f5c5SAndroid Build Coastguard Worker// Copyright 2020 The ANGLE Project Authors. All rights reserved.
286*8975f5c5SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be
287*8975f5c5SAndroid Build Coastguard Worker// found in the LICENSE file.
288*8975f5c5SAndroid Build Coastguard Worker//
289*8975f5c5SAndroid Build Coastguard Worker// entry_points_enum_autogen.h:
290*8975f5c5SAndroid Build Coastguard Worker//   Defines the {lib} entry points enumeration.
291*8975f5c5SAndroid Build Coastguard Worker
292*8975f5c5SAndroid Build Coastguard Worker#ifndef COMMON_ENTRYPOINTSENUM_AUTOGEN_H_
293*8975f5c5SAndroid Build Coastguard Worker#define COMMON_ENTRYPOINTSENUM_AUTOGEN_H_
294*8975f5c5SAndroid Build Coastguard Worker
295*8975f5c5SAndroid Build Coastguard Workernamespace angle
296*8975f5c5SAndroid Build Coastguard Worker{{
297*8975f5c5SAndroid Build Coastguard Workerenum class EntryPoint
298*8975f5c5SAndroid Build Coastguard Worker{{
299*8975f5c5SAndroid Build Coastguard Worker{entry_points_list}
300*8975f5c5SAndroid Build Coastguard Worker}};
301*8975f5c5SAndroid Build Coastguard Worker
302*8975f5c5SAndroid Build Coastguard Workerconst char *GetEntryPointName(EntryPoint ep);
303*8975f5c5SAndroid Build Coastguard Worker}}  // namespace angle
304*8975f5c5SAndroid Build Coastguard Worker#endif  // COMMON_ENTRY_POINTS_ENUM_AUTOGEN_H_
305*8975f5c5SAndroid Build Coastguard Worker"""
306*8975f5c5SAndroid Build Coastguard Worker
307*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_ENTRY_POINTS_NAME_CASE = """\
308*8975f5c5SAndroid Build Coastguard Worker        case EntryPoint::{enum}:
309*8975f5c5SAndroid Build Coastguard Worker            return "{cmd}";"""
310*8975f5c5SAndroid Build Coastguard Worker
311*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_ENTRY_POINTS_ENUM_SOURCE = """\
312*8975f5c5SAndroid Build Coastguard Worker// GENERATED FILE - DO NOT EDIT.
313*8975f5c5SAndroid Build Coastguard Worker// Generated by {script_name} using data from {data_source_name}.
314*8975f5c5SAndroid Build Coastguard Worker//
315*8975f5c5SAndroid Build Coastguard Worker// Copyright 2020 The ANGLE Project Authors. All rights reserved.
316*8975f5c5SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be
317*8975f5c5SAndroid Build Coastguard Worker// found in the LICENSE file.
318*8975f5c5SAndroid Build Coastguard Worker//
319*8975f5c5SAndroid Build Coastguard Worker// entry_points_enum_autogen.cpp:
320*8975f5c5SAndroid Build Coastguard Worker//   Helper methods for the {lib} entry points enumeration.
321*8975f5c5SAndroid Build Coastguard Worker
322*8975f5c5SAndroid Build Coastguard Worker#include "common/entry_points_enum_autogen.h"
323*8975f5c5SAndroid Build Coastguard Worker
324*8975f5c5SAndroid Build Coastguard Worker#include "common/debug.h"
325*8975f5c5SAndroid Build Coastguard Worker
326*8975f5c5SAndroid Build Coastguard Workernamespace angle
327*8975f5c5SAndroid Build Coastguard Worker{{
328*8975f5c5SAndroid Build Coastguard Workerconst char *GetEntryPointName(EntryPoint ep)
329*8975f5c5SAndroid Build Coastguard Worker{{
330*8975f5c5SAndroid Build Coastguard Worker    switch (ep)
331*8975f5c5SAndroid Build Coastguard Worker    {{
332*8975f5c5SAndroid Build Coastguard Worker{entry_points_name_cases}
333*8975f5c5SAndroid Build Coastguard Worker        default:
334*8975f5c5SAndroid Build Coastguard Worker            UNREACHABLE();
335*8975f5c5SAndroid Build Coastguard Worker            return "error";
336*8975f5c5SAndroid Build Coastguard Worker    }}
337*8975f5c5SAndroid Build Coastguard Worker}}
338*8975f5c5SAndroid Build Coastguard Worker}}  // namespace angle
339*8975f5c5SAndroid Build Coastguard Worker"""
340*8975f5c5SAndroid Build Coastguard Worker
341*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_LIB_ENTRY_POINT_SOURCE = """\
342*8975f5c5SAndroid Build Coastguard Worker// GENERATED FILE - DO NOT EDIT.
343*8975f5c5SAndroid Build Coastguard Worker// Generated by {script_name} using data from {data_source_name}.
344*8975f5c5SAndroid Build Coastguard Worker//
345*8975f5c5SAndroid Build Coastguard Worker// Copyright 2020 The ANGLE Project Authors. All rights reserved.
346*8975f5c5SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be
347*8975f5c5SAndroid Build Coastguard Worker// found in the LICENSE file.
348*8975f5c5SAndroid Build Coastguard Worker//
349*8975f5c5SAndroid Build Coastguard Worker// {lib_name}_autogen.cpp: Implements the exported {lib_description} functions.
350*8975f5c5SAndroid Build Coastguard Worker
351*8975f5c5SAndroid Build Coastguard Worker{includes}
352*8975f5c5SAndroid Build Coastguard Workerextern "C" {{
353*8975f5c5SAndroid Build Coastguard Worker{entry_points}
354*8975f5c5SAndroid Build Coastguard Worker}} // extern "C"
355*8975f5c5SAndroid Build Coastguard Worker"""
356*8975f5c5SAndroid Build Coastguard Worker
357*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_ENTRY_POINT_DECL = """{angle_export}{return_type} {export_def} {name}({params});"""
358*8975f5c5SAndroid Build Coastguard Worker
359*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_GLES_ENTRY_POINT_NO_RETURN = """\
360*8975f5c5SAndroid Build Coastguard Workervoid GL_APIENTRY GL_{name}({params})
361*8975f5c5SAndroid Build Coastguard Worker{{
362*8975f5c5SAndroid Build Coastguard Worker    ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
363*8975f5c5SAndroid Build Coastguard Worker    Context *context = {context_getter};
364*8975f5c5SAndroid Build Coastguard Worker    {event_comment}EVENT(context, GL{name}, "context = %d{comma_if_needed}{format_params}", CID(context){comma_if_needed}{pass_params});
365*8975f5c5SAndroid Build Coastguard Worker
366*8975f5c5SAndroid Build Coastguard Worker    if ({valid_context_check})
367*8975f5c5SAndroid Build Coastguard Worker    {{{packed_gl_enum_conversions}
368*8975f5c5SAndroid Build Coastguard Worker        {context_lock}
369*8975f5c5SAndroid Build Coastguard Worker        bool isCallValid = (context->skipValidation() || {validation_expression});
370*8975f5c5SAndroid Build Coastguard Worker        if (isCallValid)
371*8975f5c5SAndroid Build Coastguard Worker        {{
372*8975f5c5SAndroid Build Coastguard Worker            context->{name_lower_no_suffix}({internal_params});
373*8975f5c5SAndroid Build Coastguard Worker        }}
374*8975f5c5SAndroid Build Coastguard Worker        ANGLE_CAPTURE_GL({name}, isCallValid, {gl_capture_params});
375*8975f5c5SAndroid Build Coastguard Worker    }}
376*8975f5c5SAndroid Build Coastguard Worker    else
377*8975f5c5SAndroid Build Coastguard Worker    {{
378*8975f5c5SAndroid Build Coastguard Worker        {constext_lost_error_generator}
379*8975f5c5SAndroid Build Coastguard Worker    }}
380*8975f5c5SAndroid Build Coastguard Worker    {epilog}
381*8975f5c5SAndroid Build Coastguard Worker}}
382*8975f5c5SAndroid Build Coastguard Worker"""
383*8975f5c5SAndroid Build Coastguard Worker
384*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_GLES_CONTEXT_PRIVATE_ENTRY_POINT_NO_RETURN = """\
385*8975f5c5SAndroid Build Coastguard Workervoid GL_APIENTRY GL_{name}({params})
386*8975f5c5SAndroid Build Coastguard Worker{{
387*8975f5c5SAndroid Build Coastguard Worker    ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
388*8975f5c5SAndroid Build Coastguard Worker    Context *context = {context_getter};
389*8975f5c5SAndroid Build Coastguard Worker    {event_comment}EVENT(context, GL{name}, "context = %d{comma_if_needed}{format_params}", CID(context){comma_if_needed}{pass_params});
390*8975f5c5SAndroid Build Coastguard Worker
391*8975f5c5SAndroid Build Coastguard Worker    if ({valid_context_check})
392*8975f5c5SAndroid Build Coastguard Worker    {{{packed_gl_enum_conversions}
393*8975f5c5SAndroid Build Coastguard Worker        bool isCallValid = (context->skipValidation() || {validation_expression});
394*8975f5c5SAndroid Build Coastguard Worker        if (isCallValid)
395*8975f5c5SAndroid Build Coastguard Worker        {{
396*8975f5c5SAndroid Build Coastguard Worker            ContextPrivate{name_no_suffix}({context_private_internal_params});
397*8975f5c5SAndroid Build Coastguard Worker        }}
398*8975f5c5SAndroid Build Coastguard Worker        ANGLE_CAPTURE_GL({name}, isCallValid, {gl_capture_params});
399*8975f5c5SAndroid Build Coastguard Worker    }}
400*8975f5c5SAndroid Build Coastguard Worker    else
401*8975f5c5SAndroid Build Coastguard Worker    {{
402*8975f5c5SAndroid Build Coastguard Worker        {constext_lost_error_generator}
403*8975f5c5SAndroid Build Coastguard Worker    }}
404*8975f5c5SAndroid Build Coastguard Worker    ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
405*8975f5c5SAndroid Build Coastguard Worker}}
406*8975f5c5SAndroid Build Coastguard Worker"""
407*8975f5c5SAndroid Build Coastguard Worker
408*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_GLES_ENTRY_POINT_WITH_RETURN = """\
409*8975f5c5SAndroid Build Coastguard Worker{return_type} GL_APIENTRY GL_{name}({params})
410*8975f5c5SAndroid Build Coastguard Worker{{
411*8975f5c5SAndroid Build Coastguard Worker    ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
412*8975f5c5SAndroid Build Coastguard Worker    Context *context = {context_getter};
413*8975f5c5SAndroid Build Coastguard Worker    {event_comment}EVENT(context, GL{name}, "context = %d{comma_if_needed}{format_params}", CID(context){comma_if_needed}{pass_params});
414*8975f5c5SAndroid Build Coastguard Worker
415*8975f5c5SAndroid Build Coastguard Worker    {return_type} returnValue;
416*8975f5c5SAndroid Build Coastguard Worker    if ({valid_context_check})
417*8975f5c5SAndroid Build Coastguard Worker    {{{packed_gl_enum_conversions}
418*8975f5c5SAndroid Build Coastguard Worker        {context_lock}
419*8975f5c5SAndroid Build Coastguard Worker        bool isCallValid = (context->skipValidation() || {validation_expression});
420*8975f5c5SAndroid Build Coastguard Worker        if (isCallValid)
421*8975f5c5SAndroid Build Coastguard Worker        {{
422*8975f5c5SAndroid Build Coastguard Worker            returnValue = context->{name_lower_no_suffix}({internal_params});
423*8975f5c5SAndroid Build Coastguard Worker        }}
424*8975f5c5SAndroid Build Coastguard Worker        else
425*8975f5c5SAndroid Build Coastguard Worker        {{
426*8975f5c5SAndroid Build Coastguard Worker            returnValue = GetDefaultReturnValue<angle::EntryPoint::GL{name}, {return_type}>();
427*8975f5c5SAndroid Build Coastguard Worker        }}
428*8975f5c5SAndroid Build Coastguard Worker        ANGLE_CAPTURE_GL({name}, isCallValid, {gl_capture_params}, returnValue);
429*8975f5c5SAndroid Build Coastguard Worker    }}
430*8975f5c5SAndroid Build Coastguard Worker    else
431*8975f5c5SAndroid Build Coastguard Worker    {{
432*8975f5c5SAndroid Build Coastguard Worker        {constext_lost_error_generator}
433*8975f5c5SAndroid Build Coastguard Worker        returnValue = GetDefaultReturnValue<angle::EntryPoint::GL{name}, {return_type}>();
434*8975f5c5SAndroid Build Coastguard Worker    }}
435*8975f5c5SAndroid Build Coastguard Worker    {epilog}
436*8975f5c5SAndroid Build Coastguard Worker    return returnValue;
437*8975f5c5SAndroid Build Coastguard Worker}}
438*8975f5c5SAndroid Build Coastguard Worker"""
439*8975f5c5SAndroid Build Coastguard Worker
440*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_GLES_CONTEXT_PRIVATE_ENTRY_POINT_WITH_RETURN = """\
441*8975f5c5SAndroid Build Coastguard Worker{return_type} GL_APIENTRY GL_{name}({params})
442*8975f5c5SAndroid Build Coastguard Worker{{
443*8975f5c5SAndroid Build Coastguard Worker    ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
444*8975f5c5SAndroid Build Coastguard Worker    Context *context = {context_getter};
445*8975f5c5SAndroid Build Coastguard Worker    {event_comment}EVENT(context, GL{name}, "context = %d{comma_if_needed}{format_params}", CID(context){comma_if_needed}{pass_params});
446*8975f5c5SAndroid Build Coastguard Worker
447*8975f5c5SAndroid Build Coastguard Worker    {return_type} returnValue;
448*8975f5c5SAndroid Build Coastguard Worker    if ({valid_context_check})
449*8975f5c5SAndroid Build Coastguard Worker    {{{packed_gl_enum_conversions}
450*8975f5c5SAndroid Build Coastguard Worker        bool isCallValid = (context->skipValidation() || {validation_expression});
451*8975f5c5SAndroid Build Coastguard Worker        if (isCallValid)
452*8975f5c5SAndroid Build Coastguard Worker        {{
453*8975f5c5SAndroid Build Coastguard Worker            returnValue = ContextPrivate{name_no_suffix}({context_private_internal_params});
454*8975f5c5SAndroid Build Coastguard Worker        }}
455*8975f5c5SAndroid Build Coastguard Worker        else
456*8975f5c5SAndroid Build Coastguard Worker        {{
457*8975f5c5SAndroid Build Coastguard Worker            returnValue = GetDefaultReturnValue<angle::EntryPoint::GL{name}, {return_type}>();
458*8975f5c5SAndroid Build Coastguard Worker        }}
459*8975f5c5SAndroid Build Coastguard Worker        ANGLE_CAPTURE_GL({name}, isCallValid, {gl_capture_params}, returnValue);
460*8975f5c5SAndroid Build Coastguard Worker    }}
461*8975f5c5SAndroid Build Coastguard Worker    else
462*8975f5c5SAndroid Build Coastguard Worker    {{
463*8975f5c5SAndroid Build Coastguard Worker        {constext_lost_error_generator}
464*8975f5c5SAndroid Build Coastguard Worker        returnValue = GetDefaultReturnValue<angle::EntryPoint::GL{name}, {return_type}>();
465*8975f5c5SAndroid Build Coastguard Worker    }}
466*8975f5c5SAndroid Build Coastguard Worker    ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
467*8975f5c5SAndroid Build Coastguard Worker    return returnValue;
468*8975f5c5SAndroid Build Coastguard Worker}}
469*8975f5c5SAndroid Build Coastguard Worker"""
470*8975f5c5SAndroid Build Coastguard Worker
471*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_EGL_ENTRY_POINT_NO_RETURN = """\
472*8975f5c5SAndroid Build Coastguard Workervoid EGLAPIENTRY EGL_{name}({params})
473*8975f5c5SAndroid Build Coastguard Worker{{
474*8975f5c5SAndroid Build Coastguard Worker    {preamble}
475*8975f5c5SAndroid Build Coastguard Worker    Thread *thread = egl::GetCurrentThread();
476*8975f5c5SAndroid Build Coastguard Worker    ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
477*8975f5c5SAndroid Build Coastguard Worker    {{
478*8975f5c5SAndroid Build Coastguard Worker        ANGLE_SCOPED_GLOBAL_LOCK();
479*8975f5c5SAndroid Build Coastguard Worker        EGL_EVENT({name}, "{format_params}"{comma_if_needed}{pass_params});
480*8975f5c5SAndroid Build Coastguard Worker
481*8975f5c5SAndroid Build Coastguard Worker        {packed_gl_enum_conversions}
482*8975f5c5SAndroid Build Coastguard Worker
483*8975f5c5SAndroid Build Coastguard Worker        {{
484*8975f5c5SAndroid Build Coastguard Worker            ANGLE_EGL_SCOPED_CONTEXT_LOCK({name}, thread{comma_if_needed_context_lock}{internal_context_lock_params});
485*8975f5c5SAndroid Build Coastguard Worker            if (IsEGLValidationEnabled())
486*8975f5c5SAndroid Build Coastguard Worker            {{
487*8975f5c5SAndroid Build Coastguard Worker                ANGLE_EGL_VALIDATE_VOID(thread, {name}, {labeled_object}, {internal_params});
488*8975f5c5SAndroid Build Coastguard Worker            }}
489*8975f5c5SAndroid Build Coastguard Worker            else
490*8975f5c5SAndroid Build Coastguard Worker            {{
491*8975f5c5SAndroid Build Coastguard Worker                {attrib_map_init}
492*8975f5c5SAndroid Build Coastguard Worker            }}
493*8975f5c5SAndroid Build Coastguard Worker
494*8975f5c5SAndroid Build Coastguard Worker            {name}(thread{comma_if_needed}{internal_params});
495*8975f5c5SAndroid Build Coastguard Worker        }}
496*8975f5c5SAndroid Build Coastguard Worker
497*8975f5c5SAndroid Build Coastguard Worker        ANGLE_CAPTURE_EGL({name}, true, {egl_capture_params});
498*8975f5c5SAndroid Build Coastguard Worker    }}
499*8975f5c5SAndroid Build Coastguard Worker    {epilog}
500*8975f5c5SAndroid Build Coastguard Worker}}
501*8975f5c5SAndroid Build Coastguard Worker"""
502*8975f5c5SAndroid Build Coastguard Worker
503*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_EGL_ENTRY_POINT_WITH_RETURN = """\
504*8975f5c5SAndroid Build Coastguard Worker{return_type} EGLAPIENTRY EGL_{name}({params})
505*8975f5c5SAndroid Build Coastguard Worker{{
506*8975f5c5SAndroid Build Coastguard Worker    {preamble}
507*8975f5c5SAndroid Build Coastguard Worker    Thread *thread = egl::GetCurrentThread();
508*8975f5c5SAndroid Build Coastguard Worker    ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
509*8975f5c5SAndroid Build Coastguard Worker    {return_type} returnValue;
510*8975f5c5SAndroid Build Coastguard Worker    {{
511*8975f5c5SAndroid Build Coastguard Worker        {egl_lock}
512*8975f5c5SAndroid Build Coastguard Worker        EGL_EVENT({name}, "{format_params}"{comma_if_needed}{pass_params});
513*8975f5c5SAndroid Build Coastguard Worker
514*8975f5c5SAndroid Build Coastguard Worker        {packed_gl_enum_conversions}
515*8975f5c5SAndroid Build Coastguard Worker
516*8975f5c5SAndroid Build Coastguard Worker        {{
517*8975f5c5SAndroid Build Coastguard Worker            ANGLE_EGL_SCOPED_CONTEXT_LOCK({name}, thread{comma_if_needed_context_lock}{internal_context_lock_params});
518*8975f5c5SAndroid Build Coastguard Worker            if (IsEGLValidationEnabled())
519*8975f5c5SAndroid Build Coastguard Worker            {{
520*8975f5c5SAndroid Build Coastguard Worker                ANGLE_EGL_VALIDATE(thread, {name}, {labeled_object}, {return_type}{comma_if_needed}{internal_params});
521*8975f5c5SAndroid Build Coastguard Worker            }}
522*8975f5c5SAndroid Build Coastguard Worker            else
523*8975f5c5SAndroid Build Coastguard Worker            {{
524*8975f5c5SAndroid Build Coastguard Worker                {attrib_map_init}
525*8975f5c5SAndroid Build Coastguard Worker            }}
526*8975f5c5SAndroid Build Coastguard Worker
527*8975f5c5SAndroid Build Coastguard Worker            returnValue = {name}(thread{comma_if_needed}{internal_params});
528*8975f5c5SAndroid Build Coastguard Worker        }}
529*8975f5c5SAndroid Build Coastguard Worker
530*8975f5c5SAndroid Build Coastguard Worker        ANGLE_CAPTURE_EGL({name}, true, {egl_capture_params}, returnValue);
531*8975f5c5SAndroid Build Coastguard Worker    }}
532*8975f5c5SAndroid Build Coastguard Worker    {epilog}
533*8975f5c5SAndroid Build Coastguard Worker    return returnValue;
534*8975f5c5SAndroid Build Coastguard Worker}}
535*8975f5c5SAndroid Build Coastguard Worker"""
536*8975f5c5SAndroid Build Coastguard Worker
537*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_EGL_ENTRY_POINT_WITH_RETURN_NO_LOCKS = """\
538*8975f5c5SAndroid Build Coastguard Worker{return_type} EGLAPIENTRY EGL_{name}({params})
539*8975f5c5SAndroid Build Coastguard Worker{{
540*8975f5c5SAndroid Build Coastguard Worker    {preamble}
541*8975f5c5SAndroid Build Coastguard Worker    Thread *thread = egl::GetCurrentThread();
542*8975f5c5SAndroid Build Coastguard Worker    ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
543*8975f5c5SAndroid Build Coastguard Worker    {return_type} returnValue;
544*8975f5c5SAndroid Build Coastguard Worker
545*8975f5c5SAndroid Build Coastguard Worker    EGL_EVENT({name}, "{format_params}"{comma_if_needed}{pass_params});
546*8975f5c5SAndroid Build Coastguard Worker
547*8975f5c5SAndroid Build Coastguard Worker    {packed_gl_enum_conversions}
548*8975f5c5SAndroid Build Coastguard Worker
549*8975f5c5SAndroid Build Coastguard Worker    if (IsEGLValidationEnabled())
550*8975f5c5SAndroid Build Coastguard Worker    {{
551*8975f5c5SAndroid Build Coastguard Worker        ANGLE_EGL_VALIDATE(thread, {name}, {labeled_object}, {return_type}{comma_if_needed}{internal_params});
552*8975f5c5SAndroid Build Coastguard Worker    }}
553*8975f5c5SAndroid Build Coastguard Worker    else
554*8975f5c5SAndroid Build Coastguard Worker    {{
555*8975f5c5SAndroid Build Coastguard Worker        {attrib_map_init}
556*8975f5c5SAndroid Build Coastguard Worker    }}
557*8975f5c5SAndroid Build Coastguard Worker
558*8975f5c5SAndroid Build Coastguard Worker    returnValue = {name}(thread{comma_if_needed}{internal_params});
559*8975f5c5SAndroid Build Coastguard Worker
560*8975f5c5SAndroid Build Coastguard Worker    ANGLE_CAPTURE_EGL({name}, true, {egl_capture_params}, returnValue);
561*8975f5c5SAndroid Build Coastguard Worker
562*8975f5c5SAndroid Build Coastguard Worker    {epilog}
563*8975f5c5SAndroid Build Coastguard Worker    return returnValue;
564*8975f5c5SAndroid Build Coastguard Worker}}
565*8975f5c5SAndroid Build Coastguard Worker"""
566*8975f5c5SAndroid Build Coastguard Worker
567*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_CL_ENTRY_POINT_NO_RETURN = """\
568*8975f5c5SAndroid Build Coastguard Workervoid CL_API_CALL cl{name}({params})
569*8975f5c5SAndroid Build Coastguard Worker{{
570*8975f5c5SAndroid Build Coastguard Worker    CL_EVENT({name}, "{format_params}"{comma_if_needed}{pass_params});
571*8975f5c5SAndroid Build Coastguard Worker
572*8975f5c5SAndroid Build Coastguard Worker    {packed_gl_enum_conversions}
573*8975f5c5SAndroid Build Coastguard Worker
574*8975f5c5SAndroid Build Coastguard Worker    ANGLE_CL_VALIDATE_VOID({name}{comma_if_needed}{internal_params});
575*8975f5c5SAndroid Build Coastguard Worker
576*8975f5c5SAndroid Build Coastguard Worker    cl::gClErrorTls = CL_SUCCESS;
577*8975f5c5SAndroid Build Coastguard Worker    {name}({internal_params});
578*8975f5c5SAndroid Build Coastguard Worker}}
579*8975f5c5SAndroid Build Coastguard Worker"""
580*8975f5c5SAndroid Build Coastguard Worker
581*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_CL_ENTRY_POINT_WITH_RETURN_ERROR = """\
582*8975f5c5SAndroid Build Coastguard Workercl_int CL_API_CALL cl{name}({params})
583*8975f5c5SAndroid Build Coastguard Worker{{{initialization}
584*8975f5c5SAndroid Build Coastguard Worker    CL_EVENT({name}, "{format_params}"{comma_if_needed}{pass_params});
585*8975f5c5SAndroid Build Coastguard Worker
586*8975f5c5SAndroid Build Coastguard Worker    {packed_gl_enum_conversions}
587*8975f5c5SAndroid Build Coastguard Worker
588*8975f5c5SAndroid Build Coastguard Worker    ANGLE_CL_VALIDATE_ERROR({name}{comma_if_needed}{internal_params});
589*8975f5c5SAndroid Build Coastguard Worker
590*8975f5c5SAndroid Build Coastguard Worker    cl::gClErrorTls = CL_SUCCESS;
591*8975f5c5SAndroid Build Coastguard Worker    return {name}({internal_params});
592*8975f5c5SAndroid Build Coastguard Worker}}
593*8975f5c5SAndroid Build Coastguard Worker"""
594*8975f5c5SAndroid Build Coastguard Worker
595*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_CL_ENTRY_POINT_WITH_ERRCODE_RET = """\
596*8975f5c5SAndroid Build Coastguard Worker{return_type} CL_API_CALL cl{name}({params})
597*8975f5c5SAndroid Build Coastguard Worker{{{initialization}
598*8975f5c5SAndroid Build Coastguard Worker    CL_EVENT({name}, "{format_params}"{comma_if_needed}{pass_params});
599*8975f5c5SAndroid Build Coastguard Worker
600*8975f5c5SAndroid Build Coastguard Worker    {packed_gl_enum_conversions}
601*8975f5c5SAndroid Build Coastguard Worker
602*8975f5c5SAndroid Build Coastguard Worker    ANGLE_CL_VALIDATE_ERRCODE_RET({name}{comma_if_needed}{internal_params});
603*8975f5c5SAndroid Build Coastguard Worker
604*8975f5c5SAndroid Build Coastguard Worker    cl::gClErrorTls      = CL_SUCCESS;
605*8975f5c5SAndroid Build Coastguard Worker    {return_type} object = {name}({internal_params});
606*8975f5c5SAndroid Build Coastguard Worker
607*8975f5c5SAndroid Build Coastguard Worker    ASSERT((cl::gClErrorTls == CL_SUCCESS) == (object != nullptr));
608*8975f5c5SAndroid Build Coastguard Worker    if (errcode_ret != nullptr)
609*8975f5c5SAndroid Build Coastguard Worker    {{
610*8975f5c5SAndroid Build Coastguard Worker        *errcode_ret = cl::gClErrorTls;
611*8975f5c5SAndroid Build Coastguard Worker    }}
612*8975f5c5SAndroid Build Coastguard Worker    return object;
613*8975f5c5SAndroid Build Coastguard Worker}}
614*8975f5c5SAndroid Build Coastguard Worker"""
615*8975f5c5SAndroid Build Coastguard Worker
616*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_CL_ENTRY_POINT_WITH_RETURN_POINTER = """\
617*8975f5c5SAndroid Build Coastguard Worker{return_type} CL_API_CALL cl{name}({params})
618*8975f5c5SAndroid Build Coastguard Worker{{{initialization}
619*8975f5c5SAndroid Build Coastguard Worker    CL_EVENT({name}, "{format_params}"{comma_if_needed}{pass_params});
620*8975f5c5SAndroid Build Coastguard Worker
621*8975f5c5SAndroid Build Coastguard Worker    {packed_gl_enum_conversions}
622*8975f5c5SAndroid Build Coastguard Worker
623*8975f5c5SAndroid Build Coastguard Worker    cl::gClErrorTls = CL_SUCCESS;
624*8975f5c5SAndroid Build Coastguard Worker    ANGLE_CL_VALIDATE_POINTER({name}{comma_if_needed}{internal_params});
625*8975f5c5SAndroid Build Coastguard Worker
626*8975f5c5SAndroid Build Coastguard Worker    return {name}({internal_params});
627*8975f5c5SAndroid Build Coastguard Worker}}
628*8975f5c5SAndroid Build Coastguard Worker"""
629*8975f5c5SAndroid Build Coastguard Worker
630*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_CL_STUBS_HEADER = """\
631*8975f5c5SAndroid Build Coastguard Worker// GENERATED FILE - DO NOT EDIT.
632*8975f5c5SAndroid Build Coastguard Worker// Generated by {script_name} using data from {data_source_name}.
633*8975f5c5SAndroid Build Coastguard Worker//
634*8975f5c5SAndroid Build Coastguard Worker// Copyright 2021 The ANGLE Project Authors. All rights reserved.
635*8975f5c5SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be
636*8975f5c5SAndroid Build Coastguard Worker// found in the LICENSE file.
637*8975f5c5SAndroid Build Coastguard Worker//
638*8975f5c5SAndroid Build Coastguard Worker// {annotation_lower}_stubs_autogen.h: Stubs for {title} entry points.
639*8975f5c5SAndroid Build Coastguard Worker
640*8975f5c5SAndroid Build Coastguard Worker#ifndef LIBGLESV2_{annotation_upper}_STUBS_AUTOGEN_H_
641*8975f5c5SAndroid Build Coastguard Worker#define LIBGLESV2_{annotation_upper}_STUBS_AUTOGEN_H_
642*8975f5c5SAndroid Build Coastguard Worker
643*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/cl_types.h"
644*8975f5c5SAndroid Build Coastguard Worker
645*8975f5c5SAndroid Build Coastguard Workernamespace cl
646*8975f5c5SAndroid Build Coastguard Worker{{
647*8975f5c5SAndroid Build Coastguard Worker{stubs}
648*8975f5c5SAndroid Build Coastguard Worker}}  // namespace cl
649*8975f5c5SAndroid Build Coastguard Worker#endif  // LIBGLESV2_{annotation_upper}_STUBS_AUTOGEN_H_
650*8975f5c5SAndroid Build Coastguard Worker"""
651*8975f5c5SAndroid Build Coastguard Worker
652*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_EGL_STUBS_HEADER = """\
653*8975f5c5SAndroid Build Coastguard Worker// GENERATED FILE - DO NOT EDIT.
654*8975f5c5SAndroid Build Coastguard Worker// Generated by {script_name} using data from {data_source_name}.
655*8975f5c5SAndroid Build Coastguard Worker//
656*8975f5c5SAndroid Build Coastguard Worker// Copyright 2020 The ANGLE Project Authors. All rights reserved.
657*8975f5c5SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be
658*8975f5c5SAndroid Build Coastguard Worker// found in the LICENSE file.
659*8975f5c5SAndroid Build Coastguard Worker//
660*8975f5c5SAndroid Build Coastguard Worker// {annotation_lower}_stubs_autogen.h: Stubs for {title} entry points.
661*8975f5c5SAndroid Build Coastguard Worker
662*8975f5c5SAndroid Build Coastguard Worker#ifndef LIBGLESV2_{annotation_upper}_STUBS_AUTOGEN_H_
663*8975f5c5SAndroid Build Coastguard Worker#define LIBGLESV2_{annotation_upper}_STUBS_AUTOGEN_H_
664*8975f5c5SAndroid Build Coastguard Worker
665*8975f5c5SAndroid Build Coastguard Worker#include <EGL/egl.h>
666*8975f5c5SAndroid Build Coastguard Worker#include <EGL/eglext.h>
667*8975f5c5SAndroid Build Coastguard Worker
668*8975f5c5SAndroid Build Coastguard Worker#include "common/PackedEnums.h"
669*8975f5c5SAndroid Build Coastguard Worker#include "common/PackedEGLEnums_autogen.h"
670*8975f5c5SAndroid Build Coastguard Worker
671*8975f5c5SAndroid Build Coastguard Workernamespace gl
672*8975f5c5SAndroid Build Coastguard Worker{{
673*8975f5c5SAndroid Build Coastguard Workerclass Context;
674*8975f5c5SAndroid Build Coastguard Worker}}  // namespace gl
675*8975f5c5SAndroid Build Coastguard Worker
676*8975f5c5SAndroid Build Coastguard Workernamespace egl
677*8975f5c5SAndroid Build Coastguard Worker{{
678*8975f5c5SAndroid Build Coastguard Workerclass AttributeMap;
679*8975f5c5SAndroid Build Coastguard Workerclass Device;
680*8975f5c5SAndroid Build Coastguard Workerclass Display;
681*8975f5c5SAndroid Build Coastguard Workerclass Image;
682*8975f5c5SAndroid Build Coastguard Workerclass Stream;
683*8975f5c5SAndroid Build Coastguard Workerclass Surface;
684*8975f5c5SAndroid Build Coastguard Workerclass Sync;
685*8975f5c5SAndroid Build Coastguard Workerclass Thread;
686*8975f5c5SAndroid Build Coastguard Workerstruct Config;
687*8975f5c5SAndroid Build Coastguard Worker
688*8975f5c5SAndroid Build Coastguard Worker{stubs}
689*8975f5c5SAndroid Build Coastguard Worker}}  // namespace egl
690*8975f5c5SAndroid Build Coastguard Worker#endif  // LIBGLESV2_{annotation_upper}_STUBS_AUTOGEN_H_
691*8975f5c5SAndroid Build Coastguard Worker"""
692*8975f5c5SAndroid Build Coastguard Worker
693*8975f5c5SAndroid Build Coastguard WorkerCONTEXT_HEADER = """\
694*8975f5c5SAndroid Build Coastguard Worker// GENERATED FILE - DO NOT EDIT.
695*8975f5c5SAndroid Build Coastguard Worker// Generated by {script_name} using data from {data_source_name}.
696*8975f5c5SAndroid Build Coastguard Worker//
697*8975f5c5SAndroid Build Coastguard Worker// Copyright 2020 The ANGLE Project Authors. All rights reserved.
698*8975f5c5SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be
699*8975f5c5SAndroid Build Coastguard Worker// found in the LICENSE file.
700*8975f5c5SAndroid Build Coastguard Worker//
701*8975f5c5SAndroid Build Coastguard Worker// Context_{annotation_lower}_autogen.h: Creates a macro for interfaces in Context.
702*8975f5c5SAndroid Build Coastguard Worker
703*8975f5c5SAndroid Build Coastguard Worker#ifndef ANGLE_CONTEXT_{annotation_upper}_AUTOGEN_H_
704*8975f5c5SAndroid Build Coastguard Worker#define ANGLE_CONTEXT_{annotation_upper}_AUTOGEN_H_
705*8975f5c5SAndroid Build Coastguard Worker
706*8975f5c5SAndroid Build Coastguard Worker#define ANGLE_{annotation_upper}_CONTEXT_API \\
707*8975f5c5SAndroid Build Coastguard Worker{interface}
708*8975f5c5SAndroid Build Coastguard Worker
709*8975f5c5SAndroid Build Coastguard Worker#endif // ANGLE_CONTEXT_API_{version}_AUTOGEN_H_
710*8975f5c5SAndroid Build Coastguard Worker"""
711*8975f5c5SAndroid Build Coastguard Worker
712*8975f5c5SAndroid Build Coastguard WorkerCONTEXT_DECL_FORMAT = """    {return_type} {name_lower_no_suffix}({internal_params}){maybe_const}; \\"""
713*8975f5c5SAndroid Build Coastguard Worker
714*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_CL_ENTRY_POINT_EXPORT = """\
715*8975f5c5SAndroid Build Coastguard Worker{return_type} CL_API_CALL cl{name}({params})
716*8975f5c5SAndroid Build Coastguard Worker{{
717*8975f5c5SAndroid Build Coastguard Worker    return cl::GetDispatch().cl{name}({internal_params});
718*8975f5c5SAndroid Build Coastguard Worker}}
719*8975f5c5SAndroid Build Coastguard Worker"""
720*8975f5c5SAndroid Build Coastguard Worker
721*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_GL_ENTRY_POINT_EXPORT = """\
722*8975f5c5SAndroid Build Coastguard Worker{return_type} GL_APIENTRY gl{name}({params})
723*8975f5c5SAndroid Build Coastguard Worker{{
724*8975f5c5SAndroid Build Coastguard Worker    return GL_{name}({internal_params});
725*8975f5c5SAndroid Build Coastguard Worker}}
726*8975f5c5SAndroid Build Coastguard Worker"""
727*8975f5c5SAndroid Build Coastguard Worker
728*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_EGL_ENTRY_POINT_EXPORT = """\
729*8975f5c5SAndroid Build Coastguard Worker{return_type} EGLAPIENTRY egl{name}({params})
730*8975f5c5SAndroid Build Coastguard Worker{{
731*8975f5c5SAndroid Build Coastguard Worker    EnsureEGLLoaded();
732*8975f5c5SAndroid Build Coastguard Worker    return EGL_{name}({internal_params});
733*8975f5c5SAndroid Build Coastguard Worker}}
734*8975f5c5SAndroid Build Coastguard Worker"""
735*8975f5c5SAndroid Build Coastguard Worker
736*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_GLEXT_FUNCTION_POINTER = """typedef {return_type}(GL_APIENTRYP PFN{name_upper}PROC)({params});"""
737*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_GLEXT_FUNCTION_PROTOTYPE = """{apicall} {return_type}GL_APIENTRY {name}({params});"""
738*8975f5c5SAndroid Build Coastguard Worker
739*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_GL_VALIDATION_HEADER = """\
740*8975f5c5SAndroid Build Coastguard Worker// GENERATED FILE - DO NOT EDIT.
741*8975f5c5SAndroid Build Coastguard Worker// Generated by {script_name} using data from {data_source_name}.
742*8975f5c5SAndroid Build Coastguard Worker//
743*8975f5c5SAndroid Build Coastguard Worker// Copyright 2020 The ANGLE Project Authors. All rights reserved.
744*8975f5c5SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be
745*8975f5c5SAndroid Build Coastguard Worker// found in the LICENSE file.
746*8975f5c5SAndroid Build Coastguard Worker//
747*8975f5c5SAndroid Build Coastguard Worker// validation{annotation}_autogen.h:
748*8975f5c5SAndroid Build Coastguard Worker//   Validation functions for the OpenGL {comment} entry points.
749*8975f5c5SAndroid Build Coastguard Worker
750*8975f5c5SAndroid Build Coastguard Worker#ifndef LIBANGLE_VALIDATION_{annotation}_AUTOGEN_H_
751*8975f5c5SAndroid Build Coastguard Worker#define LIBANGLE_VALIDATION_{annotation}_AUTOGEN_H_
752*8975f5c5SAndroid Build Coastguard Worker
753*8975f5c5SAndroid Build Coastguard Worker#include "common/entry_points_enum_autogen.h"
754*8975f5c5SAndroid Build Coastguard Worker#include "common/PackedEnums.h"
755*8975f5c5SAndroid Build Coastguard Worker
756*8975f5c5SAndroid Build Coastguard Workernamespace gl
757*8975f5c5SAndroid Build Coastguard Worker{{
758*8975f5c5SAndroid Build Coastguard Workerclass Context;
759*8975f5c5SAndroid Build Coastguard Workerclass PrivateState;
760*8975f5c5SAndroid Build Coastguard Workerclass ErrorSet;
761*8975f5c5SAndroid Build Coastguard Worker
762*8975f5c5SAndroid Build Coastguard Worker{prototypes}
763*8975f5c5SAndroid Build Coastguard Worker}}  // namespace gl
764*8975f5c5SAndroid Build Coastguard Worker
765*8975f5c5SAndroid Build Coastguard Worker#endif  // LIBANGLE_VALIDATION_{annotation}_AUTOGEN_H_
766*8975f5c5SAndroid Build Coastguard Worker"""
767*8975f5c5SAndroid Build Coastguard Worker
768*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_CL_VALIDATION_HEADER = """\
769*8975f5c5SAndroid Build Coastguard Worker// GENERATED FILE - DO NOT EDIT.
770*8975f5c5SAndroid Build Coastguard Worker// Generated by {script_name} using data from {data_source_name}.
771*8975f5c5SAndroid Build Coastguard Worker//
772*8975f5c5SAndroid Build Coastguard Worker// Copyright 2021 The ANGLE Project Authors. All rights reserved.
773*8975f5c5SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be
774*8975f5c5SAndroid Build Coastguard Worker// found in the LICENSE file.
775*8975f5c5SAndroid Build Coastguard Worker//
776*8975f5c5SAndroid Build Coastguard Worker// validation{annotation}_autogen.h:
777*8975f5c5SAndroid Build Coastguard Worker//   Validation functions for the {comment} entry points.
778*8975f5c5SAndroid Build Coastguard Worker
779*8975f5c5SAndroid Build Coastguard Worker#ifndef LIBANGLE_VALIDATION_{annotation}_AUTOGEN_H_
780*8975f5c5SAndroid Build Coastguard Worker#define LIBANGLE_VALIDATION_{annotation}_AUTOGEN_H_
781*8975f5c5SAndroid Build Coastguard Worker
782*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/validationCL.h"
783*8975f5c5SAndroid Build Coastguard Worker
784*8975f5c5SAndroid Build Coastguard Workernamespace cl
785*8975f5c5SAndroid Build Coastguard Worker{{
786*8975f5c5SAndroid Build Coastguard Worker{prototypes}
787*8975f5c5SAndroid Build Coastguard Worker}}  // namespace cl
788*8975f5c5SAndroid Build Coastguard Worker
789*8975f5c5SAndroid Build Coastguard Worker#endif  // LIBANGLE_VALIDATION_{annotation}_AUTOGEN_H_
790*8975f5c5SAndroid Build Coastguard Worker"""
791*8975f5c5SAndroid Build Coastguard Worker
792*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_EGL_VALIDATION_HEADER = """\
793*8975f5c5SAndroid Build Coastguard Worker// GENERATED FILE - DO NOT EDIT.
794*8975f5c5SAndroid Build Coastguard Worker// Generated by {script_name} using data from {data_source_name}.
795*8975f5c5SAndroid Build Coastguard Worker//
796*8975f5c5SAndroid Build Coastguard Worker// Copyright 2020 The ANGLE Project Authors. All rights reserved.
797*8975f5c5SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be
798*8975f5c5SAndroid Build Coastguard Worker// found in the LICENSE file.
799*8975f5c5SAndroid Build Coastguard Worker//
800*8975f5c5SAndroid Build Coastguard Worker// validation{annotation}_autogen.h:
801*8975f5c5SAndroid Build Coastguard Worker//   Validation functions for the {comment} entry points.
802*8975f5c5SAndroid Build Coastguard Worker
803*8975f5c5SAndroid Build Coastguard Worker#ifndef LIBANGLE_VALIDATION_{annotation}_AUTOGEN_H_
804*8975f5c5SAndroid Build Coastguard Worker#define LIBANGLE_VALIDATION_{annotation}_AUTOGEN_H_
805*8975f5c5SAndroid Build Coastguard Worker
806*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/validationEGL.h"
807*8975f5c5SAndroid Build Coastguard Worker
808*8975f5c5SAndroid Build Coastguard Workernamespace egl
809*8975f5c5SAndroid Build Coastguard Worker{{
810*8975f5c5SAndroid Build Coastguard Worker{prototypes}
811*8975f5c5SAndroid Build Coastguard Worker}}  // namespace egl
812*8975f5c5SAndroid Build Coastguard Worker
813*8975f5c5SAndroid Build Coastguard Worker#endif  // LIBANGLE_VALIDATION_{annotation}_AUTOGEN_H_
814*8975f5c5SAndroid Build Coastguard Worker"""
815*8975f5c5SAndroid Build Coastguard Worker
816*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_CONTEXT_PRIVATE_CALL_HEADER = """\
817*8975f5c5SAndroid Build Coastguard Worker// GENERATED FILE - DO NOT EDIT.
818*8975f5c5SAndroid Build Coastguard Worker// Generated by {script_name} using data from {data_source_name}.
819*8975f5c5SAndroid Build Coastguard Worker//
820*8975f5c5SAndroid Build Coastguard Worker// Copyright 2023 The ANGLE Project Authors. All rights reserved.
821*8975f5c5SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be
822*8975f5c5SAndroid Build Coastguard Worker// found in the LICENSE file.
823*8975f5c5SAndroid Build Coastguard Worker//
824*8975f5c5SAndroid Build Coastguard Worker// context_private_call_autogen.h:
825*8975f5c5SAndroid Build Coastguard Worker//   Helpers that set/get state that is entirely privately accessed by the context.
826*8975f5c5SAndroid Build Coastguard Worker
827*8975f5c5SAndroid Build Coastguard Worker#ifndef LIBANGLE_CONTEXT_PRIVATE_CALL_AUTOGEN_H_
828*8975f5c5SAndroid Build Coastguard Worker#define LIBANGLE_CONTEXT_PRIVATE_CALL_AUTOGEN_H_
829*8975f5c5SAndroid Build Coastguard Worker
830*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/Context.h"
831*8975f5c5SAndroid Build Coastguard Worker
832*8975f5c5SAndroid Build Coastguard Workernamespace gl
833*8975f5c5SAndroid Build Coastguard Worker{{
834*8975f5c5SAndroid Build Coastguard Worker{prototypes}
835*8975f5c5SAndroid Build Coastguard Worker}}  // namespace gl
836*8975f5c5SAndroid Build Coastguard Worker
837*8975f5c5SAndroid Build Coastguard Worker#endif  // LIBANGLE_CONTEXT_PRIVATE_CALL_AUTOGEN_H_
838*8975f5c5SAndroid Build Coastguard Worker"""
839*8975f5c5SAndroid Build Coastguard Worker
840*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_EGL_CONTEXT_LOCK_HEADER = """\
841*8975f5c5SAndroid Build Coastguard Worker// GENERATED FILE - DO NOT EDIT.
842*8975f5c5SAndroid Build Coastguard Worker// Generated by {script_name} using data from {data_source_name}.
843*8975f5c5SAndroid Build Coastguard Worker//
844*8975f5c5SAndroid Build Coastguard Worker// Copyright 2023 The ANGLE Project Authors. All rights reserved.
845*8975f5c5SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be
846*8975f5c5SAndroid Build Coastguard Worker// found in the LICENSE file.
847*8975f5c5SAndroid Build Coastguard Worker//
848*8975f5c5SAndroid Build Coastguard Worker// {annotation_lower}_context_lock_autogen.h:
849*8975f5c5SAndroid Build Coastguard Worker//   Context Lock functions for the {comment} entry points.
850*8975f5c5SAndroid Build Coastguard Worker
851*8975f5c5SAndroid Build Coastguard Worker#ifndef LIBGLESV2_{annotation_upper}_CONTEXT_LOCK_AUTOGEN_H_
852*8975f5c5SAndroid Build Coastguard Worker#define LIBGLESV2_{annotation_upper}_CONTEXT_LOCK_AUTOGEN_H_
853*8975f5c5SAndroid Build Coastguard Worker
854*8975f5c5SAndroid Build Coastguard Worker#include "libGLESv2/global_state.h"
855*8975f5c5SAndroid Build Coastguard Worker
856*8975f5c5SAndroid Build Coastguard Workernamespace egl
857*8975f5c5SAndroid Build Coastguard Worker{{
858*8975f5c5SAndroid Build Coastguard Worker{prototypes}
859*8975f5c5SAndroid Build Coastguard Worker}}  // namespace egl
860*8975f5c5SAndroid Build Coastguard Worker
861*8975f5c5SAndroid Build Coastguard Worker#endif  // LIBGLESV2_{annotation_upper}_CONTEXT_LOCK_AUTOGEN_H_
862*8975f5c5SAndroid Build Coastguard Worker"""
863*8975f5c5SAndroid Build Coastguard Worker
864*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_CAPTURE_HEADER = """\
865*8975f5c5SAndroid Build Coastguard Worker// GENERATED FILE - DO NOT EDIT.
866*8975f5c5SAndroid Build Coastguard Worker// Generated by {script_name} using data from {data_source_name}.
867*8975f5c5SAndroid Build Coastguard Worker//
868*8975f5c5SAndroid Build Coastguard Worker// Copyright 2020 The ANGLE Project Authors. All rights reserved.
869*8975f5c5SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be
870*8975f5c5SAndroid Build Coastguard Worker// found in the LICENSE file.
871*8975f5c5SAndroid Build Coastguard Worker//
872*8975f5c5SAndroid Build Coastguard Worker// capture_{annotation_lower}_autogen.h:
873*8975f5c5SAndroid Build Coastguard Worker//   Capture functions for the OpenGL ES {comment} entry points.
874*8975f5c5SAndroid Build Coastguard Worker
875*8975f5c5SAndroid Build Coastguard Worker#ifndef LIBANGLE_CAPTURE_{annotation_upper}_AUTOGEN_H_
876*8975f5c5SAndroid Build Coastguard Worker#define LIBANGLE_CAPTURE_{annotation_upper}_AUTOGEN_H_
877*8975f5c5SAndroid Build Coastguard Worker
878*8975f5c5SAndroid Build Coastguard Worker#include "common/PackedEnums.h"
879*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/capture/FrameCapture.h"
880*8975f5c5SAndroid Build Coastguard Worker
881*8975f5c5SAndroid Build Coastguard Workernamespace {namespace}
882*8975f5c5SAndroid Build Coastguard Worker{{
883*8975f5c5SAndroid Build Coastguard Worker{prototypes}
884*8975f5c5SAndroid Build Coastguard Worker}}  // namespace {namespace}
885*8975f5c5SAndroid Build Coastguard Worker
886*8975f5c5SAndroid Build Coastguard Worker#endif  // LIBANGLE_CAPTURE_{annotation_upper}_AUTOGEN_H_
887*8975f5c5SAndroid Build Coastguard Worker"""
888*8975f5c5SAndroid Build Coastguard Worker
889*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_CAPTURE_SOURCE = """\
890*8975f5c5SAndroid Build Coastguard Worker// GENERATED FILE - DO NOT EDIT.
891*8975f5c5SAndroid Build Coastguard Worker// Generated by {script_name} using data from {data_source_name}.
892*8975f5c5SAndroid Build Coastguard Worker//
893*8975f5c5SAndroid Build Coastguard Worker// Copyright 2020 The ANGLE Project Authors. All rights reserved.
894*8975f5c5SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be
895*8975f5c5SAndroid Build Coastguard Worker// found in the LICENSE file.
896*8975f5c5SAndroid Build Coastguard Worker//
897*8975f5c5SAndroid Build Coastguard Worker// capture_{annotation_with_dash}_autogen.cpp:
898*8975f5c5SAndroid Build Coastguard Worker//   Capture functions for the OpenGL ES {comment} entry points.
899*8975f5c5SAndroid Build Coastguard Worker
900*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/capture/capture_{annotation_with_dash}_autogen.h"
901*8975f5c5SAndroid Build Coastguard Worker
902*8975f5c5SAndroid Build Coastguard Worker#include "common/gl_enum_utils.h"
903*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/Context.h"
904*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/capture/FrameCapture.h"
905*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/validation{annotation_no_dash}.h"
906*8975f5c5SAndroid Build Coastguard Worker
907*8975f5c5SAndroid Build Coastguard Workerusing namespace angle;
908*8975f5c5SAndroid Build Coastguard Worker
909*8975f5c5SAndroid Build Coastguard Workernamespace {namespace}
910*8975f5c5SAndroid Build Coastguard Worker{{
911*8975f5c5SAndroid Build Coastguard Worker{capture_methods}
912*8975f5c5SAndroid Build Coastguard Worker}}  // namespace {namespace}
913*8975f5c5SAndroid Build Coastguard Worker"""
914*8975f5c5SAndroid Build Coastguard Worker
915*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_CAPTURE_METHOD_WITH_RETURN_VALUE = """\
916*8975f5c5SAndroid Build Coastguard WorkerCallCapture Capture{short_name}({params_with_type}, {return_value_type_original} returnValue)
917*8975f5c5SAndroid Build Coastguard Worker{{
918*8975f5c5SAndroid Build Coastguard Worker    ParamBuffer paramBuffer;
919*8975f5c5SAndroid Build Coastguard Worker
920*8975f5c5SAndroid Build Coastguard Worker    {parameter_captures}
921*8975f5c5SAndroid Build Coastguard Worker
922*8975f5c5SAndroid Build Coastguard Worker    ParamCapture returnValueCapture("returnValue", ParamType::T{return_value_type_custom});
923*8975f5c5SAndroid Build Coastguard Worker    InitParamValue(ParamType::T{return_value_type_custom}, returnValue, &returnValueCapture.value);
924*8975f5c5SAndroid Build Coastguard Worker    paramBuffer.addReturnValue(std::move(returnValueCapture));
925*8975f5c5SAndroid Build Coastguard Worker
926*8975f5c5SAndroid Build Coastguard Worker    return CallCapture(angle::EntryPoint::{api_upper}{short_name}, std::move(paramBuffer));
927*8975f5c5SAndroid Build Coastguard Worker}}
928*8975f5c5SAndroid Build Coastguard Worker"""
929*8975f5c5SAndroid Build Coastguard Worker
930*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_CAPTURE_METHOD_NO_RETURN_VALUE = """\
931*8975f5c5SAndroid Build Coastguard WorkerCallCapture Capture{short_name}({params_with_type})
932*8975f5c5SAndroid Build Coastguard Worker{{
933*8975f5c5SAndroid Build Coastguard Worker    ParamBuffer paramBuffer;
934*8975f5c5SAndroid Build Coastguard Worker
935*8975f5c5SAndroid Build Coastguard Worker    {parameter_captures}
936*8975f5c5SAndroid Build Coastguard Worker
937*8975f5c5SAndroid Build Coastguard Worker    return CallCapture(angle::EntryPoint::{api_upper}{short_name}, std::move(paramBuffer));
938*8975f5c5SAndroid Build Coastguard Worker}}
939*8975f5c5SAndroid Build Coastguard Worker"""
940*8975f5c5SAndroid Build Coastguard Worker
941*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_PARAMETER_CAPTURE_VALUE = """paramBuffer.addValueParam("{name}", ParamType::T{type}, {name});"""
942*8975f5c5SAndroid Build Coastguard Worker
943*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_PARAMETER_CAPTURE_GL_ENUM = """paramBuffer.addEnumParam("{name}", {api_enum}::{group}, ParamType::T{type}, {name});"""
944*8975f5c5SAndroid Build Coastguard Worker
945*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_PARAMETER_CAPTURE_POINTER = """
946*8975f5c5SAndroid Build Coastguard Worker    if (isCallValid)
947*8975f5c5SAndroid Build Coastguard Worker    {{
948*8975f5c5SAndroid Build Coastguard Worker        ParamCapture {name}Param("{name}", ParamType::T{type});
949*8975f5c5SAndroid Build Coastguard Worker        InitParamValue(ParamType::T{type}, {name}, &{name}Param.value);
950*8975f5c5SAndroid Build Coastguard Worker        {capture_name}({params}, &{name}Param);
951*8975f5c5SAndroid Build Coastguard Worker        paramBuffer.addParam(std::move({name}Param));
952*8975f5c5SAndroid Build Coastguard Worker    }}
953*8975f5c5SAndroid Build Coastguard Worker    else
954*8975f5c5SAndroid Build Coastguard Worker    {{
955*8975f5c5SAndroid Build Coastguard Worker        ParamCapture {name}Param("{name}", ParamType::T{type});
956*8975f5c5SAndroid Build Coastguard Worker        InitParamValue(ParamType::T{type}, static_cast<{cast_type}>(nullptr), &{name}Param.value);
957*8975f5c5SAndroid Build Coastguard Worker        paramBuffer.addParam(std::move({name}Param));
958*8975f5c5SAndroid Build Coastguard Worker    }}
959*8975f5c5SAndroid Build Coastguard Worker"""
960*8975f5c5SAndroid Build Coastguard Worker
961*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_PARAMETER_CAPTURE_POINTER_FUNC = """void {name}({params});"""
962*8975f5c5SAndroid Build Coastguard Worker
963*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_CAPTURE_REPLAY_SOURCE = """\
964*8975f5c5SAndroid Build Coastguard Worker// GENERATED FILE - DO NOT EDIT.
965*8975f5c5SAndroid Build Coastguard Worker// Generated by {script_name} using data from {data_source_name}.
966*8975f5c5SAndroid Build Coastguard Worker//
967*8975f5c5SAndroid Build Coastguard Worker// Copyright 2020 The ANGLE Project Authors. All rights reserved.
968*8975f5c5SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be
969*8975f5c5SAndroid Build Coastguard Worker// found in the LICENSE file.
970*8975f5c5SAndroid Build Coastguard Worker//
971*8975f5c5SAndroid Build Coastguard Worker// frame_capture_replay_autogen.cpp:
972*8975f5c5SAndroid Build Coastguard Worker//   Replay captured GL calls.
973*8975f5c5SAndroid Build Coastguard Worker
974*8975f5c5SAndroid Build Coastguard Worker#include "angle_trace_gl.h"
975*8975f5c5SAndroid Build Coastguard Worker#include "common/debug.h"
976*8975f5c5SAndroid Build Coastguard Worker#include "common/frame_capture_utils.h"
977*8975f5c5SAndroid Build Coastguard Worker#include "frame_capture_test_utils.h"
978*8975f5c5SAndroid Build Coastguard Worker
979*8975f5c5SAndroid Build Coastguard Workernamespace angle
980*8975f5c5SAndroid Build Coastguard Worker{{
981*8975f5c5SAndroid Build Coastguard Workervoid ReplayTraceFunctionCall(const CallCapture &call, const TraceFunctionMap &customFunctions)
982*8975f5c5SAndroid Build Coastguard Worker{{
983*8975f5c5SAndroid Build Coastguard Worker    const ParamBuffer &params = call.params;
984*8975f5c5SAndroid Build Coastguard Worker    const std::vector<ParamCapture> &captures = params.getParamCaptures();
985*8975f5c5SAndroid Build Coastguard Worker
986*8975f5c5SAndroid Build Coastguard Worker    switch (call.entryPoint)
987*8975f5c5SAndroid Build Coastguard Worker    {{
988*8975f5c5SAndroid Build Coastguard Worker{call_replay_cases}
989*8975f5c5SAndroid Build Coastguard Worker        default:
990*8975f5c5SAndroid Build Coastguard Worker            ASSERT(!call.customFunctionName.empty());
991*8975f5c5SAndroid Build Coastguard Worker            ReplayCustomFunctionCall(call, customFunctions);
992*8975f5c5SAndroid Build Coastguard Worker            break;
993*8975f5c5SAndroid Build Coastguard Worker    }}
994*8975f5c5SAndroid Build Coastguard Worker}}
995*8975f5c5SAndroid Build Coastguard Worker
996*8975f5c5SAndroid Build Coastguard Worker}}  // namespace angle
997*8975f5c5SAndroid Build Coastguard Worker
998*8975f5c5SAndroid Build Coastguard Worker"""
999*8975f5c5SAndroid Build Coastguard Worker
1000*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_REPLAY_CALL_CASE = """\
1001*8975f5c5SAndroid Build Coastguard Worker        case angle::EntryPoint::{enum}:
1002*8975f5c5SAndroid Build Coastguard Worker            {call}({params});
1003*8975f5c5SAndroid Build Coastguard Worker            break;
1004*8975f5c5SAndroid Build Coastguard Worker"""
1005*8975f5c5SAndroid Build Coastguard Worker
1006*8975f5c5SAndroid Build Coastguard WorkerPOINTER_FORMAT = "0x%016\" PRIxPTR \""
1007*8975f5c5SAndroid Build Coastguard WorkerUNSIGNED_LONG_LONG_FORMAT = "%llu"
1008*8975f5c5SAndroid Build Coastguard WorkerHEX_LONG_LONG_FORMAT = "0x%llX"
1009*8975f5c5SAndroid Build Coastguard Worker
1010*8975f5c5SAndroid Build Coastguard WorkerFORMAT_DICT = {
1011*8975f5c5SAndroid Build Coastguard Worker    "GLbitfield": "%s",
1012*8975f5c5SAndroid Build Coastguard Worker    "GLboolean": "%s",
1013*8975f5c5SAndroid Build Coastguard Worker    "GLbyte": "%d",
1014*8975f5c5SAndroid Build Coastguard Worker    "GLclampx": "0x%X",
1015*8975f5c5SAndroid Build Coastguard Worker    "GLDEBUGPROC": POINTER_FORMAT,
1016*8975f5c5SAndroid Build Coastguard Worker    "GLDEBUGPROCKHR": POINTER_FORMAT,
1017*8975f5c5SAndroid Build Coastguard Worker    "GLdouble": "%f",
1018*8975f5c5SAndroid Build Coastguard Worker    "GLeglClientBufferEXT": POINTER_FORMAT,
1019*8975f5c5SAndroid Build Coastguard Worker    "GLeglImageOES": POINTER_FORMAT,
1020*8975f5c5SAndroid Build Coastguard Worker    "GLenum": "%s",
1021*8975f5c5SAndroid Build Coastguard Worker    "GLfixed": "0x%X",
1022*8975f5c5SAndroid Build Coastguard Worker    "GLfloat": "%f",
1023*8975f5c5SAndroid Build Coastguard Worker    "GLGETBLOBPROCANGLE": POINTER_FORMAT,
1024*8975f5c5SAndroid Build Coastguard Worker    "GLint": "%d",
1025*8975f5c5SAndroid Build Coastguard Worker    "GLintptr": UNSIGNED_LONG_LONG_FORMAT,
1026*8975f5c5SAndroid Build Coastguard Worker    "GLSETBLOBPROCANGLE": POINTER_FORMAT,
1027*8975f5c5SAndroid Build Coastguard Worker    "GLshort": "%d",
1028*8975f5c5SAndroid Build Coastguard Worker    "GLsizei": "%d",
1029*8975f5c5SAndroid Build Coastguard Worker    "GLsizeiptr": UNSIGNED_LONG_LONG_FORMAT,
1030*8975f5c5SAndroid Build Coastguard Worker    "GLsync": POINTER_FORMAT,
1031*8975f5c5SAndroid Build Coastguard Worker    "GLubyte": "%d",
1032*8975f5c5SAndroid Build Coastguard Worker    "GLuint": "%u",
1033*8975f5c5SAndroid Build Coastguard Worker    "GLuint64": UNSIGNED_LONG_LONG_FORMAT,
1034*8975f5c5SAndroid Build Coastguard Worker    "GLushort": "%u",
1035*8975f5c5SAndroid Build Coastguard Worker    "int": "%d",
1036*8975f5c5SAndroid Build Coastguard Worker    # EGL-specific types
1037*8975f5c5SAndroid Build Coastguard Worker    "EGLBoolean": "%u",
1038*8975f5c5SAndroid Build Coastguard Worker    "EGLConfig": POINTER_FORMAT,
1039*8975f5c5SAndroid Build Coastguard Worker    "EGLContext": POINTER_FORMAT,
1040*8975f5c5SAndroid Build Coastguard Worker    "EGLDisplay": POINTER_FORMAT,
1041*8975f5c5SAndroid Build Coastguard Worker    "EGLSurface": POINTER_FORMAT,
1042*8975f5c5SAndroid Build Coastguard Worker    "EGLSync": POINTER_FORMAT,
1043*8975f5c5SAndroid Build Coastguard Worker    "EGLNativeDisplayType": POINTER_FORMAT,
1044*8975f5c5SAndroid Build Coastguard Worker    "EGLNativePixmapType": POINTER_FORMAT,
1045*8975f5c5SAndroid Build Coastguard Worker    "EGLNativeWindowType": POINTER_FORMAT,
1046*8975f5c5SAndroid Build Coastguard Worker    "EGLClientBuffer": POINTER_FORMAT,
1047*8975f5c5SAndroid Build Coastguard Worker    "EGLenum": "0x%X",
1048*8975f5c5SAndroid Build Coastguard Worker    "EGLint": "%d",
1049*8975f5c5SAndroid Build Coastguard Worker    "EGLImage": POINTER_FORMAT,
1050*8975f5c5SAndroid Build Coastguard Worker    "EGLTime": UNSIGNED_LONG_LONG_FORMAT,
1051*8975f5c5SAndroid Build Coastguard Worker    "EGLGetBlobFuncANDROID": POINTER_FORMAT,
1052*8975f5c5SAndroid Build Coastguard Worker    "EGLSetBlobFuncANDROID": POINTER_FORMAT,
1053*8975f5c5SAndroid Build Coastguard Worker    "EGLuint64KHR": UNSIGNED_LONG_LONG_FORMAT,
1054*8975f5c5SAndroid Build Coastguard Worker    "EGLSyncKHR": POINTER_FORMAT,
1055*8975f5c5SAndroid Build Coastguard Worker    "EGLnsecsANDROID": UNSIGNED_LONG_LONG_FORMAT,
1056*8975f5c5SAndroid Build Coastguard Worker    "EGLDeviceEXT": POINTER_FORMAT,
1057*8975f5c5SAndroid Build Coastguard Worker    "EGLDEBUGPROCKHR": POINTER_FORMAT,
1058*8975f5c5SAndroid Build Coastguard Worker    "EGLObjectKHR": POINTER_FORMAT,
1059*8975f5c5SAndroid Build Coastguard Worker    "EGLLabelKHR": POINTER_FORMAT,
1060*8975f5c5SAndroid Build Coastguard Worker    "EGLTimeKHR": UNSIGNED_LONG_LONG_FORMAT,
1061*8975f5c5SAndroid Build Coastguard Worker    "EGLImageKHR": POINTER_FORMAT,
1062*8975f5c5SAndroid Build Coastguard Worker    "EGLStreamKHR": POINTER_FORMAT,
1063*8975f5c5SAndroid Build Coastguard Worker    "EGLFrameTokenANGLE": HEX_LONG_LONG_FORMAT,
1064*8975f5c5SAndroid Build Coastguard Worker    # CL-specific types
1065*8975f5c5SAndroid Build Coastguard Worker    "size_t": "%zu",
1066*8975f5c5SAndroid Build Coastguard Worker    "cl_char": "%hhd",
1067*8975f5c5SAndroid Build Coastguard Worker    "cl_uchar": "%hhu",
1068*8975f5c5SAndroid Build Coastguard Worker    "cl_short": "%hd",
1069*8975f5c5SAndroid Build Coastguard Worker    "cl_ushort": "%hu",
1070*8975f5c5SAndroid Build Coastguard Worker    "cl_int": "%d",
1071*8975f5c5SAndroid Build Coastguard Worker    "cl_uint": "%u",
1072*8975f5c5SAndroid Build Coastguard Worker    "cl_long": "%lld",
1073*8975f5c5SAndroid Build Coastguard Worker    "cl_ulong": "%llu",
1074*8975f5c5SAndroid Build Coastguard Worker    "cl_half": "%hu",
1075*8975f5c5SAndroid Build Coastguard Worker    "cl_float": "%f",
1076*8975f5c5SAndroid Build Coastguard Worker    "cl_double": "%f",
1077*8975f5c5SAndroid Build Coastguard Worker    "cl_platform_id": POINTER_FORMAT,
1078*8975f5c5SAndroid Build Coastguard Worker    "cl_device_id": POINTER_FORMAT,
1079*8975f5c5SAndroid Build Coastguard Worker    "cl_context": POINTER_FORMAT,
1080*8975f5c5SAndroid Build Coastguard Worker    "cl_command_queue": POINTER_FORMAT,
1081*8975f5c5SAndroid Build Coastguard Worker    "cl_mem": POINTER_FORMAT,
1082*8975f5c5SAndroid Build Coastguard Worker    "cl_program": POINTER_FORMAT,
1083*8975f5c5SAndroid Build Coastguard Worker    "cl_kernel": POINTER_FORMAT,
1084*8975f5c5SAndroid Build Coastguard Worker    "cl_event": POINTER_FORMAT,
1085*8975f5c5SAndroid Build Coastguard Worker    "cl_sampler": POINTER_FORMAT,
1086*8975f5c5SAndroid Build Coastguard Worker    "cl_bool": "%u",
1087*8975f5c5SAndroid Build Coastguard Worker    "cl_bitfield": "%llu",
1088*8975f5c5SAndroid Build Coastguard Worker    "cl_properties": "%llu",
1089*8975f5c5SAndroid Build Coastguard Worker    "cl_device_type": "%llu",
1090*8975f5c5SAndroid Build Coastguard Worker    "cl_platform_info": "%u",
1091*8975f5c5SAndroid Build Coastguard Worker    "cl_device_info": "%u",
1092*8975f5c5SAndroid Build Coastguard Worker    "cl_device_fp_config": "%llu",
1093*8975f5c5SAndroid Build Coastguard Worker    "cl_device_mem_cache_type": "%u",
1094*8975f5c5SAndroid Build Coastguard Worker    "cl_device_local_mem_type": "%u",
1095*8975f5c5SAndroid Build Coastguard Worker    "cl_device_exec_capabilities": "%llu",
1096*8975f5c5SAndroid Build Coastguard Worker    "cl_device_svm_capabilities": "%llu",
1097*8975f5c5SAndroid Build Coastguard Worker    "cl_command_queue_properties": "%llu",
1098*8975f5c5SAndroid Build Coastguard Worker    "cl_device_partition_property": "%zu",
1099*8975f5c5SAndroid Build Coastguard Worker    "cl_device_affinity_domain": "%llu",
1100*8975f5c5SAndroid Build Coastguard Worker    "cl_context_properties": "%zu",
1101*8975f5c5SAndroid Build Coastguard Worker    "cl_context_info": "%u",
1102*8975f5c5SAndroid Build Coastguard Worker    "cl_queue_properties": "%llu",
1103*8975f5c5SAndroid Build Coastguard Worker    "cl_command_queue_info": "%u",
1104*8975f5c5SAndroid Build Coastguard Worker    "cl_channel_order": "%u",
1105*8975f5c5SAndroid Build Coastguard Worker    "cl_channel_type": "%u",
1106*8975f5c5SAndroid Build Coastguard Worker    "cl_mem_flags": "%llu",
1107*8975f5c5SAndroid Build Coastguard Worker    "cl_svm_mem_flags": "%llu",
1108*8975f5c5SAndroid Build Coastguard Worker    "cl_mem_object_type": "%u",
1109*8975f5c5SAndroid Build Coastguard Worker    "cl_mem_info": "%u",
1110*8975f5c5SAndroid Build Coastguard Worker    "cl_mem_migration_flags": "%llu",
1111*8975f5c5SAndroid Build Coastguard Worker    "cl_mem_properties": "%llu",
1112*8975f5c5SAndroid Build Coastguard Worker    "cl_image_info": "%u",
1113*8975f5c5SAndroid Build Coastguard Worker    "cl_buffer_create_type": "%u",
1114*8975f5c5SAndroid Build Coastguard Worker    "cl_addressing_mode": "%u",
1115*8975f5c5SAndroid Build Coastguard Worker    "cl_filter_mode": "%u",
1116*8975f5c5SAndroid Build Coastguard Worker    "cl_sampler_info": "%u",
1117*8975f5c5SAndroid Build Coastguard Worker    "cl_map_flags": "%llu",
1118*8975f5c5SAndroid Build Coastguard Worker    "cl_pipe_properties": "%zu",
1119*8975f5c5SAndroid Build Coastguard Worker    "cl_pipe_info": "%u",
1120*8975f5c5SAndroid Build Coastguard Worker    "cl_program_info": "%u",
1121*8975f5c5SAndroid Build Coastguard Worker    "cl_program_build_info": "%u",
1122*8975f5c5SAndroid Build Coastguard Worker    "cl_program_binary_type": "%u",
1123*8975f5c5SAndroid Build Coastguard Worker    "cl_build_status": "%d",
1124*8975f5c5SAndroid Build Coastguard Worker    "cl_kernel_info": "%u",
1125*8975f5c5SAndroid Build Coastguard Worker    "cl_kernel_arg_info": "%u",
1126*8975f5c5SAndroid Build Coastguard Worker    "cl_kernel_arg_address_qualifier": "%u",
1127*8975f5c5SAndroid Build Coastguard Worker    "cl_kernel_arg_access_qualifier": "%u",
1128*8975f5c5SAndroid Build Coastguard Worker    "cl_kernel_arg_type_qualifier": "%llu",
1129*8975f5c5SAndroid Build Coastguard Worker    "cl_kernel_work_group_info": "%u",
1130*8975f5c5SAndroid Build Coastguard Worker    "cl_kernel_sub_group_info": "%u",
1131*8975f5c5SAndroid Build Coastguard Worker    "cl_event_info": "%u",
1132*8975f5c5SAndroid Build Coastguard Worker    "cl_command_type": "%u",
1133*8975f5c5SAndroid Build Coastguard Worker    "cl_profiling_info": "%u",
1134*8975f5c5SAndroid Build Coastguard Worker    "cl_sampler_properties": "%llu",
1135*8975f5c5SAndroid Build Coastguard Worker    "cl_kernel_exec_info": "%u",
1136*8975f5c5SAndroid Build Coastguard Worker    "cl_device_atomic_capabilities": "%llu",
1137*8975f5c5SAndroid Build Coastguard Worker    "cl_khronos_vendor_id": "%u",
1138*8975f5c5SAndroid Build Coastguard Worker    "cl_version": "%u",
1139*8975f5c5SAndroid Build Coastguard Worker    "cl_device_device_enqueue_capabilities": "%llu",
1140*8975f5c5SAndroid Build Coastguard Worker}
1141*8975f5c5SAndroid Build Coastguard Worker
1142*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_HEADER_INCLUDES = """\
1143*8975f5c5SAndroid Build Coastguard Worker#include <GLES{major}/gl{major}{minor}.h>
1144*8975f5c5SAndroid Build Coastguard Worker#include <export.h>"""
1145*8975f5c5SAndroid Build Coastguard Worker
1146*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_SOURCES_INCLUDES = """\
1147*8975f5c5SAndroid Build Coastguard Worker#include "libGLESv2/entry_points_{header_version}_autogen.h"
1148*8975f5c5SAndroid Build Coastguard Worker
1149*8975f5c5SAndroid Build Coastguard Worker#include "common/entry_points_enum_autogen.h"
1150*8975f5c5SAndroid Build Coastguard Worker#include "common/gl_enum_utils.h"
1151*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/Context.h"
1152*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/Context.inl.h"
1153*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/context_private_call_autogen.h"
1154*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/capture/capture_{header_version}_autogen.h"
1155*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/validation{validation_header_version}.h"
1156*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/entry_points_utils.h"
1157*8975f5c5SAndroid Build Coastguard Worker#include "libGLESv2/global_state.h"
1158*8975f5c5SAndroid Build Coastguard Worker
1159*8975f5c5SAndroid Build Coastguard Workerusing namespace gl;
1160*8975f5c5SAndroid Build Coastguard Worker"""
1161*8975f5c5SAndroid Build Coastguard Worker
1162*8975f5c5SAndroid Build Coastguard WorkerGLES_EXT_HEADER_INCLUDES = TEMPLATE_HEADER_INCLUDES.format(
1163*8975f5c5SAndroid Build Coastguard Worker    major="", minor="") + """
1164*8975f5c5SAndroid Build Coastguard Worker#include <GLES/glext.h>
1165*8975f5c5SAndroid Build Coastguard Worker#include <GLES2/gl2.h>
1166*8975f5c5SAndroid Build Coastguard Worker#include <GLES2/gl2ext.h>
1167*8975f5c5SAndroid Build Coastguard Worker#include <GLES3/gl32.h>
1168*8975f5c5SAndroid Build Coastguard Worker"""
1169*8975f5c5SAndroid Build Coastguard Worker
1170*8975f5c5SAndroid Build Coastguard WorkerGLES_EXT_SOURCE_INCLUDES = TEMPLATE_SOURCES_INCLUDES.format(
1171*8975f5c5SAndroid Build Coastguard Worker    header_version="gles_ext", validation_header_version="ESEXT") + """
1172*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/capture/capture_gles_1_0_autogen.h"
1173*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/capture/capture_gles_2_0_autogen.h"
1174*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/capture/capture_gles_3_0_autogen.h"
1175*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/capture/capture_gles_3_1_autogen.h"
1176*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/capture/capture_gles_3_2_autogen.h"
1177*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/validationES1.h"
1178*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/validationES2.h"
1179*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/validationES3.h"
1180*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/validationES31.h"
1181*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/validationES32.h"
1182*8975f5c5SAndroid Build Coastguard Worker
1183*8975f5c5SAndroid Build Coastguard Workerusing namespace gl;
1184*8975f5c5SAndroid Build Coastguard Worker"""
1185*8975f5c5SAndroid Build Coastguard Worker
1186*8975f5c5SAndroid Build Coastguard WorkerEGL_HEADER_INCLUDES = """\
1187*8975f5c5SAndroid Build Coastguard Worker#include <EGL/egl.h>
1188*8975f5c5SAndroid Build Coastguard Worker#include <export.h>
1189*8975f5c5SAndroid Build Coastguard Worker"""
1190*8975f5c5SAndroid Build Coastguard Worker
1191*8975f5c5SAndroid Build Coastguard WorkerEGL_SOURCE_INCLUDES = """\
1192*8975f5c5SAndroid Build Coastguard Worker#include "libGLESv2/entry_points_egl_autogen.h"
1193*8975f5c5SAndroid Build Coastguard Worker#include "libGLESv2/entry_points_egl_ext_autogen.h"
1194*8975f5c5SAndroid Build Coastguard Worker
1195*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/capture/capture_egl_autogen.h"
1196*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/entry_points_utils.h"
1197*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/validationEGL_autogen.h"
1198*8975f5c5SAndroid Build Coastguard Worker#include "libGLESv2/egl_context_lock_impl.h"
1199*8975f5c5SAndroid Build Coastguard Worker#include "libGLESv2/egl_stubs_autogen.h"
1200*8975f5c5SAndroid Build Coastguard Worker#include "libGLESv2/egl_ext_stubs_autogen.h"
1201*8975f5c5SAndroid Build Coastguard Worker#include "libGLESv2/global_state.h"
1202*8975f5c5SAndroid Build Coastguard Worker
1203*8975f5c5SAndroid Build Coastguard Workerusing namespace egl;
1204*8975f5c5SAndroid Build Coastguard Worker"""
1205*8975f5c5SAndroid Build Coastguard Worker
1206*8975f5c5SAndroid Build Coastguard WorkerEGL_EXT_HEADER_INCLUDES = """\
1207*8975f5c5SAndroid Build Coastguard Worker#include <EGL/egl.h>
1208*8975f5c5SAndroid Build Coastguard Worker#include <EGL/eglext.h>
1209*8975f5c5SAndroid Build Coastguard Worker#include <export.h>
1210*8975f5c5SAndroid Build Coastguard Worker"""
1211*8975f5c5SAndroid Build Coastguard Worker
1212*8975f5c5SAndroid Build Coastguard WorkerEGL_EXT_SOURCE_INCLUDES = """\
1213*8975f5c5SAndroid Build Coastguard Worker#include "libGLESv2/entry_points_egl_ext_autogen.h"
1214*8975f5c5SAndroid Build Coastguard Worker
1215*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/capture/capture_egl_autogen.h"
1216*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/entry_points_utils.h"
1217*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/validationEGL_autogen.h"
1218*8975f5c5SAndroid Build Coastguard Worker#include "libGLESv2/egl_context_lock_impl.h"
1219*8975f5c5SAndroid Build Coastguard Worker#include "libGLESv2/egl_ext_stubs_autogen.h"
1220*8975f5c5SAndroid Build Coastguard Worker#include "libGLESv2/global_state.h"
1221*8975f5c5SAndroid Build Coastguard Worker
1222*8975f5c5SAndroid Build Coastguard Workerusing namespace egl;
1223*8975f5c5SAndroid Build Coastguard Worker"""
1224*8975f5c5SAndroid Build Coastguard Worker
1225*8975f5c5SAndroid Build Coastguard WorkerLIBCL_EXPORT_INCLUDES = """
1226*8975f5c5SAndroid Build Coastguard Worker#include "libOpenCL/dispatch.h"
1227*8975f5c5SAndroid Build Coastguard Worker"""
1228*8975f5c5SAndroid Build Coastguard Worker
1229*8975f5c5SAndroid Build Coastguard WorkerLIBGLESV2_EXPORT_INCLUDES = """
1230*8975f5c5SAndroid Build Coastguard Worker#include "angle_gl.h"
1231*8975f5c5SAndroid Build Coastguard Worker
1232*8975f5c5SAndroid Build Coastguard Worker#include "libGLESv2/entry_points_gles_1_0_autogen.h"
1233*8975f5c5SAndroid Build Coastguard Worker#include "libGLESv2/entry_points_gles_2_0_autogen.h"
1234*8975f5c5SAndroid Build Coastguard Worker#include "libGLESv2/entry_points_gles_3_0_autogen.h"
1235*8975f5c5SAndroid Build Coastguard Worker#include "libGLESv2/entry_points_gles_3_1_autogen.h"
1236*8975f5c5SAndroid Build Coastguard Worker#include "libGLESv2/entry_points_gles_3_2_autogen.h"
1237*8975f5c5SAndroid Build Coastguard Worker#include "libGLESv2/entry_points_gles_ext_autogen.h"
1238*8975f5c5SAndroid Build Coastguard Worker
1239*8975f5c5SAndroid Build Coastguard Worker#include "common/event_tracer.h"
1240*8975f5c5SAndroid Build Coastguard Worker"""
1241*8975f5c5SAndroid Build Coastguard Worker
1242*8975f5c5SAndroid Build Coastguard WorkerLIBEGL_EXPORT_INCLUDES_AND_PREAMBLE = """
1243*8975f5c5SAndroid Build Coastguard Worker#include "anglebase/no_destructor.h"
1244*8975f5c5SAndroid Build Coastguard Worker#include "common/system_utils.h"
1245*8975f5c5SAndroid Build Coastguard Worker
1246*8975f5c5SAndroid Build Coastguard Worker#include <memory>
1247*8975f5c5SAndroid Build Coastguard Worker
1248*8975f5c5SAndroid Build Coastguard Worker#if defined(ANGLE_USE_EGL_LOADER)
1249*8975f5c5SAndroid Build Coastguard Worker#    include "libEGL/egl_loader_autogen.h"
1250*8975f5c5SAndroid Build Coastguard Worker#else
1251*8975f5c5SAndroid Build Coastguard Worker#    include "libGLESv2/entry_points_egl_autogen.h"
1252*8975f5c5SAndroid Build Coastguard Worker#    include "libGLESv2/entry_points_egl_ext_autogen.h"
1253*8975f5c5SAndroid Build Coastguard Worker#endif  // defined(ANGLE_USE_EGL_LOADER)
1254*8975f5c5SAndroid Build Coastguard Worker
1255*8975f5c5SAndroid Build Coastguard Workernamespace
1256*8975f5c5SAndroid Build Coastguard Worker{
1257*8975f5c5SAndroid Build Coastguard Worker#if defined(ANGLE_USE_EGL_LOADER)
1258*8975f5c5SAndroid Build Coastguard Workerbool gLoaded = false;
1259*8975f5c5SAndroid Build Coastguard Workervoid *gEntryPointsLib = nullptr;
1260*8975f5c5SAndroid Build Coastguard Worker
1261*8975f5c5SAndroid Build Coastguard WorkerGenericProc KHRONOS_APIENTRY GlobalLoad(const char *symbol)
1262*8975f5c5SAndroid Build Coastguard Worker{
1263*8975f5c5SAndroid Build Coastguard Worker    return reinterpret_cast<GenericProc>(angle::GetLibrarySymbol(gEntryPointsLib, symbol));
1264*8975f5c5SAndroid Build Coastguard Worker}
1265*8975f5c5SAndroid Build Coastguard Worker
1266*8975f5c5SAndroid Build Coastguard Workervoid EnsureEGLLoaded()
1267*8975f5c5SAndroid Build Coastguard Worker{
1268*8975f5c5SAndroid Build Coastguard Worker    if (gLoaded)
1269*8975f5c5SAndroid Build Coastguard Worker    {
1270*8975f5c5SAndroid Build Coastguard Worker        return;
1271*8975f5c5SAndroid Build Coastguard Worker    }
1272*8975f5c5SAndroid Build Coastguard Worker
1273*8975f5c5SAndroid Build Coastguard Worker    std::string errorOut;
1274*8975f5c5SAndroid Build Coastguard Worker    gEntryPointsLib = OpenSystemLibraryAndGetError(ANGLE_DISPATCH_LIBRARY, angle::SearchType::ModuleDir, &errorOut);
1275*8975f5c5SAndroid Build Coastguard Worker    if (gEntryPointsLib)
1276*8975f5c5SAndroid Build Coastguard Worker    {
1277*8975f5c5SAndroid Build Coastguard Worker        LoadLibEGL_EGL(GlobalLoad);
1278*8975f5c5SAndroid Build Coastguard Worker        gLoaded = true;
1279*8975f5c5SAndroid Build Coastguard Worker    }
1280*8975f5c5SAndroid Build Coastguard Worker    else
1281*8975f5c5SAndroid Build Coastguard Worker    {
1282*8975f5c5SAndroid Build Coastguard Worker        fprintf(stderr, "Error loading EGL entry points: %s\\n", errorOut.c_str());
1283*8975f5c5SAndroid Build Coastguard Worker    }
1284*8975f5c5SAndroid Build Coastguard Worker}
1285*8975f5c5SAndroid Build Coastguard Worker#else
1286*8975f5c5SAndroid Build Coastguard Workervoid EnsureEGLLoaded() {}
1287*8975f5c5SAndroid Build Coastguard Worker#endif  // defined(ANGLE_USE_EGL_LOADER)
1288*8975f5c5SAndroid Build Coastguard Worker}  // anonymous namespace
1289*8975f5c5SAndroid Build Coastguard Worker"""
1290*8975f5c5SAndroid Build Coastguard Worker
1291*8975f5c5SAndroid Build Coastguard WorkerLIBCL_HEADER_INCLUDES = """\
1292*8975f5c5SAndroid Build Coastguard Worker#include "angle_cl.h"
1293*8975f5c5SAndroid Build Coastguard Worker"""
1294*8975f5c5SAndroid Build Coastguard Worker
1295*8975f5c5SAndroid Build Coastguard WorkerLIBCL_SOURCE_INCLUDES = """\
1296*8975f5c5SAndroid Build Coastguard Worker#include "libGLESv2/entry_points_cl_autogen.h"
1297*8975f5c5SAndroid Build Coastguard Worker
1298*8975f5c5SAndroid Build Coastguard Worker#include "libANGLE/validationCL_autogen.h"
1299*8975f5c5SAndroid Build Coastguard Worker#include "libGLESv2/cl_stubs_autogen.h"
1300*8975f5c5SAndroid Build Coastguard Worker#include "libGLESv2/entry_points_cl_utils.h"
1301*8975f5c5SAndroid Build Coastguard Worker"""
1302*8975f5c5SAndroid Build Coastguard Worker
1303*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_EVENT_COMMENT = """\
1304*8975f5c5SAndroid Build Coastguard Worker    // Don't run the EVENT() macro on the EXT_debug_marker entry points.
1305*8975f5c5SAndroid Build Coastguard Worker    // It can interfere with the debug events being set by the caller.
1306*8975f5c5SAndroid Build Coastguard Worker    // """
1307*8975f5c5SAndroid Build Coastguard Worker
1308*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_CAPTURE_PROTO = "angle::CallCapture Capture%s(%s);"
1309*8975f5c5SAndroid Build Coastguard Worker
1310*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_VALIDATION_PROTO = "%s Validate%s(%s);"
1311*8975f5c5SAndroid Build Coastguard Worker
1312*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_CONTEXT_PRIVATE_CALL_PROTO = "%s ContextPrivate%s(%s);"
1313*8975f5c5SAndroid Build Coastguard Worker
1314*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_CONTEXT_LOCK_PROTO = "ScopedContextMutexLock GetContextLock_%s(%s);"
1315*8975f5c5SAndroid Build Coastguard Worker
1316*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_WINDOWS_DEF_FILE = """\
1317*8975f5c5SAndroid Build Coastguard Worker; GENERATED FILE - DO NOT EDIT.
1318*8975f5c5SAndroid Build Coastguard Worker; Generated by {script_name} using data from {data_source_name}.
1319*8975f5c5SAndroid Build Coastguard Worker;
1320*8975f5c5SAndroid Build Coastguard Worker; Copyright 2020 The ANGLE Project Authors. All rights reserved.
1321*8975f5c5SAndroid Build Coastguard Worker; Use of this source code is governed by a BSD-style license that can be
1322*8975f5c5SAndroid Build Coastguard Worker; found in the LICENSE file.
1323*8975f5c5SAndroid Build Coastguard WorkerLIBRARY {lib}
1324*8975f5c5SAndroid Build Coastguard WorkerEXPORTS
1325*8975f5c5SAndroid Build Coastguard Worker{exports}
1326*8975f5c5SAndroid Build Coastguard Worker"""
1327*8975f5c5SAndroid Build Coastguard Worker
1328*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_FRAME_CAPTURE_UTILS_HEADER = """\
1329*8975f5c5SAndroid Build Coastguard Worker// GENERATED FILE - DO NOT EDIT.
1330*8975f5c5SAndroid Build Coastguard Worker// Generated by {script_name} using data from {data_source_name}.
1331*8975f5c5SAndroid Build Coastguard Worker//
1332*8975f5c5SAndroid Build Coastguard Worker// Copyright 2020 The ANGLE Project Authors. All rights reserved.
1333*8975f5c5SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be
1334*8975f5c5SAndroid Build Coastguard Worker// found in the LICENSE file.
1335*8975f5c5SAndroid Build Coastguard Worker//
1336*8975f5c5SAndroid Build Coastguard Worker// frame_capture_utils_autogen.h:
1337*8975f5c5SAndroid Build Coastguard Worker//   ANGLE Frame capture types and helper functions.
1338*8975f5c5SAndroid Build Coastguard Worker
1339*8975f5c5SAndroid Build Coastguard Worker#ifndef COMMON_FRAME_CAPTURE_UTILS_AUTOGEN_H_
1340*8975f5c5SAndroid Build Coastguard Worker#define COMMON_FRAME_CAPTURE_UTILS_AUTOGEN_H_
1341*8975f5c5SAndroid Build Coastguard Worker
1342*8975f5c5SAndroid Build Coastguard Worker#include "common/PackedEnums.h"
1343*8975f5c5SAndroid Build Coastguard Worker
1344*8975f5c5SAndroid Build Coastguard Workernamespace angle
1345*8975f5c5SAndroid Build Coastguard Worker{{
1346*8975f5c5SAndroid Build Coastguard Workerenum class ParamType
1347*8975f5c5SAndroid Build Coastguard Worker{{
1348*8975f5c5SAndroid Build Coastguard Worker    {param_types}
1349*8975f5c5SAndroid Build Coastguard Worker}};
1350*8975f5c5SAndroid Build Coastguard Worker
1351*8975f5c5SAndroid Build Coastguard Workerconstexpr uint32_t kParamTypeCount = {param_type_count};
1352*8975f5c5SAndroid Build Coastguard Worker
1353*8975f5c5SAndroid Build Coastguard Workerunion ParamValue
1354*8975f5c5SAndroid Build Coastguard Worker{{
1355*8975f5c5SAndroid Build Coastguard Worker    {param_union_values}
1356*8975f5c5SAndroid Build Coastguard Worker}};
1357*8975f5c5SAndroid Build Coastguard Worker
1358*8975f5c5SAndroid Build Coastguard Workertemplate <ParamType PType, typename T>
1359*8975f5c5SAndroid Build Coastguard WorkerT GetParamVal(const ParamValue &value);
1360*8975f5c5SAndroid Build Coastguard Worker
1361*8975f5c5SAndroid Build Coastguard Worker{get_param_val_specializations}
1362*8975f5c5SAndroid Build Coastguard Worker
1363*8975f5c5SAndroid Build Coastguard Workertemplate <ParamType PType, typename T>
1364*8975f5c5SAndroid Build Coastguard WorkerT GetParamVal(const ParamValue &value)
1365*8975f5c5SAndroid Build Coastguard Worker{{
1366*8975f5c5SAndroid Build Coastguard Worker    UNREACHABLE();
1367*8975f5c5SAndroid Build Coastguard Worker    return T();
1368*8975f5c5SAndroid Build Coastguard Worker}}
1369*8975f5c5SAndroid Build Coastguard Worker
1370*8975f5c5SAndroid Build Coastguard Workertemplate <typename T>
1371*8975f5c5SAndroid Build Coastguard WorkerT AccessParamValue(ParamType paramType, const ParamValue &value)
1372*8975f5c5SAndroid Build Coastguard Worker{{
1373*8975f5c5SAndroid Build Coastguard Worker    switch (paramType)
1374*8975f5c5SAndroid Build Coastguard Worker    {{
1375*8975f5c5SAndroid Build Coastguard Worker{access_param_value_cases}
1376*8975f5c5SAndroid Build Coastguard Worker    }}
1377*8975f5c5SAndroid Build Coastguard Worker    UNREACHABLE();
1378*8975f5c5SAndroid Build Coastguard Worker    return T();
1379*8975f5c5SAndroid Build Coastguard Worker}}
1380*8975f5c5SAndroid Build Coastguard Worker
1381*8975f5c5SAndroid Build Coastguard Workertemplate <ParamType PType, typename T>
1382*8975f5c5SAndroid Build Coastguard Workervoid SetParamVal(T valueIn, ParamValue *valueOut);
1383*8975f5c5SAndroid Build Coastguard Worker
1384*8975f5c5SAndroid Build Coastguard Worker{set_param_val_specializations}
1385*8975f5c5SAndroid Build Coastguard Worker
1386*8975f5c5SAndroid Build Coastguard Workertemplate <ParamType PType, typename T>
1387*8975f5c5SAndroid Build Coastguard Workervoid SetParamVal(T valueIn, ParamValue *valueOut)
1388*8975f5c5SAndroid Build Coastguard Worker{{
1389*8975f5c5SAndroid Build Coastguard Worker    UNREACHABLE();
1390*8975f5c5SAndroid Build Coastguard Worker}}
1391*8975f5c5SAndroid Build Coastguard Worker
1392*8975f5c5SAndroid Build Coastguard Workertemplate <typename T>
1393*8975f5c5SAndroid Build Coastguard Workervoid InitParamValue(ParamType paramType, T valueIn, ParamValue *valueOut)
1394*8975f5c5SAndroid Build Coastguard Worker{{
1395*8975f5c5SAndroid Build Coastguard Worker    switch (paramType)
1396*8975f5c5SAndroid Build Coastguard Worker    {{
1397*8975f5c5SAndroid Build Coastguard Worker{init_param_value_cases}
1398*8975f5c5SAndroid Build Coastguard Worker    }}
1399*8975f5c5SAndroid Build Coastguard Worker}}
1400*8975f5c5SAndroid Build Coastguard Worker
1401*8975f5c5SAndroid Build Coastguard Workerstruct CallCapture;
1402*8975f5c5SAndroid Build Coastguard Workerstruct ParamCapture;
1403*8975f5c5SAndroid Build Coastguard Worker
1404*8975f5c5SAndroid Build Coastguard Workervoid WriteParamCaptureReplay(std::ostream &os, const CallCapture &call, const ParamCapture &param);
1405*8975f5c5SAndroid Build Coastguard Workerconst char *ParamTypeToString(ParamType paramType);
1406*8975f5c5SAndroid Build Coastguard Worker
1407*8975f5c5SAndroid Build Coastguard Workerenum class ResourceIDType
1408*8975f5c5SAndroid Build Coastguard Worker{{
1409*8975f5c5SAndroid Build Coastguard Worker    {resource_id_types}
1410*8975f5c5SAndroid Build Coastguard Worker}};
1411*8975f5c5SAndroid Build Coastguard Worker
1412*8975f5c5SAndroid Build Coastguard WorkerResourceIDType GetResourceIDTypeFromParamType(ParamType paramType);
1413*8975f5c5SAndroid Build Coastguard Workerconst char *GetResourceIDTypeName(ResourceIDType resourceIDType);
1414*8975f5c5SAndroid Build Coastguard Worker
1415*8975f5c5SAndroid Build Coastguard Workertemplate <typename ResourceType>
1416*8975f5c5SAndroid Build Coastguard Workerstruct GetResourceIDTypeFromType;
1417*8975f5c5SAndroid Build Coastguard Worker
1418*8975f5c5SAndroid Build Coastguard Worker{type_to_resource_id_type_structs}
1419*8975f5c5SAndroid Build Coastguard Worker}}  // namespace angle
1420*8975f5c5SAndroid Build Coastguard Worker
1421*8975f5c5SAndroid Build Coastguard Worker#endif  // COMMON_FRAME_CAPTURE_UTILS_AUTOGEN_H_
1422*8975f5c5SAndroid Build Coastguard Worker"""
1423*8975f5c5SAndroid Build Coastguard Worker
1424*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_FRAME_CAPTURE_UTILS_SOURCE = """\
1425*8975f5c5SAndroid Build Coastguard Worker// GENERATED FILE - DO NOT EDIT.
1426*8975f5c5SAndroid Build Coastguard Worker// Generated by {script_name} using data from {data_source_name}.
1427*8975f5c5SAndroid Build Coastguard Worker//
1428*8975f5c5SAndroid Build Coastguard Worker// Copyright 2020 The ANGLE Project Authors. All rights reserved.
1429*8975f5c5SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be
1430*8975f5c5SAndroid Build Coastguard Worker// found in the LICENSE file.
1431*8975f5c5SAndroid Build Coastguard Worker//
1432*8975f5c5SAndroid Build Coastguard Worker// frame_capture_utils_autogen.cpp:
1433*8975f5c5SAndroid Build Coastguard Worker//   ANGLE Frame capture types and helper functions.
1434*8975f5c5SAndroid Build Coastguard Worker
1435*8975f5c5SAndroid Build Coastguard Worker#include "common/frame_capture_utils_autogen.h"
1436*8975f5c5SAndroid Build Coastguard Worker
1437*8975f5c5SAndroid Build Coastguard Worker#include "common/frame_capture_utils.h"
1438*8975f5c5SAndroid Build Coastguard Worker
1439*8975f5c5SAndroid Build Coastguard Workernamespace angle
1440*8975f5c5SAndroid Build Coastguard Worker{{
1441*8975f5c5SAndroid Build Coastguard Workervoid WriteParamCaptureReplay(std::ostream &os, const CallCapture &call, const ParamCapture &param)
1442*8975f5c5SAndroid Build Coastguard Worker{{
1443*8975f5c5SAndroid Build Coastguard Worker    switch (param.type)
1444*8975f5c5SAndroid Build Coastguard Worker    {{
1445*8975f5c5SAndroid Build Coastguard Worker{write_param_type_to_stream_cases}
1446*8975f5c5SAndroid Build Coastguard Worker        default:
1447*8975f5c5SAndroid Build Coastguard Worker            os << "unknown";
1448*8975f5c5SAndroid Build Coastguard Worker            break;
1449*8975f5c5SAndroid Build Coastguard Worker    }}
1450*8975f5c5SAndroid Build Coastguard Worker}}
1451*8975f5c5SAndroid Build Coastguard Worker
1452*8975f5c5SAndroid Build Coastguard Workerconst char *ParamTypeToString(ParamType paramType)
1453*8975f5c5SAndroid Build Coastguard Worker{{
1454*8975f5c5SAndroid Build Coastguard Worker    switch (paramType)
1455*8975f5c5SAndroid Build Coastguard Worker    {{
1456*8975f5c5SAndroid Build Coastguard Worker{param_type_to_string_cases}
1457*8975f5c5SAndroid Build Coastguard Worker        default:
1458*8975f5c5SAndroid Build Coastguard Worker            UNREACHABLE();
1459*8975f5c5SAndroid Build Coastguard Worker            return "unknown";
1460*8975f5c5SAndroid Build Coastguard Worker    }}
1461*8975f5c5SAndroid Build Coastguard Worker}}
1462*8975f5c5SAndroid Build Coastguard Worker
1463*8975f5c5SAndroid Build Coastguard WorkerResourceIDType GetResourceIDTypeFromParamType(ParamType paramType)
1464*8975f5c5SAndroid Build Coastguard Worker{{
1465*8975f5c5SAndroid Build Coastguard Worker    switch (paramType)
1466*8975f5c5SAndroid Build Coastguard Worker    {{
1467*8975f5c5SAndroid Build Coastguard Worker{param_type_resource_id_cases}
1468*8975f5c5SAndroid Build Coastguard Worker        default:
1469*8975f5c5SAndroid Build Coastguard Worker            return ResourceIDType::InvalidEnum;
1470*8975f5c5SAndroid Build Coastguard Worker    }}
1471*8975f5c5SAndroid Build Coastguard Worker}}
1472*8975f5c5SAndroid Build Coastguard Worker
1473*8975f5c5SAndroid Build Coastguard Workerconst char *GetResourceIDTypeName(ResourceIDType resourceIDType)
1474*8975f5c5SAndroid Build Coastguard Worker{{
1475*8975f5c5SAndroid Build Coastguard Worker    switch (resourceIDType)
1476*8975f5c5SAndroid Build Coastguard Worker    {{
1477*8975f5c5SAndroid Build Coastguard Worker{resource_id_type_name_cases}
1478*8975f5c5SAndroid Build Coastguard Worker        default:
1479*8975f5c5SAndroid Build Coastguard Worker            UNREACHABLE();
1480*8975f5c5SAndroid Build Coastguard Worker            return "GetResourceIDTypeName error";
1481*8975f5c5SAndroid Build Coastguard Worker    }}
1482*8975f5c5SAndroid Build Coastguard Worker}}
1483*8975f5c5SAndroid Build Coastguard Worker}}  // namespace angle
1484*8975f5c5SAndroid Build Coastguard Worker"""
1485*8975f5c5SAndroid Build Coastguard Worker
1486*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_GET_PARAM_VAL_SPECIALIZATION = """\
1487*8975f5c5SAndroid Build Coastguard Workertemplate <>
1488*8975f5c5SAndroid Build Coastguard Workerinline {type} GetParamVal<ParamType::T{enum}, {type}>(const ParamValue &value)
1489*8975f5c5SAndroid Build Coastguard Worker{{
1490*8975f5c5SAndroid Build Coastguard Worker    return value.{union_name};
1491*8975f5c5SAndroid Build Coastguard Worker}}"""
1492*8975f5c5SAndroid Build Coastguard Worker
1493*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_ACCESS_PARAM_VALUE_CASE = """\
1494*8975f5c5SAndroid Build Coastguard Worker        case ParamType::T{enum}:
1495*8975f5c5SAndroid Build Coastguard Worker            return GetParamVal<ParamType::T{enum}, T>(value);"""
1496*8975f5c5SAndroid Build Coastguard Worker
1497*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_SET_PARAM_VAL_SPECIALIZATION = """\
1498*8975f5c5SAndroid Build Coastguard Workertemplate <>
1499*8975f5c5SAndroid Build Coastguard Workerinline void SetParamVal<ParamType::T{enum}>({type} valueIn, ParamValue *valueOut)
1500*8975f5c5SAndroid Build Coastguard Worker{{
1501*8975f5c5SAndroid Build Coastguard Worker    valueOut->{union_name} = valueIn;
1502*8975f5c5SAndroid Build Coastguard Worker}}"""
1503*8975f5c5SAndroid Build Coastguard Worker
1504*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_INIT_PARAM_VALUE_CASE = """\
1505*8975f5c5SAndroid Build Coastguard Worker        case ParamType::T{enum}:
1506*8975f5c5SAndroid Build Coastguard Worker            SetParamVal<ParamType::T{enum}>(valueIn, valueOut);
1507*8975f5c5SAndroid Build Coastguard Worker            break;"""
1508*8975f5c5SAndroid Build Coastguard Worker
1509*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_WRITE_PARAM_TYPE_TO_STREAM_CASE = """\
1510*8975f5c5SAndroid Build Coastguard Worker        case ParamType::T{enum_in}:
1511*8975f5c5SAndroid Build Coastguard Worker            WriteParamValueReplay<ParamType::T{enum_out}>(os, call, param.value.{union_name});
1512*8975f5c5SAndroid Build Coastguard Worker            break;"""
1513*8975f5c5SAndroid Build Coastguard Worker
1514*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_PARAM_TYPE_TO_STRING_CASE = """\
1515*8975f5c5SAndroid Build Coastguard Worker        case ParamType::T{enum}:
1516*8975f5c5SAndroid Build Coastguard Worker            return "{type}";"""
1517*8975f5c5SAndroid Build Coastguard Worker
1518*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_PARAM_TYPE_TO_RESOURCE_ID_TYPE_CASE = """\
1519*8975f5c5SAndroid Build Coastguard Worker        case ParamType::T{enum}:
1520*8975f5c5SAndroid Build Coastguard Worker            return ResourceIDType::{resource_id_type};"""
1521*8975f5c5SAndroid Build Coastguard Worker
1522*8975f5c5SAndroid Build Coastguard WorkerTEMPLATE_RESOURCE_ID_TYPE_NAME_CASE = """\
1523*8975f5c5SAndroid Build Coastguard Worker        case ResourceIDType::{resource_id_type}:
1524*8975f5c5SAndroid Build Coastguard Worker            return "{resource_id_type}";"""
1525*8975f5c5SAndroid Build Coastguard Worker
1526*8975f5c5SAndroid Build Coastguard WorkerCL_PACKED_TYPES = {
1527*8975f5c5SAndroid Build Coastguard Worker    # Enums
1528*8975f5c5SAndroid Build Coastguard Worker    "cl_platform_info": "PlatformInfo",
1529*8975f5c5SAndroid Build Coastguard Worker    "cl_device_info": "DeviceInfo",
1530*8975f5c5SAndroid Build Coastguard Worker    "cl_context_info": "ContextInfo",
1531*8975f5c5SAndroid Build Coastguard Worker    "cl_command_queue_info": "CommandQueueInfo",
1532*8975f5c5SAndroid Build Coastguard Worker    "cl_mem_object_type": "MemObjectType",
1533*8975f5c5SAndroid Build Coastguard Worker    "cl_mem_info": "MemInfo",
1534*8975f5c5SAndroid Build Coastguard Worker    "cl_image_info": "ImageInfo",
1535*8975f5c5SAndroid Build Coastguard Worker    "cl_pipe_info": "PipeInfo",
1536*8975f5c5SAndroid Build Coastguard Worker    "cl_addressing_mode": "AddressingMode",
1537*8975f5c5SAndroid Build Coastguard Worker    "cl_filter_mode": "FilterMode",
1538*8975f5c5SAndroid Build Coastguard Worker    "cl_sampler_info": "SamplerInfo",
1539*8975f5c5SAndroid Build Coastguard Worker    "cl_program_info": "ProgramInfo",
1540*8975f5c5SAndroid Build Coastguard Worker    "cl_program_build_info": "ProgramBuildInfo",
1541*8975f5c5SAndroid Build Coastguard Worker    "cl_kernel_info": "KernelInfo",
1542*8975f5c5SAndroid Build Coastguard Worker    "cl_kernel_arg_info": "KernelArgInfo",
1543*8975f5c5SAndroid Build Coastguard Worker    "cl_kernel_work_group_info": "KernelWorkGroupInfo",
1544*8975f5c5SAndroid Build Coastguard Worker    "cl_kernel_sub_group_info": "KernelSubGroupInfo",
1545*8975f5c5SAndroid Build Coastguard Worker    "cl_kernel_exec_info": "KernelExecInfo",
1546*8975f5c5SAndroid Build Coastguard Worker    "cl_event_info": "EventInfo",
1547*8975f5c5SAndroid Build Coastguard Worker    "cl_profiling_info": "ProfilingInfo",
1548*8975f5c5SAndroid Build Coastguard Worker    # Bit fields
1549*8975f5c5SAndroid Build Coastguard Worker    "cl_device_type": "DeviceType",
1550*8975f5c5SAndroid Build Coastguard Worker    "cl_device_fp_config": "DeviceFpConfig",
1551*8975f5c5SAndroid Build Coastguard Worker    "cl_device_exec_capabilities": "DeviceExecCapabilities",
1552*8975f5c5SAndroid Build Coastguard Worker    "cl_device_svm_capabilities": "DeviceSvmCapabilities",
1553*8975f5c5SAndroid Build Coastguard Worker    "cl_command_queue_properties": "CommandQueueProperties",
1554*8975f5c5SAndroid Build Coastguard Worker    "cl_device_affinity_domain": "DeviceAffinityDomain",
1555*8975f5c5SAndroid Build Coastguard Worker    "cl_mem_flags": "MemFlags",
1556*8975f5c5SAndroid Build Coastguard Worker    "cl_svm_mem_flags": "SVM_MemFlags",
1557*8975f5c5SAndroid Build Coastguard Worker    "cl_mem_migration_flags": "MemMigrationFlags",
1558*8975f5c5SAndroid Build Coastguard Worker    "cl_map_flags": "MapFlags",
1559*8975f5c5SAndroid Build Coastguard Worker    "cl_kernel_arg_type_qualifier": "KernelArgTypeQualifier",
1560*8975f5c5SAndroid Build Coastguard Worker    "cl_device_atomic_capabilities": "DeviceAtomicCapabilities",
1561*8975f5c5SAndroid Build Coastguard Worker    "cl_device_device_enqueue_capabilities": "DeviceEnqueueCapabilities",
1562*8975f5c5SAndroid Build Coastguard Worker}
1563*8975f5c5SAndroid Build Coastguard Worker
1564*8975f5c5SAndroid Build Coastguard WorkerEGL_PACKED_TYPES = {
1565*8975f5c5SAndroid Build Coastguard Worker    "EGLContext": "gl::ContextID",
1566*8975f5c5SAndroid Build Coastguard Worker    "EGLConfig": "egl::Config *",
1567*8975f5c5SAndroid Build Coastguard Worker    "EGLDeviceEXT": "egl::Device *",
1568*8975f5c5SAndroid Build Coastguard Worker    "EGLDisplay": "egl::Display *",
1569*8975f5c5SAndroid Build Coastguard Worker    "EGLImage": "ImageID",
1570*8975f5c5SAndroid Build Coastguard Worker    "EGLImageKHR": "ImageID",
1571*8975f5c5SAndroid Build Coastguard Worker    "EGLStreamKHR": "egl::Stream *",
1572*8975f5c5SAndroid Build Coastguard Worker    "EGLSurface": "SurfaceID",
1573*8975f5c5SAndroid Build Coastguard Worker    "EGLSync": "egl::SyncID",
1574*8975f5c5SAndroid Build Coastguard Worker    "EGLSyncKHR": "egl::SyncID",
1575*8975f5c5SAndroid Build Coastguard Worker}
1576*8975f5c5SAndroid Build Coastguard Worker
1577*8975f5c5SAndroid Build Coastguard WorkerEGL_CONTEXT_LOCK_PARAM_TYPES_FILTER = ["Thread *", "egl::Display *", "gl::ContextID"]
1578*8975f5c5SAndroid Build Coastguard WorkerEGL_CONTEXT_LOCK_PARAM_NAMES_FILTER = ["attribute", "flags"]
1579*8975f5c5SAndroid Build Coastguard Worker
1580*8975f5c5SAndroid Build Coastguard WorkerCAPTURE_BLOCKLIST = ['eglGetProcAddress']
1581*8975f5c5SAndroid Build Coastguard Worker
1582*8975f5c5SAndroid Build Coastguard Worker
1583*8975f5c5SAndroid Build Coastguard Workerdef is_aliasing_excepted(api, cmd_name):
1584*8975f5c5SAndroid Build Coastguard Worker    # For simplicity, strip the prefix gl and lower the case of the first
1585*8975f5c5SAndroid Build Coastguard Worker    # letter.  This makes sure that all variants of the cmd_name that reach
1586*8975f5c5SAndroid Build Coastguard Worker    # here end up looking similar for the sake of looking up in ALIASING_EXCEPTIONS
1587*8975f5c5SAndroid Build Coastguard Worker    cmd_name = cmd_name[2:] if cmd_name.startswith('gl') else cmd_name
1588*8975f5c5SAndroid Build Coastguard Worker    cmd_name = cmd_name[0].lower() + cmd_name[1:]
1589*8975f5c5SAndroid Build Coastguard Worker    return api == apis.GLES and cmd_name in ALIASING_EXCEPTIONS
1590*8975f5c5SAndroid Build Coastguard Worker
1591*8975f5c5SAndroid Build Coastguard Worker
1592*8975f5c5SAndroid Build Coastguard Workerdef is_allowed_with_active_pixel_local_storage(name):
1593*8975f5c5SAndroid Build Coastguard Worker    return name in PLS_ALLOW_LIST or any(
1594*8975f5c5SAndroid Build Coastguard Worker        [fnmatch.fnmatchcase(name, entry) for entry in PLS_ALLOW_WILDCARDS])
1595*8975f5c5SAndroid Build Coastguard Worker
1596*8975f5c5SAndroid Build Coastguard Worker
1597*8975f5c5SAndroid Build Coastguard Workerdef is_context_private_state_command(api, name):
1598*8975f5c5SAndroid Build Coastguard Worker    name = strip_suffix(api, name)
1599*8975f5c5SAndroid Build Coastguard Worker    return name in CONTEXT_PRIVATE_LIST or any(
1600*8975f5c5SAndroid Build Coastguard Worker        [fnmatch.fnmatchcase(name, entry) for entry in CONTEXT_PRIVATE_WILDCARDS])
1601*8975f5c5SAndroid Build Coastguard Worker
1602*8975f5c5SAndroid Build Coastguard Worker
1603*8975f5c5SAndroid Build Coastguard Workerdef is_lockless_egl_entry_point(cmd_name):
1604*8975f5c5SAndroid Build Coastguard Worker    if cmd_name in [
1605*8975f5c5SAndroid Build Coastguard Worker            "eglGetError", "eglGetCurrentContext", "eglGetCurrentSurface", "eglGetCurrentDisplay"
1606*8975f5c5SAndroid Build Coastguard Worker    ]:
1607*8975f5c5SAndroid Build Coastguard Worker        return True
1608*8975f5c5SAndroid Build Coastguard Worker    return False
1609*8975f5c5SAndroid Build Coastguard Worker
1610*8975f5c5SAndroid Build Coastguard Worker
1611*8975f5c5SAndroid Build Coastguard Workerdef is_egl_sync_entry_point(cmd_name):
1612*8975f5c5SAndroid Build Coastguard Worker    if cmd_name in [
1613*8975f5c5SAndroid Build Coastguard Worker            "eglClientWaitSync", "eglCreateSync", "eglDestroySync", "eglGetSyncAttrib",
1614*8975f5c5SAndroid Build Coastguard Worker            "eglWaitSync", "eglCreateSyncKHR", "eglClientWaitSyncKHR",
1615*8975f5c5SAndroid Build Coastguard Worker            "eglDupNativeFenceFDANDROID", "eglCopyMetalSharedEventANGLE", "eglDestroySyncKHR",
1616*8975f5c5SAndroid Build Coastguard Worker            "eglGetSyncAttribKHR", "eglSignalSyncKHR", "eglWaitSyncKHR"
1617*8975f5c5SAndroid Build Coastguard Worker    ]:
1618*8975f5c5SAndroid Build Coastguard Worker        return True
1619*8975f5c5SAndroid Build Coastguard Worker    return False
1620*8975f5c5SAndroid Build Coastguard Worker
1621*8975f5c5SAndroid Build Coastguard Worker
1622*8975f5c5SAndroid Build Coastguard Worker# egl entry points whose code path writes to resources that can be accessed
1623*8975f5c5SAndroid Build Coastguard Worker# by both EGL Sync APIs and EGL Non-Sync APIs
1624*8975f5c5SAndroid Build Coastguard Workerdef is_egl_entry_point_accessing_both_sync_and_non_sync_API_resources(cmd_name):
1625*8975f5c5SAndroid Build Coastguard Worker    if cmd_name in ["eglTerminate", "eglLabelObjectKHR", "eglReleaseThread", "eglInitialize"]:
1626*8975f5c5SAndroid Build Coastguard Worker        return True
1627*8975f5c5SAndroid Build Coastguard Worker    return False
1628*8975f5c5SAndroid Build Coastguard Worker
1629*8975f5c5SAndroid Build Coastguard Worker
1630*8975f5c5SAndroid Build Coastguard Workerdef get_validation_expression(api, cmd_name, entry_point_name, internal_params, is_gles1):
1631*8975f5c5SAndroid Build Coastguard Worker    name = strip_api_prefix(cmd_name)
1632*8975f5c5SAndroid Build Coastguard Worker    private_params = ["context->getPrivateState()", "context->getMutableErrorSetForValidation()"]
1633*8975f5c5SAndroid Build Coastguard Worker    extra_params = private_params if is_context_private_state_command(api,
1634*8975f5c5SAndroid Build Coastguard Worker                                                                      cmd_name) else ["context"]
1635*8975f5c5SAndroid Build Coastguard Worker    expr = "Validate{name}({params})".format(
1636*8975f5c5SAndroid Build Coastguard Worker        name=name, params=", ".join(extra_params + [entry_point_name] + internal_params))
1637*8975f5c5SAndroid Build Coastguard Worker    if not is_gles1 and not is_allowed_with_active_pixel_local_storage(name):
1638*8975f5c5SAndroid Build Coastguard Worker        expr = "(ValidatePixelLocalStorageInactive({extra_params}, {entry_point_name}) && {expr})".format(
1639*8975f5c5SAndroid Build Coastguard Worker            extra_params=", ".join(private_params), entry_point_name=entry_point_name, expr=expr)
1640*8975f5c5SAndroid Build Coastguard Worker    return expr
1641*8975f5c5SAndroid Build Coastguard Worker
1642*8975f5c5SAndroid Build Coastguard Worker
1643*8975f5c5SAndroid Build Coastguard Workerdef entry_point_export(api):
1644*8975f5c5SAndroid Build Coastguard Worker    if api == apis.CL:
1645*8975f5c5SAndroid Build Coastguard Worker        return ""
1646*8975f5c5SAndroid Build Coastguard Worker    return "ANGLE_EXPORT "
1647*8975f5c5SAndroid Build Coastguard Worker
1648*8975f5c5SAndroid Build Coastguard Worker
1649*8975f5c5SAndroid Build Coastguard Workerdef entry_point_prefix(api):
1650*8975f5c5SAndroid Build Coastguard Worker    if api == apis.CL:
1651*8975f5c5SAndroid Build Coastguard Worker        return "cl"
1652*8975f5c5SAndroid Build Coastguard Worker    if api == apis.GLES:
1653*8975f5c5SAndroid Build Coastguard Worker        return "GL_"
1654*8975f5c5SAndroid Build Coastguard Worker    return api + "_"
1655*8975f5c5SAndroid Build Coastguard Worker
1656*8975f5c5SAndroid Build Coastguard Worker
1657*8975f5c5SAndroid Build Coastguard Workerdef get_api_entry_def(api):
1658*8975f5c5SAndroid Build Coastguard Worker    if api == apis.EGL:
1659*8975f5c5SAndroid Build Coastguard Worker        return "EGLAPIENTRY"
1660*8975f5c5SAndroid Build Coastguard Worker    elif api == apis.CL:
1661*8975f5c5SAndroid Build Coastguard Worker        return "CL_API_CALL"
1662*8975f5c5SAndroid Build Coastguard Worker    else:
1663*8975f5c5SAndroid Build Coastguard Worker        return "GL_APIENTRY"
1664*8975f5c5SAndroid Build Coastguard Worker
1665*8975f5c5SAndroid Build Coastguard Worker
1666*8975f5c5SAndroid Build Coastguard Workerdef get_stubs_header_template(api):
1667*8975f5c5SAndroid Build Coastguard Worker    if api == apis.CL:
1668*8975f5c5SAndroid Build Coastguard Worker        return TEMPLATE_CL_STUBS_HEADER
1669*8975f5c5SAndroid Build Coastguard Worker    elif api == apis.EGL:
1670*8975f5c5SAndroid Build Coastguard Worker        return TEMPLATE_EGL_STUBS_HEADER
1671*8975f5c5SAndroid Build Coastguard Worker    else:
1672*8975f5c5SAndroid Build Coastguard Worker        return ""
1673*8975f5c5SAndroid Build Coastguard Worker
1674*8975f5c5SAndroid Build Coastguard Worker
1675*8975f5c5SAndroid Build Coastguard Workerdef format_entry_point_decl(api, cmd_name, proto, params):
1676*8975f5c5SAndroid Build Coastguard Worker    comma_if_needed = ", " if len(params) > 0 else ""
1677*8975f5c5SAndroid Build Coastguard Worker    stripped = strip_api_prefix(cmd_name)
1678*8975f5c5SAndroid Build Coastguard Worker    return TEMPLATE_ENTRY_POINT_DECL.format(
1679*8975f5c5SAndroid Build Coastguard Worker        angle_export=entry_point_export(api),
1680*8975f5c5SAndroid Build Coastguard Worker        export_def=get_api_entry_def(api),
1681*8975f5c5SAndroid Build Coastguard Worker        name="%s%s" % (entry_point_prefix(api), stripped),
1682*8975f5c5SAndroid Build Coastguard Worker        return_type=proto[:-len(cmd_name)].strip(),
1683*8975f5c5SAndroid Build Coastguard Worker        params=", ".join(params),
1684*8975f5c5SAndroid Build Coastguard Worker        comma_if_needed=comma_if_needed)
1685*8975f5c5SAndroid Build Coastguard Worker
1686*8975f5c5SAndroid Build Coastguard Worker
1687*8975f5c5SAndroid Build Coastguard Worker# Returns index range of identifier in function parameter
1688*8975f5c5SAndroid Build Coastguard Workerdef find_name_range(param):
1689*8975f5c5SAndroid Build Coastguard Worker
1690*8975f5c5SAndroid Build Coastguard Worker    def is_allowed_in_identifier(char):
1691*8975f5c5SAndroid Build Coastguard Worker        return char.isalpha() or char.isdigit() or char == "_"
1692*8975f5c5SAndroid Build Coastguard Worker
1693*8975f5c5SAndroid Build Coastguard Worker    # If type is a function declaration, only search in first parentheses
1694*8975f5c5SAndroid Build Coastguard Worker    left_paren = param.find("(")
1695*8975f5c5SAndroid Build Coastguard Worker    if left_paren >= 0:
1696*8975f5c5SAndroid Build Coastguard Worker        min = left_paren + 1
1697*8975f5c5SAndroid Build Coastguard Worker        end = param.index(")")
1698*8975f5c5SAndroid Build Coastguard Worker    else:
1699*8975f5c5SAndroid Build Coastguard Worker        min = 0
1700*8975f5c5SAndroid Build Coastguard Worker        end = len(param)
1701*8975f5c5SAndroid Build Coastguard Worker
1702*8975f5c5SAndroid Build Coastguard Worker    # Find last identifier in search range
1703*8975f5c5SAndroid Build Coastguard Worker    while end > min and not is_allowed_in_identifier(param[end - 1]):
1704*8975f5c5SAndroid Build Coastguard Worker        end -= 1
1705*8975f5c5SAndroid Build Coastguard Worker    if end == min:
1706*8975f5c5SAndroid Build Coastguard Worker        raise ValueError
1707*8975f5c5SAndroid Build Coastguard Worker    start = end - 1
1708*8975f5c5SAndroid Build Coastguard Worker    while start > min and is_allowed_in_identifier(param[start - 1]):
1709*8975f5c5SAndroid Build Coastguard Worker        start -= 1
1710*8975f5c5SAndroid Build Coastguard Worker    return start, end
1711*8975f5c5SAndroid Build Coastguard Worker
1712*8975f5c5SAndroid Build Coastguard Worker
1713*8975f5c5SAndroid Build Coastguard Workerdef just_the_type(param):
1714*8975f5c5SAndroid Build Coastguard Worker    start, end = find_name_range(param)
1715*8975f5c5SAndroid Build Coastguard Worker    return param[:start].strip() + param[end:].strip()
1716*8975f5c5SAndroid Build Coastguard Worker
1717*8975f5c5SAndroid Build Coastguard Worker
1718*8975f5c5SAndroid Build Coastguard Workerdef just_the_name(param):
1719*8975f5c5SAndroid Build Coastguard Worker    start, end = find_name_range(param)
1720*8975f5c5SAndroid Build Coastguard Worker    return param[start:end]
1721*8975f5c5SAndroid Build Coastguard Worker
1722*8975f5c5SAndroid Build Coastguard Worker
1723*8975f5c5SAndroid Build Coastguard Workerdef make_param(param_type, param_name):
1724*8975f5c5SAndroid Build Coastguard Worker
1725*8975f5c5SAndroid Build Coastguard Worker    def insert_name(param_type, param_name, pos):
1726*8975f5c5SAndroid Build Coastguard Worker        return param_type[:pos] + " " + param_name + param_type[pos:]
1727*8975f5c5SAndroid Build Coastguard Worker
1728*8975f5c5SAndroid Build Coastguard Worker    # If type is a function declaration, insert identifier before first closing parentheses
1729*8975f5c5SAndroid Build Coastguard Worker    left_paren = param_type.find("(")
1730*8975f5c5SAndroid Build Coastguard Worker    if left_paren >= 0:
1731*8975f5c5SAndroid Build Coastguard Worker        right_paren = param_type.index(")")
1732*8975f5c5SAndroid Build Coastguard Worker        return insert_name(param_type, param_name, right_paren)
1733*8975f5c5SAndroid Build Coastguard Worker
1734*8975f5c5SAndroid Build Coastguard Worker    # If type is an array declaration, insert identifier before brackets
1735*8975f5c5SAndroid Build Coastguard Worker    brackets = param_type.find("[")
1736*8975f5c5SAndroid Build Coastguard Worker    if brackets >= 0:
1737*8975f5c5SAndroid Build Coastguard Worker        return insert_name(param_type, param_name, brackets)
1738*8975f5c5SAndroid Build Coastguard Worker
1739*8975f5c5SAndroid Build Coastguard Worker    # Otherwise just append identifier
1740*8975f5c5SAndroid Build Coastguard Worker    return param_type + " " + param_name
1741*8975f5c5SAndroid Build Coastguard Worker
1742*8975f5c5SAndroid Build Coastguard Worker
1743*8975f5c5SAndroid Build Coastguard Workerdef just_the_type_packed(param, entry):
1744*8975f5c5SAndroid Build Coastguard Worker    name = just_the_name(param)
1745*8975f5c5SAndroid Build Coastguard Worker    if name in entry:
1746*8975f5c5SAndroid Build Coastguard Worker        return entry[name]
1747*8975f5c5SAndroid Build Coastguard Worker    else:
1748*8975f5c5SAndroid Build Coastguard Worker        return just_the_type(param)
1749*8975f5c5SAndroid Build Coastguard Worker
1750*8975f5c5SAndroid Build Coastguard Worker
1751*8975f5c5SAndroid Build Coastguard Workerdef just_the_name_packed(param, reserved_set):
1752*8975f5c5SAndroid Build Coastguard Worker    name = just_the_name(param)
1753*8975f5c5SAndroid Build Coastguard Worker    if name in reserved_set:
1754*8975f5c5SAndroid Build Coastguard Worker        return name + 'Packed'
1755*8975f5c5SAndroid Build Coastguard Worker    else:
1756*8975f5c5SAndroid Build Coastguard Worker        return name
1757*8975f5c5SAndroid Build Coastguard Worker
1758*8975f5c5SAndroid Build Coastguard Worker
1759*8975f5c5SAndroid Build Coastguard Workerdef is_unsigned_long_format(fmt):
1760*8975f5c5SAndroid Build Coastguard Worker    return fmt == UNSIGNED_LONG_LONG_FORMAT or fmt == HEX_LONG_LONG_FORMAT
1761*8975f5c5SAndroid Build Coastguard Worker
1762*8975f5c5SAndroid Build Coastguard Worker
1763*8975f5c5SAndroid Build Coastguard Workerdef param_print_argument(api, command_node, param):
1764*8975f5c5SAndroid Build Coastguard Worker    name_only = just_the_name(param)
1765*8975f5c5SAndroid Build Coastguard Worker    type_only = just_the_type(param)
1766*8975f5c5SAndroid Build Coastguard Worker
1767*8975f5c5SAndroid Build Coastguard Worker    if "*" not in param and type_only not in FORMAT_DICT:
1768*8975f5c5SAndroid Build Coastguard Worker        print(" ".join(param))
1769*8975f5c5SAndroid Build Coastguard Worker        raise Exception("Missing '%s %s' from '%s' entry point" %
1770*8975f5c5SAndroid Build Coastguard Worker                        (type_only, name_only, registry_xml.get_cmd_name(command_node)))
1771*8975f5c5SAndroid Build Coastguard Worker
1772*8975f5c5SAndroid Build Coastguard Worker    if "*" in param or FORMAT_DICT[type_only] == POINTER_FORMAT:
1773*8975f5c5SAndroid Build Coastguard Worker        return "(uintptr_t)%s" % name_only
1774*8975f5c5SAndroid Build Coastguard Worker
1775*8975f5c5SAndroid Build Coastguard Worker    if is_unsigned_long_format(FORMAT_DICT[type_only]):
1776*8975f5c5SAndroid Build Coastguard Worker        return "static_cast<unsigned long long>(%s)" % name_only
1777*8975f5c5SAndroid Build Coastguard Worker
1778*8975f5c5SAndroid Build Coastguard Worker    if type_only == "GLboolean":
1779*8975f5c5SAndroid Build Coastguard Worker        return "GLbooleanToString(%s)" % name_only
1780*8975f5c5SAndroid Build Coastguard Worker
1781*8975f5c5SAndroid Build Coastguard Worker    if type_only == "GLbitfield":
1782*8975f5c5SAndroid Build Coastguard Worker        group_name = find_gl_enum_group_in_command(command_node, name_only)
1783*8975f5c5SAndroid Build Coastguard Worker        return "GLbitfieldToString(%s::%s, %s).c_str()" % (api_enums[api], group_name, name_only)
1784*8975f5c5SAndroid Build Coastguard Worker
1785*8975f5c5SAndroid Build Coastguard Worker    if type_only == "GLenum":
1786*8975f5c5SAndroid Build Coastguard Worker        group_name = find_gl_enum_group_in_command(command_node, name_only)
1787*8975f5c5SAndroid Build Coastguard Worker        return "GLenumToString(%s::%s, %s)" % (api_enums[api], group_name, name_only)
1788*8975f5c5SAndroid Build Coastguard Worker
1789*8975f5c5SAndroid Build Coastguard Worker    return name_only
1790*8975f5c5SAndroid Build Coastguard Worker
1791*8975f5c5SAndroid Build Coastguard Worker
1792*8975f5c5SAndroid Build Coastguard Workerdef param_format_string(param):
1793*8975f5c5SAndroid Build Coastguard Worker    if "*" in param:
1794*8975f5c5SAndroid Build Coastguard Worker        return just_the_name(param) + " = 0x%016\" PRIxPTR \""
1795*8975f5c5SAndroid Build Coastguard Worker    else:
1796*8975f5c5SAndroid Build Coastguard Worker        type_only = just_the_type(param)
1797*8975f5c5SAndroid Build Coastguard Worker        if type_only not in FORMAT_DICT:
1798*8975f5c5SAndroid Build Coastguard Worker            raise Exception(type_only + " is not a known type in 'FORMAT_DICT'")
1799*8975f5c5SAndroid Build Coastguard Worker
1800*8975f5c5SAndroid Build Coastguard Worker        return just_the_name(param) + " = " + FORMAT_DICT[type_only]
1801*8975f5c5SAndroid Build Coastguard Worker
1802*8975f5c5SAndroid Build Coastguard Worker
1803*8975f5c5SAndroid Build Coastguard Workerdef is_context_lost_acceptable_cmd(cmd_name):
1804*8975f5c5SAndroid Build Coastguard Worker    lost_context_acceptable_cmds = [
1805*8975f5c5SAndroid Build Coastguard Worker        "glGetError",
1806*8975f5c5SAndroid Build Coastguard Worker        "glGetSync",
1807*8975f5c5SAndroid Build Coastguard Worker        "glGetQueryObjecti",
1808*8975f5c5SAndroid Build Coastguard Worker        "glGetProgramiv",
1809*8975f5c5SAndroid Build Coastguard Worker        "glGetGraphicsResetStatus",
1810*8975f5c5SAndroid Build Coastguard Worker        "glGetShaderiv",
1811*8975f5c5SAndroid Build Coastguard Worker    ]
1812*8975f5c5SAndroid Build Coastguard Worker
1813*8975f5c5SAndroid Build Coastguard Worker    for context_lost_entry_pont in lost_context_acceptable_cmds:
1814*8975f5c5SAndroid Build Coastguard Worker        if cmd_name.startswith(context_lost_entry_pont):
1815*8975f5c5SAndroid Build Coastguard Worker            return True
1816*8975f5c5SAndroid Build Coastguard Worker    return False
1817*8975f5c5SAndroid Build Coastguard Worker
1818*8975f5c5SAndroid Build Coastguard Worker
1819*8975f5c5SAndroid Build Coastguard Workerdef get_context_getter_function(cmd_name):
1820*8975f5c5SAndroid Build Coastguard Worker    if is_context_lost_acceptable_cmd(cmd_name):
1821*8975f5c5SAndroid Build Coastguard Worker        return "GetGlobalContext()"
1822*8975f5c5SAndroid Build Coastguard Worker
1823*8975f5c5SAndroid Build Coastguard Worker    return "GetValidGlobalContext()"
1824*8975f5c5SAndroid Build Coastguard Worker
1825*8975f5c5SAndroid Build Coastguard Worker
1826*8975f5c5SAndroid Build Coastguard Workerdef get_valid_context_check(cmd_name):
1827*8975f5c5SAndroid Build Coastguard Worker    return "context"
1828*8975f5c5SAndroid Build Coastguard Worker
1829*8975f5c5SAndroid Build Coastguard Worker
1830*8975f5c5SAndroid Build Coastguard Workerdef get_constext_lost_error_generator(cmd_name):
1831*8975f5c5SAndroid Build Coastguard Worker    # Don't generate context lost errors on commands that accept lost contexts
1832*8975f5c5SAndroid Build Coastguard Worker    if is_context_lost_acceptable_cmd(cmd_name):
1833*8975f5c5SAndroid Build Coastguard Worker        return ""
1834*8975f5c5SAndroid Build Coastguard Worker
1835*8975f5c5SAndroid Build Coastguard Worker    return "GenerateContextLostErrorOnCurrentGlobalContext();"
1836*8975f5c5SAndroid Build Coastguard Worker
1837*8975f5c5SAndroid Build Coastguard Worker
1838*8975f5c5SAndroid Build Coastguard Workerdef strip_suffix_always(api, name):
1839*8975f5c5SAndroid Build Coastguard Worker    for suffix in registry_xml.strip_suffixes:
1840*8975f5c5SAndroid Build Coastguard Worker        if name.endswith(suffix):
1841*8975f5c5SAndroid Build Coastguard Worker            name = name[0:-len(suffix)]
1842*8975f5c5SAndroid Build Coastguard Worker    return name
1843*8975f5c5SAndroid Build Coastguard Worker
1844*8975f5c5SAndroid Build Coastguard Worker
1845*8975f5c5SAndroid Build Coastguard Workerdef strip_suffix(api, name):
1846*8975f5c5SAndroid Build Coastguard Worker    # For commands where aliasing is excepted, keep the suffix
1847*8975f5c5SAndroid Build Coastguard Worker    if is_aliasing_excepted(api, name):
1848*8975f5c5SAndroid Build Coastguard Worker        return name
1849*8975f5c5SAndroid Build Coastguard Worker
1850*8975f5c5SAndroid Build Coastguard Worker    return strip_suffix_always(api, name)
1851*8975f5c5SAndroid Build Coastguard Worker
1852*8975f5c5SAndroid Build Coastguard Worker
1853*8975f5c5SAndroid Build Coastguard Workerdef find_gl_enum_group_in_command(command_node, param_name):
1854*8975f5c5SAndroid Build Coastguard Worker    group_name = None
1855*8975f5c5SAndroid Build Coastguard Worker    for param_node in command_node.findall('./param'):
1856*8975f5c5SAndroid Build Coastguard Worker        if param_node.find('./name').text == param_name:
1857*8975f5c5SAndroid Build Coastguard Worker            group_name = param_node.attrib.get('group', None)
1858*8975f5c5SAndroid Build Coastguard Worker            break
1859*8975f5c5SAndroid Build Coastguard Worker
1860*8975f5c5SAndroid Build Coastguard Worker    if group_name is None or group_name in registry_xml.unsupported_enum_group_names:
1861*8975f5c5SAndroid Build Coastguard Worker        group_name = registry_xml.default_enum_group_name
1862*8975f5c5SAndroid Build Coastguard Worker
1863*8975f5c5SAndroid Build Coastguard Worker    return group_name
1864*8975f5c5SAndroid Build Coastguard Worker
1865*8975f5c5SAndroid Build Coastguard Worker
1866*8975f5c5SAndroid Build Coastguard Workerdef get_packed_enums(api, cmd_packed_gl_enums, cmd_name, packed_param_types, params):
1867*8975f5c5SAndroid Build Coastguard Worker    # Always strip the suffix when querying packed enums.
1868*8975f5c5SAndroid Build Coastguard Worker    result = cmd_packed_gl_enums.get(strip_suffix_always(api, cmd_name), {})
1869*8975f5c5SAndroid Build Coastguard Worker    for param in params:
1870*8975f5c5SAndroid Build Coastguard Worker        param_type = just_the_type(param)
1871*8975f5c5SAndroid Build Coastguard Worker        if param_type in packed_param_types:
1872*8975f5c5SAndroid Build Coastguard Worker            result[just_the_name(param)] = packed_param_types[param_type]
1873*8975f5c5SAndroid Build Coastguard Worker    return result
1874*8975f5c5SAndroid Build Coastguard Worker
1875*8975f5c5SAndroid Build Coastguard Worker
1876*8975f5c5SAndroid Build Coastguard Workerdef get_def_template(api, cmd_name, return_type, has_errcode_ret):
1877*8975f5c5SAndroid Build Coastguard Worker    if return_type == "void":
1878*8975f5c5SAndroid Build Coastguard Worker        if api == apis.EGL:
1879*8975f5c5SAndroid Build Coastguard Worker            return TEMPLATE_EGL_ENTRY_POINT_NO_RETURN
1880*8975f5c5SAndroid Build Coastguard Worker        elif api == apis.CL:
1881*8975f5c5SAndroid Build Coastguard Worker            return TEMPLATE_CL_ENTRY_POINT_NO_RETURN
1882*8975f5c5SAndroid Build Coastguard Worker        elif is_context_private_state_command(api, cmd_name):
1883*8975f5c5SAndroid Build Coastguard Worker            return TEMPLATE_GLES_CONTEXT_PRIVATE_ENTRY_POINT_NO_RETURN
1884*8975f5c5SAndroid Build Coastguard Worker        else:
1885*8975f5c5SAndroid Build Coastguard Worker            return TEMPLATE_GLES_ENTRY_POINT_NO_RETURN
1886*8975f5c5SAndroid Build Coastguard Worker    elif return_type == "cl_int":
1887*8975f5c5SAndroid Build Coastguard Worker        return TEMPLATE_CL_ENTRY_POINT_WITH_RETURN_ERROR
1888*8975f5c5SAndroid Build Coastguard Worker    else:
1889*8975f5c5SAndroid Build Coastguard Worker        if api == apis.EGL:
1890*8975f5c5SAndroid Build Coastguard Worker            if is_lockless_egl_entry_point(cmd_name):
1891*8975f5c5SAndroid Build Coastguard Worker                return TEMPLATE_EGL_ENTRY_POINT_WITH_RETURN_NO_LOCKS
1892*8975f5c5SAndroid Build Coastguard Worker            else:
1893*8975f5c5SAndroid Build Coastguard Worker                return TEMPLATE_EGL_ENTRY_POINT_WITH_RETURN
1894*8975f5c5SAndroid Build Coastguard Worker        elif api == apis.CL:
1895*8975f5c5SAndroid Build Coastguard Worker            if has_errcode_ret:
1896*8975f5c5SAndroid Build Coastguard Worker                return TEMPLATE_CL_ENTRY_POINT_WITH_ERRCODE_RET
1897*8975f5c5SAndroid Build Coastguard Worker            else:
1898*8975f5c5SAndroid Build Coastguard Worker                return TEMPLATE_CL_ENTRY_POINT_WITH_RETURN_POINTER
1899*8975f5c5SAndroid Build Coastguard Worker        elif is_context_private_state_command(api, cmd_name):
1900*8975f5c5SAndroid Build Coastguard Worker            return TEMPLATE_GLES_CONTEXT_PRIVATE_ENTRY_POINT_WITH_RETURN
1901*8975f5c5SAndroid Build Coastguard Worker        else:
1902*8975f5c5SAndroid Build Coastguard Worker            return TEMPLATE_GLES_ENTRY_POINT_WITH_RETURN
1903*8975f5c5SAndroid Build Coastguard Worker
1904*8975f5c5SAndroid Build Coastguard Worker
1905*8975f5c5SAndroid Build Coastguard Workerdef format_entry_point_def(api, command_node, cmd_name, proto, params, cmd_packed_enums,
1906*8975f5c5SAndroid Build Coastguard Worker                           packed_param_types, ep_to_object, is_gles1):
1907*8975f5c5SAndroid Build Coastguard Worker    packed_enums = get_packed_enums(api, cmd_packed_enums, cmd_name, packed_param_types, params)
1908*8975f5c5SAndroid Build Coastguard Worker    internal_params = [just_the_name_packed(param, packed_enums) for param in params]
1909*8975f5c5SAndroid Build Coastguard Worker    if internal_params and internal_params[-1] == "errcode_ret":
1910*8975f5c5SAndroid Build Coastguard Worker        internal_params.pop()
1911*8975f5c5SAndroid Build Coastguard Worker        has_errcode_ret = True
1912*8975f5c5SAndroid Build Coastguard Worker    else:
1913*8975f5c5SAndroid Build Coastguard Worker        has_errcode_ret = False
1914*8975f5c5SAndroid Build Coastguard Worker
1915*8975f5c5SAndroid Build Coastguard Worker    internal_context_lock_params = [
1916*8975f5c5SAndroid Build Coastguard Worker        just_the_name_packed(param, packed_enums)
1917*8975f5c5SAndroid Build Coastguard Worker        for param in params
1918*8975f5c5SAndroid Build Coastguard Worker        if just_the_type_packed(param, packed_enums) in EGL_CONTEXT_LOCK_PARAM_TYPES_FILTER or
1919*8975f5c5SAndroid Build Coastguard Worker        just_the_name_packed(param, packed_enums) in EGL_CONTEXT_LOCK_PARAM_NAMES_FILTER
1920*8975f5c5SAndroid Build Coastguard Worker    ]
1921*8975f5c5SAndroid Build Coastguard Worker
1922*8975f5c5SAndroid Build Coastguard Worker    packed_gl_enum_conversions = []
1923*8975f5c5SAndroid Build Coastguard Worker
1924*8975f5c5SAndroid Build Coastguard Worker    # egl::AttributeMap objects do not convert the raw input parameters to a map until they are
1925*8975f5c5SAndroid Build Coastguard Worker    # validated because it is possible to have unterminated attribute lists if one of the
1926*8975f5c5SAndroid Build Coastguard Worker    # attributes is invalid.
1927*8975f5c5SAndroid Build Coastguard Worker    # When validation is disabled, force the conversion from attribute list to map using
1928*8975f5c5SAndroid Build Coastguard Worker    # initializeWithoutValidation.
1929*8975f5c5SAndroid Build Coastguard Worker    attrib_map_init = []
1930*8975f5c5SAndroid Build Coastguard Worker
1931*8975f5c5SAndroid Build Coastguard Worker    for param in params:
1932*8975f5c5SAndroid Build Coastguard Worker        name = just_the_name(param)
1933*8975f5c5SAndroid Build Coastguard Worker
1934*8975f5c5SAndroid Build Coastguard Worker        if name in packed_enums:
1935*8975f5c5SAndroid Build Coastguard Worker            internal_name = name + "Packed"
1936*8975f5c5SAndroid Build Coastguard Worker            internal_type = packed_enums[name]
1937*8975f5c5SAndroid Build Coastguard Worker            packed_gl_enum_conversions += [
1938*8975f5c5SAndroid Build Coastguard Worker                "\n        " + internal_type + " " + internal_name + " = PackParam<" +
1939*8975f5c5SAndroid Build Coastguard Worker                internal_type + ">(" + name + ");"
1940*8975f5c5SAndroid Build Coastguard Worker            ]
1941*8975f5c5SAndroid Build Coastguard Worker
1942*8975f5c5SAndroid Build Coastguard Worker            if 'AttributeMap' in internal_type:
1943*8975f5c5SAndroid Build Coastguard Worker                attrib_map_init.append(internal_name + ".initializeWithoutValidation();")
1944*8975f5c5SAndroid Build Coastguard Worker
1945*8975f5c5SAndroid Build Coastguard Worker    pass_params = [param_print_argument(api, command_node, param) for param in params]
1946*8975f5c5SAndroid Build Coastguard Worker    format_params = [param_format_string(param) for param in params]
1947*8975f5c5SAndroid Build Coastguard Worker    return_type = proto[:-len(cmd_name)].strip()
1948*8975f5c5SAndroid Build Coastguard Worker    initialization = "InitBackEnds(%s);\n" % INIT_DICT[cmd_name] if cmd_name in INIT_DICT else ""
1949*8975f5c5SAndroid Build Coastguard Worker    event_comment = TEMPLATE_EVENT_COMMENT if cmd_name in NO_EVENT_MARKER_EXCEPTIONS_LIST else ""
1950*8975f5c5SAndroid Build Coastguard Worker    name_no_suffix = strip_suffix(api, cmd_name[2:])
1951*8975f5c5SAndroid Build Coastguard Worker    name_lower_no_suffix = name_no_suffix[0:1].lower() + name_no_suffix[1:]
1952*8975f5c5SAndroid Build Coastguard Worker    entry_point_name = "angle::EntryPoint::GL" + strip_api_prefix(cmd_name)
1953*8975f5c5SAndroid Build Coastguard Worker
1954*8975f5c5SAndroid Build Coastguard Worker    format_params = {
1955*8975f5c5SAndroid Build Coastguard Worker        "name":
1956*8975f5c5SAndroid Build Coastguard Worker            strip_api_prefix(cmd_name),
1957*8975f5c5SAndroid Build Coastguard Worker        "name_no_suffix":
1958*8975f5c5SAndroid Build Coastguard Worker            name_no_suffix,
1959*8975f5c5SAndroid Build Coastguard Worker        "name_lower_no_suffix":
1960*8975f5c5SAndroid Build Coastguard Worker            name_lower_no_suffix,
1961*8975f5c5SAndroid Build Coastguard Worker        "return_type":
1962*8975f5c5SAndroid Build Coastguard Worker            return_type,
1963*8975f5c5SAndroid Build Coastguard Worker        "params":
1964*8975f5c5SAndroid Build Coastguard Worker            ", ".join(params),
1965*8975f5c5SAndroid Build Coastguard Worker        "internal_params":
1966*8975f5c5SAndroid Build Coastguard Worker            ", ".join(internal_params),
1967*8975f5c5SAndroid Build Coastguard Worker        "attrib_map_init":
1968*8975f5c5SAndroid Build Coastguard Worker            "\n".join(attrib_map_init),
1969*8975f5c5SAndroid Build Coastguard Worker        "context_private_internal_params":
1970*8975f5c5SAndroid Build Coastguard Worker            ", ".join(
1971*8975f5c5SAndroid Build Coastguard Worker                ["context->getMutablePrivateState()", "context->getMutablePrivateStateCache()"] +
1972*8975f5c5SAndroid Build Coastguard Worker                internal_params),
1973*8975f5c5SAndroid Build Coastguard Worker        "internal_context_lock_params":
1974*8975f5c5SAndroid Build Coastguard Worker            ", ".join(internal_context_lock_params),
1975*8975f5c5SAndroid Build Coastguard Worker        "initialization":
1976*8975f5c5SAndroid Build Coastguard Worker            initialization,
1977*8975f5c5SAndroid Build Coastguard Worker        "packed_gl_enum_conversions":
1978*8975f5c5SAndroid Build Coastguard Worker            "".join(packed_gl_enum_conversions),
1979*8975f5c5SAndroid Build Coastguard Worker        "pass_params":
1980*8975f5c5SAndroid Build Coastguard Worker            ", ".join(pass_params),
1981*8975f5c5SAndroid Build Coastguard Worker        "comma_if_needed":
1982*8975f5c5SAndroid Build Coastguard Worker            ", " if len(params) > 0 else "",
1983*8975f5c5SAndroid Build Coastguard Worker        "comma_if_needed_context_lock":
1984*8975f5c5SAndroid Build Coastguard Worker            ", " if len(internal_context_lock_params) > 0 else "",
1985*8975f5c5SAndroid Build Coastguard Worker        "gl_capture_params":
1986*8975f5c5SAndroid Build Coastguard Worker            ", ".join(["context"] + internal_params),
1987*8975f5c5SAndroid Build Coastguard Worker        "egl_capture_params":
1988*8975f5c5SAndroid Build Coastguard Worker            ", ".join(["thread"] + internal_params),
1989*8975f5c5SAndroid Build Coastguard Worker        "validation_expression":
1990*8975f5c5SAndroid Build Coastguard Worker            get_validation_expression(api, cmd_name, entry_point_name, internal_params, is_gles1),
1991*8975f5c5SAndroid Build Coastguard Worker        "format_params":
1992*8975f5c5SAndroid Build Coastguard Worker            ", ".join(format_params),
1993*8975f5c5SAndroid Build Coastguard Worker        "context_getter":
1994*8975f5c5SAndroid Build Coastguard Worker            get_context_getter_function(cmd_name),
1995*8975f5c5SAndroid Build Coastguard Worker        "valid_context_check":
1996*8975f5c5SAndroid Build Coastguard Worker            get_valid_context_check(cmd_name),
1997*8975f5c5SAndroid Build Coastguard Worker        "constext_lost_error_generator":
1998*8975f5c5SAndroid Build Coastguard Worker            get_constext_lost_error_generator(cmd_name),
1999*8975f5c5SAndroid Build Coastguard Worker        "event_comment":
2000*8975f5c5SAndroid Build Coastguard Worker            event_comment,
2001*8975f5c5SAndroid Build Coastguard Worker        "labeled_object":
2002*8975f5c5SAndroid Build Coastguard Worker            get_egl_entry_point_labeled_object(ep_to_object, cmd_name, params, packed_enums),
2003*8975f5c5SAndroid Build Coastguard Worker        "context_lock":
2004*8975f5c5SAndroid Build Coastguard Worker            get_context_lock(api, cmd_name),
2005*8975f5c5SAndroid Build Coastguard Worker        "preamble":
2006*8975f5c5SAndroid Build Coastguard Worker            get_preamble(api, cmd_name, params),
2007*8975f5c5SAndroid Build Coastguard Worker        "epilog":
2008*8975f5c5SAndroid Build Coastguard Worker            get_epilog(api, cmd_name),
2009*8975f5c5SAndroid Build Coastguard Worker        "egl_lock":
2010*8975f5c5SAndroid Build Coastguard Worker            get_egl_lock(cmd_name),
2011*8975f5c5SAndroid Build Coastguard Worker    }
2012*8975f5c5SAndroid Build Coastguard Worker
2013*8975f5c5SAndroid Build Coastguard Worker    template = get_def_template(api, cmd_name, return_type, has_errcode_ret)
2014*8975f5c5SAndroid Build Coastguard Worker    return template.format(**format_params)
2015*8975f5c5SAndroid Build Coastguard Worker
2016*8975f5c5SAndroid Build Coastguard Worker
2017*8975f5c5SAndroid Build Coastguard Workerdef get_capture_param_type_name(param_type):
2018*8975f5c5SAndroid Build Coastguard Worker    pointer_count = param_type.count("*")
2019*8975f5c5SAndroid Build Coastguard Worker    is_const = "const" in param_type.split()
2020*8975f5c5SAndroid Build Coastguard Worker
2021*8975f5c5SAndroid Build Coastguard Worker    param_type = param_type.replace("*", "")
2022*8975f5c5SAndroid Build Coastguard Worker    param_type = param_type.replace("&", "")
2023*8975f5c5SAndroid Build Coastguard Worker    param_type = param_type.replace("const", "")
2024*8975f5c5SAndroid Build Coastguard Worker    param_type = param_type.replace("struct", "")
2025*8975f5c5SAndroid Build Coastguard Worker    param_type = param_type.replace("egl::",
2026*8975f5c5SAndroid Build Coastguard Worker                                    "egl_" if pointer_count or param_type == 'egl::SyncID' else "")
2027*8975f5c5SAndroid Build Coastguard Worker    param_type = param_type.replace("gl::", "")
2028*8975f5c5SAndroid Build Coastguard Worker    param_type = param_type.strip()
2029*8975f5c5SAndroid Build Coastguard Worker
2030*8975f5c5SAndroid Build Coastguard Worker    if is_const and param_type != 'AttributeMap':
2031*8975f5c5SAndroid Build Coastguard Worker        param_type += "Const"
2032*8975f5c5SAndroid Build Coastguard Worker    for x in range(pointer_count):
2033*8975f5c5SAndroid Build Coastguard Worker        param_type += "Pointer"
2034*8975f5c5SAndroid Build Coastguard Worker
2035*8975f5c5SAndroid Build Coastguard Worker    return param_type
2036*8975f5c5SAndroid Build Coastguard Worker
2037*8975f5c5SAndroid Build Coastguard Worker
2038*8975f5c5SAndroid Build Coastguard Workerdef format_capture_method(api, command, cmd_name, proto, params, all_param_types,
2039*8975f5c5SAndroid Build Coastguard Worker                          capture_pointer_funcs, cmd_packed_gl_enums, packed_param_types):
2040*8975f5c5SAndroid Build Coastguard Worker
2041*8975f5c5SAndroid Build Coastguard Worker    context_param_typed = 'egl::Thread *thread' if api == apis.EGL else 'const State &glState'
2042*8975f5c5SAndroid Build Coastguard Worker    context_param_name = 'thread' if api == apis.EGL else 'glState'
2043*8975f5c5SAndroid Build Coastguard Worker
2044*8975f5c5SAndroid Build Coastguard Worker    packed_gl_enums = get_packed_enums(api, cmd_packed_gl_enums, cmd_name, packed_param_types,
2045*8975f5c5SAndroid Build Coastguard Worker                                       params)
2046*8975f5c5SAndroid Build Coastguard Worker
2047*8975f5c5SAndroid Build Coastguard Worker    params_with_type = get_internal_params(api, cmd_name,
2048*8975f5c5SAndroid Build Coastguard Worker                                           [context_param_typed, "bool isCallValid"] + params,
2049*8975f5c5SAndroid Build Coastguard Worker                                           cmd_packed_gl_enums, packed_param_types)
2050*8975f5c5SAndroid Build Coastguard Worker    params_just_name = ", ".join(
2051*8975f5c5SAndroid Build Coastguard Worker        [context_param_name, "isCallValid"] +
2052*8975f5c5SAndroid Build Coastguard Worker        [just_the_name_packed(param, packed_gl_enums) for param in params])
2053*8975f5c5SAndroid Build Coastguard Worker
2054*8975f5c5SAndroid Build Coastguard Worker    parameter_captures = []
2055*8975f5c5SAndroid Build Coastguard Worker    for param in params:
2056*8975f5c5SAndroid Build Coastguard Worker
2057*8975f5c5SAndroid Build Coastguard Worker        param_name = just_the_name_packed(param, packed_gl_enums)
2058*8975f5c5SAndroid Build Coastguard Worker        param_type = just_the_type_packed(param, packed_gl_enums).strip()
2059*8975f5c5SAndroid Build Coastguard Worker
2060*8975f5c5SAndroid Build Coastguard Worker        if 'AttributeMap' in param_type:
2061*8975f5c5SAndroid Build Coastguard Worker            capture = 'paramBuffer.addParam(CaptureAttributeMap(%s));' % param_name
2062*8975f5c5SAndroid Build Coastguard Worker            parameter_captures += [capture]
2063*8975f5c5SAndroid Build Coastguard Worker            continue
2064*8975f5c5SAndroid Build Coastguard Worker
2065*8975f5c5SAndroid Build Coastguard Worker        pointer_count = param_type.count("*")
2066*8975f5c5SAndroid Build Coastguard Worker        capture_param_type = get_capture_param_type_name(param_type)
2067*8975f5c5SAndroid Build Coastguard Worker
2068*8975f5c5SAndroid Build Coastguard Worker        # With EGL capture, we don't currently support capturing specific pointer params.
2069*8975f5c5SAndroid Build Coastguard Worker        if pointer_count > 0 and api != apis.EGL:
2070*8975f5c5SAndroid Build Coastguard Worker            params = params_just_name
2071*8975f5c5SAndroid Build Coastguard Worker            capture_name = "Capture%s_%s" % (strip_api_prefix(cmd_name), param_name)
2072*8975f5c5SAndroid Build Coastguard Worker            capture = TEMPLATE_PARAMETER_CAPTURE_POINTER.format(
2073*8975f5c5SAndroid Build Coastguard Worker                name=param_name,
2074*8975f5c5SAndroid Build Coastguard Worker                type=capture_param_type,
2075*8975f5c5SAndroid Build Coastguard Worker                capture_name=capture_name,
2076*8975f5c5SAndroid Build Coastguard Worker                params=params,
2077*8975f5c5SAndroid Build Coastguard Worker                cast_type=param_type)
2078*8975f5c5SAndroid Build Coastguard Worker
2079*8975f5c5SAndroid Build Coastguard Worker            capture_pointer_func = TEMPLATE_PARAMETER_CAPTURE_POINTER_FUNC.format(
2080*8975f5c5SAndroid Build Coastguard Worker                name=capture_name, params=params_with_type + ", angle::ParamCapture *paramCapture")
2081*8975f5c5SAndroid Build Coastguard Worker            capture_pointer_funcs += [capture_pointer_func]
2082*8975f5c5SAndroid Build Coastguard Worker        elif capture_param_type in ('GLenum', 'GLbitfield'):
2083*8975f5c5SAndroid Build Coastguard Worker            gl_enum_group = find_gl_enum_group_in_command(command, param_name)
2084*8975f5c5SAndroid Build Coastguard Worker            capture = TEMPLATE_PARAMETER_CAPTURE_GL_ENUM.format(
2085*8975f5c5SAndroid Build Coastguard Worker                name=param_name,
2086*8975f5c5SAndroid Build Coastguard Worker                type=capture_param_type,
2087*8975f5c5SAndroid Build Coastguard Worker                api_enum=api_enums[api],
2088*8975f5c5SAndroid Build Coastguard Worker                group=gl_enum_group)
2089*8975f5c5SAndroid Build Coastguard Worker        else:
2090*8975f5c5SAndroid Build Coastguard Worker            capture = TEMPLATE_PARAMETER_CAPTURE_VALUE.format(
2091*8975f5c5SAndroid Build Coastguard Worker                name=param_name, type=capture_param_type)
2092*8975f5c5SAndroid Build Coastguard Worker
2093*8975f5c5SAndroid Build Coastguard Worker        # For specific methods we can't easily parse their types. Work around this by omitting
2094*8975f5c5SAndroid Build Coastguard Worker        # parameter captures, but keeping the capture method as a mostly empty stub.
2095*8975f5c5SAndroid Build Coastguard Worker        if cmd_name not in CAPTURE_BLOCKLIST:
2096*8975f5c5SAndroid Build Coastguard Worker            all_param_types.add(capture_param_type)
2097*8975f5c5SAndroid Build Coastguard Worker            parameter_captures += [capture]
2098*8975f5c5SAndroid Build Coastguard Worker
2099*8975f5c5SAndroid Build Coastguard Worker    return_type = proto[:-len(cmd_name)].strip()
2100*8975f5c5SAndroid Build Coastguard Worker    capture_return_type = get_capture_param_type_name(return_type)
2101*8975f5c5SAndroid Build Coastguard Worker    if capture_return_type != 'void':
2102*8975f5c5SAndroid Build Coastguard Worker        if cmd_name in CAPTURE_BLOCKLIST:
2103*8975f5c5SAndroid Build Coastguard Worker            params_with_type += ", %s returnValue" % capture_return_type
2104*8975f5c5SAndroid Build Coastguard Worker        else:
2105*8975f5c5SAndroid Build Coastguard Worker            all_param_types.add(capture_return_type)
2106*8975f5c5SAndroid Build Coastguard Worker
2107*8975f5c5SAndroid Build Coastguard Worker    format_args = {
2108*8975f5c5SAndroid Build Coastguard Worker        "api_upper": "EGL" if api == apis.EGL else "GL",
2109*8975f5c5SAndroid Build Coastguard Worker        "full_name": cmd_name,
2110*8975f5c5SAndroid Build Coastguard Worker        "short_name": strip_api_prefix(cmd_name),
2111*8975f5c5SAndroid Build Coastguard Worker        "params_with_type": params_with_type,
2112*8975f5c5SAndroid Build Coastguard Worker        "params_just_name": params_just_name,
2113*8975f5c5SAndroid Build Coastguard Worker        "parameter_captures": "\n    ".join(parameter_captures),
2114*8975f5c5SAndroid Build Coastguard Worker        "return_value_type_original": return_type,
2115*8975f5c5SAndroid Build Coastguard Worker        "return_value_type_custom": capture_return_type,
2116*8975f5c5SAndroid Build Coastguard Worker    }
2117*8975f5c5SAndroid Build Coastguard Worker
2118*8975f5c5SAndroid Build Coastguard Worker    if return_type == "void" or cmd_name in CAPTURE_BLOCKLIST:
2119*8975f5c5SAndroid Build Coastguard Worker        return TEMPLATE_CAPTURE_METHOD_NO_RETURN_VALUE.format(**format_args)
2120*8975f5c5SAndroid Build Coastguard Worker    else:
2121*8975f5c5SAndroid Build Coastguard Worker        return TEMPLATE_CAPTURE_METHOD_WITH_RETURN_VALUE.format(**format_args)
2122*8975f5c5SAndroid Build Coastguard Worker
2123*8975f5c5SAndroid Build Coastguard Worker
2124*8975f5c5SAndroid Build Coastguard Workerdef const_pointer_type(param, packed_gl_enums):
2125*8975f5c5SAndroid Build Coastguard Worker    type = just_the_type_packed(param, packed_gl_enums)
2126*8975f5c5SAndroid Build Coastguard Worker    if just_the_name(param) == "errcode_ret" or type == "ErrorSet *" or "(" in type:
2127*8975f5c5SAndroid Build Coastguard Worker        return type
2128*8975f5c5SAndroid Build Coastguard Worker    elif "**" in type and "const" not in type:
2129*8975f5c5SAndroid Build Coastguard Worker        return type.replace("**", "* const *")
2130*8975f5c5SAndroid Build Coastguard Worker    elif "*" in type and "const" not in type:
2131*8975f5c5SAndroid Build Coastguard Worker        return type.replace("*", "*const ") if "[]" in type else "const " + type
2132*8975f5c5SAndroid Build Coastguard Worker    else:
2133*8975f5c5SAndroid Build Coastguard Worker        return type
2134*8975f5c5SAndroid Build Coastguard Worker
2135*8975f5c5SAndroid Build Coastguard Worker
2136*8975f5c5SAndroid Build Coastguard Workerdef get_internal_params(api, cmd_name, params, cmd_packed_gl_enums, packed_param_types):
2137*8975f5c5SAndroid Build Coastguard Worker    packed_gl_enums = get_packed_enums(api, cmd_packed_gl_enums, cmd_name, packed_param_types,
2138*8975f5c5SAndroid Build Coastguard Worker                                       params)
2139*8975f5c5SAndroid Build Coastguard Worker    return ", ".join([
2140*8975f5c5SAndroid Build Coastguard Worker        make_param(
2141*8975f5c5SAndroid Build Coastguard Worker            just_the_type_packed(param, packed_gl_enums),
2142*8975f5c5SAndroid Build Coastguard Worker            just_the_name_packed(param, packed_gl_enums)) for param in params
2143*8975f5c5SAndroid Build Coastguard Worker    ])
2144*8975f5c5SAndroid Build Coastguard Worker
2145*8975f5c5SAndroid Build Coastguard Worker
2146*8975f5c5SAndroid Build Coastguard Workerdef get_validation_params(api, cmd_name, params, cmd_packed_gl_enums, packed_param_types):
2147*8975f5c5SAndroid Build Coastguard Worker    packed_gl_enums = get_packed_enums(api, cmd_packed_gl_enums, cmd_name, packed_param_types,
2148*8975f5c5SAndroid Build Coastguard Worker                                       params)
2149*8975f5c5SAndroid Build Coastguard Worker    last = -1 if params and just_the_name(params[-1]) == "errcode_ret" else None
2150*8975f5c5SAndroid Build Coastguard Worker    return ", ".join([
2151*8975f5c5SAndroid Build Coastguard Worker        make_param(
2152*8975f5c5SAndroid Build Coastguard Worker            const_pointer_type(param, packed_gl_enums),
2153*8975f5c5SAndroid Build Coastguard Worker            just_the_name_packed(param, packed_gl_enums)) for param in params[:last]
2154*8975f5c5SAndroid Build Coastguard Worker    ])
2155*8975f5c5SAndroid Build Coastguard Worker
2156*8975f5c5SAndroid Build Coastguard Worker
2157*8975f5c5SAndroid Build Coastguard Workerdef get_context_private_call_params(api, cmd_name, params, cmd_packed_gl_enums,
2158*8975f5c5SAndroid Build Coastguard Worker                                    packed_param_types):
2159*8975f5c5SAndroid Build Coastguard Worker    packed_gl_enums = get_packed_enums(api, cmd_packed_gl_enums, cmd_name, packed_param_types,
2160*8975f5c5SAndroid Build Coastguard Worker                                       params)
2161*8975f5c5SAndroid Build Coastguard Worker    return ", ".join([
2162*8975f5c5SAndroid Build Coastguard Worker        make_param(
2163*8975f5c5SAndroid Build Coastguard Worker            just_the_type_packed(param, packed_gl_enums),
2164*8975f5c5SAndroid Build Coastguard Worker            just_the_name_packed(param, packed_gl_enums)) for param in params
2165*8975f5c5SAndroid Build Coastguard Worker    ])
2166*8975f5c5SAndroid Build Coastguard Worker
2167*8975f5c5SAndroid Build Coastguard Worker
2168*8975f5c5SAndroid Build Coastguard Workerdef get_context_lock_params(api, cmd_name, params, cmd_packed_gl_enums, packed_param_types):
2169*8975f5c5SAndroid Build Coastguard Worker    packed_gl_enums = get_packed_enums(api, cmd_packed_gl_enums, cmd_name, packed_param_types,
2170*8975f5c5SAndroid Build Coastguard Worker                                       params)
2171*8975f5c5SAndroid Build Coastguard Worker    return ", ".join([
2172*8975f5c5SAndroid Build Coastguard Worker        make_param(
2173*8975f5c5SAndroid Build Coastguard Worker            just_the_type_packed(param, packed_gl_enums),
2174*8975f5c5SAndroid Build Coastguard Worker            just_the_name_packed(param, packed_gl_enums))
2175*8975f5c5SAndroid Build Coastguard Worker        for param in params
2176*8975f5c5SAndroid Build Coastguard Worker        if just_the_type_packed(param, packed_gl_enums) in EGL_CONTEXT_LOCK_PARAM_TYPES_FILTER or
2177*8975f5c5SAndroid Build Coastguard Worker        just_the_name_packed(param, packed_gl_enums) in EGL_CONTEXT_LOCK_PARAM_NAMES_FILTER
2178*8975f5c5SAndroid Build Coastguard Worker    ])
2179*8975f5c5SAndroid Build Coastguard Worker
2180*8975f5c5SAndroid Build Coastguard Worker
2181*8975f5c5SAndroid Build Coastguard Workerdef format_context_decl(api, cmd_name, proto, params, template, cmd_packed_gl_enums,
2182*8975f5c5SAndroid Build Coastguard Worker                        packed_param_types):
2183*8975f5c5SAndroid Build Coastguard Worker    internal_params = get_internal_params(api, cmd_name, params, cmd_packed_gl_enums,
2184*8975f5c5SAndroid Build Coastguard Worker                                          packed_param_types)
2185*8975f5c5SAndroid Build Coastguard Worker
2186*8975f5c5SAndroid Build Coastguard Worker    return_type = proto[:-len(cmd_name)].strip()
2187*8975f5c5SAndroid Build Coastguard Worker    name_lower_no_suffix = cmd_name[2:3].lower() + cmd_name[3:]
2188*8975f5c5SAndroid Build Coastguard Worker    name_lower_no_suffix = strip_suffix(api, name_lower_no_suffix)
2189*8975f5c5SAndroid Build Coastguard Worker    maybe_const = " const" if name_lower_no_suffix.startswith(
2190*8975f5c5SAndroid Build Coastguard Worker        "is") and name_lower_no_suffix[2].isupper() else ""
2191*8975f5c5SAndroid Build Coastguard Worker
2192*8975f5c5SAndroid Build Coastguard Worker    return template.format(
2193*8975f5c5SAndroid Build Coastguard Worker        return_type=return_type,
2194*8975f5c5SAndroid Build Coastguard Worker        name_lower_no_suffix=name_lower_no_suffix,
2195*8975f5c5SAndroid Build Coastguard Worker        internal_params=internal_params,
2196*8975f5c5SAndroid Build Coastguard Worker        maybe_const=maybe_const)
2197*8975f5c5SAndroid Build Coastguard Worker
2198*8975f5c5SAndroid Build Coastguard Worker
2199*8975f5c5SAndroid Build Coastguard Workerdef format_entry_point_export(cmd_name, proto, params, template):
2200*8975f5c5SAndroid Build Coastguard Worker    internal_params = [just_the_name(param) for param in params]
2201*8975f5c5SAndroid Build Coastguard Worker    return_type = proto[:-len(cmd_name)].strip()
2202*8975f5c5SAndroid Build Coastguard Worker
2203*8975f5c5SAndroid Build Coastguard Worker    return template.format(
2204*8975f5c5SAndroid Build Coastguard Worker        name=strip_api_prefix(cmd_name),
2205*8975f5c5SAndroid Build Coastguard Worker        return_type=return_type,
2206*8975f5c5SAndroid Build Coastguard Worker        params=", ".join(params),
2207*8975f5c5SAndroid Build Coastguard Worker        internal_params=", ".join(internal_params))
2208*8975f5c5SAndroid Build Coastguard Worker
2209*8975f5c5SAndroid Build Coastguard Worker
2210*8975f5c5SAndroid Build Coastguard Workerdef format_validation_proto(api, cmd_name, params, cmd_packed_gl_enums, packed_param_types):
2211*8975f5c5SAndroid Build Coastguard Worker    if api == apis.CL:
2212*8975f5c5SAndroid Build Coastguard Worker        return_type = "cl_int"
2213*8975f5c5SAndroid Build Coastguard Worker    else:
2214*8975f5c5SAndroid Build Coastguard Worker        return_type = "bool"
2215*8975f5c5SAndroid Build Coastguard Worker    if api in [apis.GL, apis.GLES]:
2216*8975f5c5SAndroid Build Coastguard Worker        with_extra_params = ["const PrivateState &state",
2217*8975f5c5SAndroid Build Coastguard Worker                             "ErrorSet *errors"] if is_context_private_state_command(
2218*8975f5c5SAndroid Build Coastguard Worker                                 api, cmd_name) else ["Context *context"]
2219*8975f5c5SAndroid Build Coastguard Worker        with_extra_params += ["angle::EntryPoint entryPoint"] + params
2220*8975f5c5SAndroid Build Coastguard Worker    elif api == apis.EGL:
2221*8975f5c5SAndroid Build Coastguard Worker        with_extra_params = ["ValidationContext *val"] + params
2222*8975f5c5SAndroid Build Coastguard Worker    else:
2223*8975f5c5SAndroid Build Coastguard Worker        with_extra_params = params
2224*8975f5c5SAndroid Build Coastguard Worker    internal_params = get_validation_params(api, cmd_name, with_extra_params, cmd_packed_gl_enums,
2225*8975f5c5SAndroid Build Coastguard Worker                                            packed_param_types)
2226*8975f5c5SAndroid Build Coastguard Worker    return TEMPLATE_VALIDATION_PROTO % (return_type, strip_api_prefix(cmd_name), internal_params)
2227*8975f5c5SAndroid Build Coastguard Worker
2228*8975f5c5SAndroid Build Coastguard Worker
2229*8975f5c5SAndroid Build Coastguard Workerdef format_context_private_call_proto(api, cmd_name, proto, params, cmd_packed_gl_enums,
2230*8975f5c5SAndroid Build Coastguard Worker                                      packed_param_types):
2231*8975f5c5SAndroid Build Coastguard Worker    with_extra_params = ["PrivateState *privateState", "PrivateStateCache *privateStateCache"
2232*8975f5c5SAndroid Build Coastguard Worker                        ] + params
2233*8975f5c5SAndroid Build Coastguard Worker    packed_enums = get_packed_enums(api, cmd_packed_gl_enums, cmd_name, packed_param_types,
2234*8975f5c5SAndroid Build Coastguard Worker                                    with_extra_params)
2235*8975f5c5SAndroid Build Coastguard Worker    internal_params = get_context_private_call_params(api, cmd_name, with_extra_params,
2236*8975f5c5SAndroid Build Coastguard Worker                                                      cmd_packed_gl_enums, packed_param_types)
2237*8975f5c5SAndroid Build Coastguard Worker    stripped_name = strip_suffix(api, strip_api_prefix(cmd_name))
2238*8975f5c5SAndroid Build Coastguard Worker    return_type = proto[:-len(cmd_name)].strip()
2239*8975f5c5SAndroid Build Coastguard Worker    return TEMPLATE_CONTEXT_PRIVATE_CALL_PROTO % (return_type, stripped_name,
2240*8975f5c5SAndroid Build Coastguard Worker                                                  internal_params), stripped_name
2241*8975f5c5SAndroid Build Coastguard Worker
2242*8975f5c5SAndroid Build Coastguard Worker
2243*8975f5c5SAndroid Build Coastguard Workerdef format_context_lock_proto(api, cmd_name, params, cmd_packed_gl_enums, packed_param_types):
2244*8975f5c5SAndroid Build Coastguard Worker    with_extra_params = ["Thread *thread"] + params
2245*8975f5c5SAndroid Build Coastguard Worker    internal_params = get_context_lock_params(api, cmd_name, with_extra_params,
2246*8975f5c5SAndroid Build Coastguard Worker                                              cmd_packed_gl_enums, packed_param_types)
2247*8975f5c5SAndroid Build Coastguard Worker    return TEMPLATE_CONTEXT_LOCK_PROTO % (strip_api_prefix(cmd_name), internal_params)
2248*8975f5c5SAndroid Build Coastguard Worker
2249*8975f5c5SAndroid Build Coastguard Worker
2250*8975f5c5SAndroid Build Coastguard Workerdef format_capture_proto(api, cmd_name, proto, params, cmd_packed_gl_enums, packed_param_types):
2251*8975f5c5SAndroid Build Coastguard Worker    context_param_typed = 'egl::Thread *thread' if api == apis.EGL else 'const State &glState'
2252*8975f5c5SAndroid Build Coastguard Worker    internal_params = get_internal_params(api, cmd_name,
2253*8975f5c5SAndroid Build Coastguard Worker                                          [context_param_typed, "bool isCallValid"] + params,
2254*8975f5c5SAndroid Build Coastguard Worker                                          cmd_packed_gl_enums, packed_param_types)
2255*8975f5c5SAndroid Build Coastguard Worker    return_type = proto[:-len(cmd_name)].strip()
2256*8975f5c5SAndroid Build Coastguard Worker    if return_type != "void":
2257*8975f5c5SAndroid Build Coastguard Worker        internal_params += ", %s returnValue" % return_type
2258*8975f5c5SAndroid Build Coastguard Worker    return TEMPLATE_CAPTURE_PROTO % (strip_api_prefix(cmd_name), internal_params)
2259*8975f5c5SAndroid Build Coastguard Worker
2260*8975f5c5SAndroid Build Coastguard Worker
2261*8975f5c5SAndroid Build Coastguard Workerdef path_to(folder, file):
2262*8975f5c5SAndroid Build Coastguard Worker    return os.path.join(script_relative(".."), "src", folder, file)
2263*8975f5c5SAndroid Build Coastguard Worker
2264*8975f5c5SAndroid Build Coastguard Worker
2265*8975f5c5SAndroid Build Coastguard Workerclass ANGLEEntryPoints(registry_xml.EntryPoints):
2266*8975f5c5SAndroid Build Coastguard Worker
2267*8975f5c5SAndroid Build Coastguard Worker    def __init__(self,
2268*8975f5c5SAndroid Build Coastguard Worker                 api,
2269*8975f5c5SAndroid Build Coastguard Worker                 xml,
2270*8975f5c5SAndroid Build Coastguard Worker                 commands,
2271*8975f5c5SAndroid Build Coastguard Worker                 all_param_types,
2272*8975f5c5SAndroid Build Coastguard Worker                 cmd_packed_enums,
2273*8975f5c5SAndroid Build Coastguard Worker                 export_template=TEMPLATE_GL_ENTRY_POINT_EXPORT,
2274*8975f5c5SAndroid Build Coastguard Worker                 packed_param_types=[],
2275*8975f5c5SAndroid Build Coastguard Worker                 ep_to_object={},
2276*8975f5c5SAndroid Build Coastguard Worker                 is_gles1=False):
2277*8975f5c5SAndroid Build Coastguard Worker        super().__init__(api, xml, commands)
2278*8975f5c5SAndroid Build Coastguard Worker
2279*8975f5c5SAndroid Build Coastguard Worker        self.decls = []
2280*8975f5c5SAndroid Build Coastguard Worker        self.defs = []
2281*8975f5c5SAndroid Build Coastguard Worker        self.export_defs = []
2282*8975f5c5SAndroid Build Coastguard Worker        self.validation_protos = []
2283*8975f5c5SAndroid Build Coastguard Worker        self.context_private_call_protos = []
2284*8975f5c5SAndroid Build Coastguard Worker        self.context_private_call_functions = []
2285*8975f5c5SAndroid Build Coastguard Worker        self.context_lock_protos = []
2286*8975f5c5SAndroid Build Coastguard Worker        self.capture_protos = []
2287*8975f5c5SAndroid Build Coastguard Worker        self.capture_methods = []
2288*8975f5c5SAndroid Build Coastguard Worker        self.capture_pointer_funcs = []
2289*8975f5c5SAndroid Build Coastguard Worker
2290*8975f5c5SAndroid Build Coastguard Worker        for (cmd_name, command_node, param_text, proto_text) in self.get_infos():
2291*8975f5c5SAndroid Build Coastguard Worker            self.decls.append(format_entry_point_decl(self.api, cmd_name, proto_text, param_text))
2292*8975f5c5SAndroid Build Coastguard Worker            self.defs.append(
2293*8975f5c5SAndroid Build Coastguard Worker                format_entry_point_def(self.api, command_node, cmd_name, proto_text, param_text,
2294*8975f5c5SAndroid Build Coastguard Worker                                       cmd_packed_enums, packed_param_types, ep_to_object,
2295*8975f5c5SAndroid Build Coastguard Worker                                       is_gles1))
2296*8975f5c5SAndroid Build Coastguard Worker
2297*8975f5c5SAndroid Build Coastguard Worker            self.export_defs.append(
2298*8975f5c5SAndroid Build Coastguard Worker                format_entry_point_export(cmd_name, proto_text, param_text, export_template))
2299*8975f5c5SAndroid Build Coastguard Worker
2300*8975f5c5SAndroid Build Coastguard Worker            self.validation_protos.append(
2301*8975f5c5SAndroid Build Coastguard Worker                format_validation_proto(self.api, cmd_name, param_text, cmd_packed_enums,
2302*8975f5c5SAndroid Build Coastguard Worker                                        packed_param_types))
2303*8975f5c5SAndroid Build Coastguard Worker
2304*8975f5c5SAndroid Build Coastguard Worker            if is_context_private_state_command(self.api, cmd_name):
2305*8975f5c5SAndroid Build Coastguard Worker                proto, function = format_context_private_call_proto(self.api, cmd_name, proto_text,
2306*8975f5c5SAndroid Build Coastguard Worker                                                                    param_text, cmd_packed_enums,
2307*8975f5c5SAndroid Build Coastguard Worker                                                                    packed_param_types)
2308*8975f5c5SAndroid Build Coastguard Worker                self.context_private_call_protos.append(proto)
2309*8975f5c5SAndroid Build Coastguard Worker                self.context_private_call_functions.append(function)
2310*8975f5c5SAndroid Build Coastguard Worker
2311*8975f5c5SAndroid Build Coastguard Worker            if api == apis.EGL:
2312*8975f5c5SAndroid Build Coastguard Worker                self.context_lock_protos.append(
2313*8975f5c5SAndroid Build Coastguard Worker                    format_context_lock_proto(api, cmd_name, param_text, cmd_packed_enums,
2314*8975f5c5SAndroid Build Coastguard Worker                                              packed_param_types))
2315*8975f5c5SAndroid Build Coastguard Worker
2316*8975f5c5SAndroid Build Coastguard Worker            self.capture_protos.append(
2317*8975f5c5SAndroid Build Coastguard Worker                format_capture_proto(self.api, cmd_name, proto_text, param_text, cmd_packed_enums,
2318*8975f5c5SAndroid Build Coastguard Worker                                     packed_param_types))
2319*8975f5c5SAndroid Build Coastguard Worker            self.capture_methods.append(
2320*8975f5c5SAndroid Build Coastguard Worker                format_capture_method(self.api, command_node, cmd_name, proto_text, param_text,
2321*8975f5c5SAndroid Build Coastguard Worker                                      all_param_types, self.capture_pointer_funcs,
2322*8975f5c5SAndroid Build Coastguard Worker                                      cmd_packed_enums, packed_param_types))
2323*8975f5c5SAndroid Build Coastguard Worker
2324*8975f5c5SAndroid Build Coastguard Worker        # Ensure we store GLint64 in the param types for use with the replay interpreter.
2325*8975f5c5SAndroid Build Coastguard Worker        all_param_types.add('GLint64')
2326*8975f5c5SAndroid Build Coastguard Worker
2327*8975f5c5SAndroid Build Coastguard Worker
2328*8975f5c5SAndroid Build Coastguard Workerclass GLEntryPoints(ANGLEEntryPoints):
2329*8975f5c5SAndroid Build Coastguard Worker
2330*8975f5c5SAndroid Build Coastguard Worker    all_param_types = set()
2331*8975f5c5SAndroid Build Coastguard Worker
2332*8975f5c5SAndroid Build Coastguard Worker    def __init__(self, api, xml, commands, is_gles1=False):
2333*8975f5c5SAndroid Build Coastguard Worker        super().__init__(
2334*8975f5c5SAndroid Build Coastguard Worker            api,
2335*8975f5c5SAndroid Build Coastguard Worker            xml,
2336*8975f5c5SAndroid Build Coastguard Worker            commands,
2337*8975f5c5SAndroid Build Coastguard Worker            GLEntryPoints.all_param_types,
2338*8975f5c5SAndroid Build Coastguard Worker            GLEntryPoints.get_packed_enums(),
2339*8975f5c5SAndroid Build Coastguard Worker            is_gles1=is_gles1)
2340*8975f5c5SAndroid Build Coastguard Worker
2341*8975f5c5SAndroid Build Coastguard Worker    _packed_enums = None
2342*8975f5c5SAndroid Build Coastguard Worker
2343*8975f5c5SAndroid Build Coastguard Worker    @classmethod
2344*8975f5c5SAndroid Build Coastguard Worker    def get_packed_enums(cls):
2345*8975f5c5SAndroid Build Coastguard Worker        if not cls._packed_enums:
2346*8975f5c5SAndroid Build Coastguard Worker            with open(script_relative('entry_point_packed_gl_enums.json')) as f:
2347*8975f5c5SAndroid Build Coastguard Worker                cls._packed_enums = json.loads(f.read())
2348*8975f5c5SAndroid Build Coastguard Worker        return cls._packed_enums
2349*8975f5c5SAndroid Build Coastguard Worker
2350*8975f5c5SAndroid Build Coastguard Worker
2351*8975f5c5SAndroid Build Coastguard Workerclass EGLEntryPoints(ANGLEEntryPoints):
2352*8975f5c5SAndroid Build Coastguard Worker
2353*8975f5c5SAndroid Build Coastguard Worker    all_param_types = set()
2354*8975f5c5SAndroid Build Coastguard Worker
2355*8975f5c5SAndroid Build Coastguard Worker    def __init__(self, xml, commands):
2356*8975f5c5SAndroid Build Coastguard Worker        super().__init__(
2357*8975f5c5SAndroid Build Coastguard Worker            apis.EGL,
2358*8975f5c5SAndroid Build Coastguard Worker            xml,
2359*8975f5c5SAndroid Build Coastguard Worker            commands,
2360*8975f5c5SAndroid Build Coastguard Worker            EGLEntryPoints.all_param_types,
2361*8975f5c5SAndroid Build Coastguard Worker            EGLEntryPoints.get_packed_enums(),
2362*8975f5c5SAndroid Build Coastguard Worker            export_template=TEMPLATE_EGL_ENTRY_POINT_EXPORT,
2363*8975f5c5SAndroid Build Coastguard Worker            packed_param_types=EGL_PACKED_TYPES,
2364*8975f5c5SAndroid Build Coastguard Worker            ep_to_object=EGLEntryPoints._get_ep_to_object())
2365*8975f5c5SAndroid Build Coastguard Worker
2366*8975f5c5SAndroid Build Coastguard Worker    _ep_to_object = None
2367*8975f5c5SAndroid Build Coastguard Worker
2368*8975f5c5SAndroid Build Coastguard Worker    @classmethod
2369*8975f5c5SAndroid Build Coastguard Worker    def _get_ep_to_object(cls):
2370*8975f5c5SAndroid Build Coastguard Worker
2371*8975f5c5SAndroid Build Coastguard Worker        if cls._ep_to_object:
2372*8975f5c5SAndroid Build Coastguard Worker            return cls._ep_to_object
2373*8975f5c5SAndroid Build Coastguard Worker
2374*8975f5c5SAndroid Build Coastguard Worker        with open(EGL_GET_LABELED_OBJECT_DATA_PATH) as f:
2375*8975f5c5SAndroid Build Coastguard Worker            try:
2376*8975f5c5SAndroid Build Coastguard Worker                spec_json = json.loads(f.read())
2377*8975f5c5SAndroid Build Coastguard Worker            except ValueError:
2378*8975f5c5SAndroid Build Coastguard Worker                raise Exception("Could not decode JSON from %s" % EGL_GET_LABELED_OBJECT_DATA_PATH)
2379*8975f5c5SAndroid Build Coastguard Worker
2380*8975f5c5SAndroid Build Coastguard Worker        # Construct a mapping from EP to type. Fill in the gaps with Display/None.
2381*8975f5c5SAndroid Build Coastguard Worker        cls._ep_to_object = {}
2382*8975f5c5SAndroid Build Coastguard Worker
2383*8975f5c5SAndroid Build Coastguard Worker        for category, eps in spec_json.items():
2384*8975f5c5SAndroid Build Coastguard Worker            if category == 'description':
2385*8975f5c5SAndroid Build Coastguard Worker                continue
2386*8975f5c5SAndroid Build Coastguard Worker            for ep in eps:
2387*8975f5c5SAndroid Build Coastguard Worker                cls._ep_to_object[ep] = category
2388*8975f5c5SAndroid Build Coastguard Worker
2389*8975f5c5SAndroid Build Coastguard Worker        return cls._ep_to_object
2390*8975f5c5SAndroid Build Coastguard Worker
2391*8975f5c5SAndroid Build Coastguard Worker    _packed_enums = None
2392*8975f5c5SAndroid Build Coastguard Worker
2393*8975f5c5SAndroid Build Coastguard Worker    @classmethod
2394*8975f5c5SAndroid Build Coastguard Worker    def get_packed_enums(cls):
2395*8975f5c5SAndroid Build Coastguard Worker        if not cls._packed_enums:
2396*8975f5c5SAndroid Build Coastguard Worker            with open(script_relative('entry_point_packed_egl_enums.json')) as f:
2397*8975f5c5SAndroid Build Coastguard Worker                cls._packed_enums = json.loads(f.read())
2398*8975f5c5SAndroid Build Coastguard Worker        return cls._packed_enums
2399*8975f5c5SAndroid Build Coastguard Worker
2400*8975f5c5SAndroid Build Coastguard Worker
2401*8975f5c5SAndroid Build Coastguard Workerclass CLEntryPoints(ANGLEEntryPoints):
2402*8975f5c5SAndroid Build Coastguard Worker
2403*8975f5c5SAndroid Build Coastguard Worker    all_param_types = set()
2404*8975f5c5SAndroid Build Coastguard Worker
2405*8975f5c5SAndroid Build Coastguard Worker    def __init__(self, xml, commands):
2406*8975f5c5SAndroid Build Coastguard Worker        super().__init__(
2407*8975f5c5SAndroid Build Coastguard Worker            apis.CL,
2408*8975f5c5SAndroid Build Coastguard Worker            xml,
2409*8975f5c5SAndroid Build Coastguard Worker            commands,
2410*8975f5c5SAndroid Build Coastguard Worker            CLEntryPoints.all_param_types,
2411*8975f5c5SAndroid Build Coastguard Worker            CLEntryPoints.get_packed_enums(),
2412*8975f5c5SAndroid Build Coastguard Worker            export_template=TEMPLATE_CL_ENTRY_POINT_EXPORT,
2413*8975f5c5SAndroid Build Coastguard Worker            packed_param_types=CL_PACKED_TYPES)
2414*8975f5c5SAndroid Build Coastguard Worker
2415*8975f5c5SAndroid Build Coastguard Worker    @classmethod
2416*8975f5c5SAndroid Build Coastguard Worker    def get_packed_enums(cls):
2417*8975f5c5SAndroid Build Coastguard Worker        return {}
2418*8975f5c5SAndroid Build Coastguard Worker
2419*8975f5c5SAndroid Build Coastguard Worker
2420*8975f5c5SAndroid Build Coastguard Workerdef get_decls(api,
2421*8975f5c5SAndroid Build Coastguard Worker              formatter,
2422*8975f5c5SAndroid Build Coastguard Worker              all_commands,
2423*8975f5c5SAndroid Build Coastguard Worker              gles_commands,
2424*8975f5c5SAndroid Build Coastguard Worker              already_included,
2425*8975f5c5SAndroid Build Coastguard Worker              cmd_packed_gl_enums,
2426*8975f5c5SAndroid Build Coastguard Worker              packed_param_types=[]):
2427*8975f5c5SAndroid Build Coastguard Worker    decls = []
2428*8975f5c5SAndroid Build Coastguard Worker    for command in all_commands:
2429*8975f5c5SAndroid Build Coastguard Worker        proto = command.find('proto')
2430*8975f5c5SAndroid Build Coastguard Worker        cmd_name = proto.find('name').text
2431*8975f5c5SAndroid Build Coastguard Worker
2432*8975f5c5SAndroid Build Coastguard Worker        if cmd_name not in gles_commands:
2433*8975f5c5SAndroid Build Coastguard Worker            continue
2434*8975f5c5SAndroid Build Coastguard Worker
2435*8975f5c5SAndroid Build Coastguard Worker        name_no_suffix = strip_suffix(api, cmd_name)
2436*8975f5c5SAndroid Build Coastguard Worker        if name_no_suffix in already_included:
2437*8975f5c5SAndroid Build Coastguard Worker            continue
2438*8975f5c5SAndroid Build Coastguard Worker
2439*8975f5c5SAndroid Build Coastguard Worker        # Don't generate Context::entryPoint declarations for entry points that
2440*8975f5c5SAndroid Build Coastguard Worker        # directly access the context-private state.
2441*8975f5c5SAndroid Build Coastguard Worker        if is_context_private_state_command(api, cmd_name):
2442*8975f5c5SAndroid Build Coastguard Worker            continue
2443*8975f5c5SAndroid Build Coastguard Worker
2444*8975f5c5SAndroid Build Coastguard Worker        param_text = ["".join(param.itertext()) for param in command.findall('param')]
2445*8975f5c5SAndroid Build Coastguard Worker        proto_text = "".join(proto.itertext())
2446*8975f5c5SAndroid Build Coastguard Worker        decls.append(
2447*8975f5c5SAndroid Build Coastguard Worker            format_context_decl(api, cmd_name, proto_text, param_text, formatter,
2448*8975f5c5SAndroid Build Coastguard Worker                                cmd_packed_gl_enums, packed_param_types))
2449*8975f5c5SAndroid Build Coastguard Worker
2450*8975f5c5SAndroid Build Coastguard Worker    return decls
2451*8975f5c5SAndroid Build Coastguard Worker
2452*8975f5c5SAndroid Build Coastguard Worker
2453*8975f5c5SAndroid Build Coastguard Workerdef get_glext_decls(all_commands, gles_commands, version):
2454*8975f5c5SAndroid Build Coastguard Worker    glext_ptrs = []
2455*8975f5c5SAndroid Build Coastguard Worker    glext_protos = []
2456*8975f5c5SAndroid Build Coastguard Worker    is_gles1 = False
2457*8975f5c5SAndroid Build Coastguard Worker
2458*8975f5c5SAndroid Build Coastguard Worker    if (version == ""):
2459*8975f5c5SAndroid Build Coastguard Worker        is_gles1 = True
2460*8975f5c5SAndroid Build Coastguard Worker
2461*8975f5c5SAndroid Build Coastguard Worker    for command in all_commands:
2462*8975f5c5SAndroid Build Coastguard Worker        proto = command.find('proto')
2463*8975f5c5SAndroid Build Coastguard Worker        cmd_name = proto.find('name').text
2464*8975f5c5SAndroid Build Coastguard Worker
2465*8975f5c5SAndroid Build Coastguard Worker        if cmd_name not in gles_commands:
2466*8975f5c5SAndroid Build Coastguard Worker            continue
2467*8975f5c5SAndroid Build Coastguard Worker
2468*8975f5c5SAndroid Build Coastguard Worker        param_text = ["".join(param.itertext()) for param in command.findall('param')]
2469*8975f5c5SAndroid Build Coastguard Worker        proto_text = "".join(proto.itertext())
2470*8975f5c5SAndroid Build Coastguard Worker
2471*8975f5c5SAndroid Build Coastguard Worker        return_type = proto_text[:-len(cmd_name)]
2472*8975f5c5SAndroid Build Coastguard Worker        params = ", ".join(param_text)
2473*8975f5c5SAndroid Build Coastguard Worker
2474*8975f5c5SAndroid Build Coastguard Worker        format_params = {
2475*8975f5c5SAndroid Build Coastguard Worker            "apicall": "GL_API" if is_gles1 else "GL_APICALL",
2476*8975f5c5SAndroid Build Coastguard Worker            "name": cmd_name,
2477*8975f5c5SAndroid Build Coastguard Worker            "name_upper": cmd_name.upper(),
2478*8975f5c5SAndroid Build Coastguard Worker            "return_type": return_type,
2479*8975f5c5SAndroid Build Coastguard Worker            "params": params,
2480*8975f5c5SAndroid Build Coastguard Worker        }
2481*8975f5c5SAndroid Build Coastguard Worker
2482*8975f5c5SAndroid Build Coastguard Worker        glext_ptrs.append(TEMPLATE_GLEXT_FUNCTION_POINTER.format(**format_params))
2483*8975f5c5SAndroid Build Coastguard Worker        glext_protos.append(TEMPLATE_GLEXT_FUNCTION_PROTOTYPE.format(**format_params))
2484*8975f5c5SAndroid Build Coastguard Worker
2485*8975f5c5SAndroid Build Coastguard Worker    return glext_ptrs, glext_protos
2486*8975f5c5SAndroid Build Coastguard Worker
2487*8975f5c5SAndroid Build Coastguard Worker
2488*8975f5c5SAndroid Build Coastguard Workerdef write_file(annotation, comment, template, entry_points, suffix, includes, lib, file):
2489*8975f5c5SAndroid Build Coastguard Worker
2490*8975f5c5SAndroid Build Coastguard Worker    content = template.format(
2491*8975f5c5SAndroid Build Coastguard Worker        script_name=os.path.basename(sys.argv[0]),
2492*8975f5c5SAndroid Build Coastguard Worker        data_source_name=file,
2493*8975f5c5SAndroid Build Coastguard Worker        annotation_lower=annotation.lower(),
2494*8975f5c5SAndroid Build Coastguard Worker        annotation_upper=annotation.upper(),
2495*8975f5c5SAndroid Build Coastguard Worker        comment=comment,
2496*8975f5c5SAndroid Build Coastguard Worker        lib=lib.upper(),
2497*8975f5c5SAndroid Build Coastguard Worker        includes=includes,
2498*8975f5c5SAndroid Build Coastguard Worker        entry_points=entry_points)
2499*8975f5c5SAndroid Build Coastguard Worker
2500*8975f5c5SAndroid Build Coastguard Worker    path = path_to(lib, "entry_points_{}_autogen.{}".format(annotation.lower(), suffix))
2501*8975f5c5SAndroid Build Coastguard Worker
2502*8975f5c5SAndroid Build Coastguard Worker    with open(path, "w") as out:
2503*8975f5c5SAndroid Build Coastguard Worker        out.write(content)
2504*8975f5c5SAndroid Build Coastguard Worker        out.close()
2505*8975f5c5SAndroid Build Coastguard Worker
2506*8975f5c5SAndroid Build Coastguard Worker
2507*8975f5c5SAndroid Build Coastguard Workerdef write_export_files(entry_points, includes, source, lib_name, lib_description, lib_dir=None):
2508*8975f5c5SAndroid Build Coastguard Worker    content = TEMPLATE_LIB_ENTRY_POINT_SOURCE.format(
2509*8975f5c5SAndroid Build Coastguard Worker        script_name=os.path.basename(sys.argv[0]),
2510*8975f5c5SAndroid Build Coastguard Worker        data_source_name=source,
2511*8975f5c5SAndroid Build Coastguard Worker        lib_name=lib_name,
2512*8975f5c5SAndroid Build Coastguard Worker        lib_description=lib_description,
2513*8975f5c5SAndroid Build Coastguard Worker        includes=includes,
2514*8975f5c5SAndroid Build Coastguard Worker        entry_points=entry_points,
2515*8975f5c5SAndroid Build Coastguard Worker    )
2516*8975f5c5SAndroid Build Coastguard Worker
2517*8975f5c5SAndroid Build Coastguard Worker    path = path_to(lib_name if not lib_dir else lib_dir, "{}_autogen.cpp".format(lib_name))
2518*8975f5c5SAndroid Build Coastguard Worker
2519*8975f5c5SAndroid Build Coastguard Worker    with open(path, "w") as out:
2520*8975f5c5SAndroid Build Coastguard Worker        out.write(content)
2521*8975f5c5SAndroid Build Coastguard Worker        out.close()
2522*8975f5c5SAndroid Build Coastguard Worker
2523*8975f5c5SAndroid Build Coastguard Worker
2524*8975f5c5SAndroid Build Coastguard Workerdef write_context_api_decls(decls, api):
2525*8975f5c5SAndroid Build Coastguard Worker    for (major, minor), version_decls in sorted(decls['core'].items()):
2526*8975f5c5SAndroid Build Coastguard Worker        if minor == "X":
2527*8975f5c5SAndroid Build Coastguard Worker            annotation = '{}_{}'.format(api, major)
2528*8975f5c5SAndroid Build Coastguard Worker            version = str(major)
2529*8975f5c5SAndroid Build Coastguard Worker        else:
2530*8975f5c5SAndroid Build Coastguard Worker            annotation = '{}_{}_{}'.format(api, major, minor)
2531*8975f5c5SAndroid Build Coastguard Worker            version = '{}_{}'.format(major, minor)
2532*8975f5c5SAndroid Build Coastguard Worker        content = CONTEXT_HEADER.format(
2533*8975f5c5SAndroid Build Coastguard Worker            annotation_lower=annotation.lower(),
2534*8975f5c5SAndroid Build Coastguard Worker            annotation_upper=annotation.upper(),
2535*8975f5c5SAndroid Build Coastguard Worker            script_name=os.path.basename(sys.argv[0]),
2536*8975f5c5SAndroid Build Coastguard Worker            data_source_name="gl.xml",
2537*8975f5c5SAndroid Build Coastguard Worker            version=version,
2538*8975f5c5SAndroid Build Coastguard Worker            interface="\n".join(version_decls))
2539*8975f5c5SAndroid Build Coastguard Worker
2540*8975f5c5SAndroid Build Coastguard Worker        path = path_to("libANGLE", "Context_%s_autogen.h" % annotation.lower())
2541*8975f5c5SAndroid Build Coastguard Worker
2542*8975f5c5SAndroid Build Coastguard Worker        with open(path, "w") as out:
2543*8975f5c5SAndroid Build Coastguard Worker            out.write(content)
2544*8975f5c5SAndroid Build Coastguard Worker            out.close()
2545*8975f5c5SAndroid Build Coastguard Worker
2546*8975f5c5SAndroid Build Coastguard Worker    if 'exts' in decls.keys():
2547*8975f5c5SAndroid Build Coastguard Worker        interface_lines = []
2548*8975f5c5SAndroid Build Coastguard Worker        for annotation in decls['exts'].keys():
2549*8975f5c5SAndroid Build Coastguard Worker            interface_lines.append("\\\n    /* " + annotation + " */ \\\n\\")
2550*8975f5c5SAndroid Build Coastguard Worker
2551*8975f5c5SAndroid Build Coastguard Worker            for extname in sorted(decls['exts'][annotation].keys()):
2552*8975f5c5SAndroid Build Coastguard Worker                interface_lines.append("    /* " + extname + " */ \\")
2553*8975f5c5SAndroid Build Coastguard Worker                interface_lines.extend(decls['exts'][annotation][extname])
2554*8975f5c5SAndroid Build Coastguard Worker
2555*8975f5c5SAndroid Build Coastguard Worker        content = CONTEXT_HEADER.format(
2556*8975f5c5SAndroid Build Coastguard Worker            annotation_lower='gles_ext',
2557*8975f5c5SAndroid Build Coastguard Worker            annotation_upper='GLES_EXT',
2558*8975f5c5SAndroid Build Coastguard Worker            script_name=os.path.basename(sys.argv[0]),
2559*8975f5c5SAndroid Build Coastguard Worker            data_source_name="gl.xml",
2560*8975f5c5SAndroid Build Coastguard Worker            version='EXT',
2561*8975f5c5SAndroid Build Coastguard Worker            interface="\n".join(interface_lines))
2562*8975f5c5SAndroid Build Coastguard Worker
2563*8975f5c5SAndroid Build Coastguard Worker        path = path_to("libANGLE", "Context_gles_ext_autogen.h")
2564*8975f5c5SAndroid Build Coastguard Worker
2565*8975f5c5SAndroid Build Coastguard Worker        with open(path, "w") as out:
2566*8975f5c5SAndroid Build Coastguard Worker            out.write(content)
2567*8975f5c5SAndroid Build Coastguard Worker            out.close()
2568*8975f5c5SAndroid Build Coastguard Worker
2569*8975f5c5SAndroid Build Coastguard Worker
2570*8975f5c5SAndroid Build Coastguard Workerdef write_validation_header(annotation, comment, protos, source, template):
2571*8975f5c5SAndroid Build Coastguard Worker    content = template.format(
2572*8975f5c5SAndroid Build Coastguard Worker        script_name=os.path.basename(sys.argv[0]),
2573*8975f5c5SAndroid Build Coastguard Worker        data_source_name=source,
2574*8975f5c5SAndroid Build Coastguard Worker        annotation=annotation,
2575*8975f5c5SAndroid Build Coastguard Worker        comment=comment,
2576*8975f5c5SAndroid Build Coastguard Worker        prototypes="\n".join(protos))
2577*8975f5c5SAndroid Build Coastguard Worker
2578*8975f5c5SAndroid Build Coastguard Worker    path = path_to("libANGLE", "validation%s_autogen.h" % annotation)
2579*8975f5c5SAndroid Build Coastguard Worker
2580*8975f5c5SAndroid Build Coastguard Worker    with open(path, "w") as out:
2581*8975f5c5SAndroid Build Coastguard Worker        out.write(content)
2582*8975f5c5SAndroid Build Coastguard Worker        out.close()
2583*8975f5c5SAndroid Build Coastguard Worker
2584*8975f5c5SAndroid Build Coastguard Worker
2585*8975f5c5SAndroid Build Coastguard Workerdef write_context_private_call_header(protos, source, template):
2586*8975f5c5SAndroid Build Coastguard Worker    content = TEMPLATE_CONTEXT_PRIVATE_CALL_HEADER.format(
2587*8975f5c5SAndroid Build Coastguard Worker        script_name=os.path.basename(sys.argv[0]),
2588*8975f5c5SAndroid Build Coastguard Worker        data_source_name=source,
2589*8975f5c5SAndroid Build Coastguard Worker        prototypes="\n".join(protos))
2590*8975f5c5SAndroid Build Coastguard Worker
2591*8975f5c5SAndroid Build Coastguard Worker    path = path_to("libANGLE", "context_private_call_autogen.h")
2592*8975f5c5SAndroid Build Coastguard Worker
2593*8975f5c5SAndroid Build Coastguard Worker    with open(path, "w") as out:
2594*8975f5c5SAndroid Build Coastguard Worker        out.write(content)
2595*8975f5c5SAndroid Build Coastguard Worker        out.close()
2596*8975f5c5SAndroid Build Coastguard Worker
2597*8975f5c5SAndroid Build Coastguard Worker
2598*8975f5c5SAndroid Build Coastguard Workerdef write_context_lock_header(annotation, comment, protos, source, template):
2599*8975f5c5SAndroid Build Coastguard Worker    content = template.format(
2600*8975f5c5SAndroid Build Coastguard Worker        script_name=os.path.basename(sys.argv[0]),
2601*8975f5c5SAndroid Build Coastguard Worker        data_source_name=source,
2602*8975f5c5SAndroid Build Coastguard Worker        annotation_lower=annotation.lower(),
2603*8975f5c5SAndroid Build Coastguard Worker        annotation_upper=annotation.upper(),
2604*8975f5c5SAndroid Build Coastguard Worker        comment=comment,
2605*8975f5c5SAndroid Build Coastguard Worker        prototypes="\n".join(protos))
2606*8975f5c5SAndroid Build Coastguard Worker
2607*8975f5c5SAndroid Build Coastguard Worker    path = path_to("libGLESv2", "%s_context_lock_autogen.h" % annotation.lower())
2608*8975f5c5SAndroid Build Coastguard Worker
2609*8975f5c5SAndroid Build Coastguard Worker    with open(path, "w") as out:
2610*8975f5c5SAndroid Build Coastguard Worker        out.write(content)
2611*8975f5c5SAndroid Build Coastguard Worker        out.close()
2612*8975f5c5SAndroid Build Coastguard Worker
2613*8975f5c5SAndroid Build Coastguard Worker
2614*8975f5c5SAndroid Build Coastguard Workerdef write_gl_validation_header(annotation, comment, protos, source):
2615*8975f5c5SAndroid Build Coastguard Worker    return write_validation_header(annotation, comment, protos, source,
2616*8975f5c5SAndroid Build Coastguard Worker                                   TEMPLATE_GL_VALIDATION_HEADER)
2617*8975f5c5SAndroid Build Coastguard Worker
2618*8975f5c5SAndroid Build Coastguard Worker
2619*8975f5c5SAndroid Build Coastguard Workerdef write_capture_header(api, annotation, comment, protos, capture_pointer_funcs):
2620*8975f5c5SAndroid Build Coastguard Worker    ns = 'egl' if api == apis.EGL else 'gl'
2621*8975f5c5SAndroid Build Coastguard Worker    combined_protos = ["\n// Method Captures\n"] + protos
2622*8975f5c5SAndroid Build Coastguard Worker    if capture_pointer_funcs:
2623*8975f5c5SAndroid Build Coastguard Worker        combined_protos += ["\n// Parameter Captures\n"] + capture_pointer_funcs
2624*8975f5c5SAndroid Build Coastguard Worker    content = TEMPLATE_CAPTURE_HEADER.format(
2625*8975f5c5SAndroid Build Coastguard Worker        script_name=os.path.basename(sys.argv[0]),
2626*8975f5c5SAndroid Build Coastguard Worker        data_source_name="%s.xml and %s_angle_ext.xml" % (ns, ns),
2627*8975f5c5SAndroid Build Coastguard Worker        annotation_lower=annotation.lower(),
2628*8975f5c5SAndroid Build Coastguard Worker        annotation_upper=annotation.upper(),
2629*8975f5c5SAndroid Build Coastguard Worker        comment=comment,
2630*8975f5c5SAndroid Build Coastguard Worker        namespace=ns,
2631*8975f5c5SAndroid Build Coastguard Worker        prototypes="\n".join(combined_protos))
2632*8975f5c5SAndroid Build Coastguard Worker
2633*8975f5c5SAndroid Build Coastguard Worker    path = path_to(os.path.join("libANGLE", "capture"), "capture_%s_autogen.h" % annotation)
2634*8975f5c5SAndroid Build Coastguard Worker
2635*8975f5c5SAndroid Build Coastguard Worker    with open(path, "w") as out:
2636*8975f5c5SAndroid Build Coastguard Worker        out.write(content)
2637*8975f5c5SAndroid Build Coastguard Worker        out.close()
2638*8975f5c5SAndroid Build Coastguard Worker
2639*8975f5c5SAndroid Build Coastguard Worker
2640*8975f5c5SAndroid Build Coastguard Workerdef write_capture_source(api, annotation_with_dash, annotation_no_dash, comment, capture_methods):
2641*8975f5c5SAndroid Build Coastguard Worker    ns = 'egl' if api == apis.EGL else 'gl'
2642*8975f5c5SAndroid Build Coastguard Worker    content = TEMPLATE_CAPTURE_SOURCE.format(
2643*8975f5c5SAndroid Build Coastguard Worker        script_name=os.path.basename(sys.argv[0]),
2644*8975f5c5SAndroid Build Coastguard Worker        data_source_name="%s.xml and %s_angle_ext.xml" % (ns, ns),
2645*8975f5c5SAndroid Build Coastguard Worker        annotation_with_dash=annotation_with_dash,
2646*8975f5c5SAndroid Build Coastguard Worker        annotation_no_dash=annotation_no_dash,
2647*8975f5c5SAndroid Build Coastguard Worker        comment=comment,
2648*8975f5c5SAndroid Build Coastguard Worker        namespace=ns,
2649*8975f5c5SAndroid Build Coastguard Worker        capture_methods="\n".join(capture_methods))
2650*8975f5c5SAndroid Build Coastguard Worker
2651*8975f5c5SAndroid Build Coastguard Worker    path = path_to(
2652*8975f5c5SAndroid Build Coastguard Worker        os.path.join("libANGLE", "capture"), "capture_%s_autogen.cpp" % annotation_with_dash)
2653*8975f5c5SAndroid Build Coastguard Worker
2654*8975f5c5SAndroid Build Coastguard Worker    with open(path, "w") as out:
2655*8975f5c5SAndroid Build Coastguard Worker        out.write(content)
2656*8975f5c5SAndroid Build Coastguard Worker        out.close()
2657*8975f5c5SAndroid Build Coastguard Worker
2658*8975f5c5SAndroid Build Coastguard Worker
2659*8975f5c5SAndroid Build Coastguard Workerdef is_packed_enum_param_type(param_type):
2660*8975f5c5SAndroid Build Coastguard Worker    return not param_type.startswith("GL") and not param_type.startswith(
2661*8975f5c5SAndroid Build Coastguard Worker        "EGL") and "void" not in param_type
2662*8975f5c5SAndroid Build Coastguard Worker
2663*8975f5c5SAndroid Build Coastguard Worker
2664*8975f5c5SAndroid Build Coastguard Workerdef add_namespace(param_type):
2665*8975f5c5SAndroid Build Coastguard Worker    param_type = param_type.strip()
2666*8975f5c5SAndroid Build Coastguard Worker
2667*8975f5c5SAndroid Build Coastguard Worker    if param_type == 'AHardwareBufferConstPointer' or param_type == 'charConstPointer':
2668*8975f5c5SAndroid Build Coastguard Worker        return param_type
2669*8975f5c5SAndroid Build Coastguard Worker
2670*8975f5c5SAndroid Build Coastguard Worker    # ANGLE namespaced EGL types
2671*8975f5c5SAndroid Build Coastguard Worker    egl_namespace = [
2672*8975f5c5SAndroid Build Coastguard Worker        'CompositorTiming',
2673*8975f5c5SAndroid Build Coastguard Worker        'ObjectType',
2674*8975f5c5SAndroid Build Coastguard Worker        'Timestamp',
2675*8975f5c5SAndroid Build Coastguard Worker    ] + list(EGL_PACKED_TYPES.values())
2676*8975f5c5SAndroid Build Coastguard Worker
2677*8975f5c5SAndroid Build Coastguard Worker    if param_type[0:2] == "GL" or param_type[0:3] == "EGL" or "void" in param_type:
2678*8975f5c5SAndroid Build Coastguard Worker        return param_type
2679*8975f5c5SAndroid Build Coastguard Worker
2680*8975f5c5SAndroid Build Coastguard Worker    if param_type.startswith('gl_'):
2681*8975f5c5SAndroid Build Coastguard Worker        return param_type.replace('gl_', 'gl::')
2682*8975f5c5SAndroid Build Coastguard Worker    elif param_type.startswith('egl_'):
2683*8975f5c5SAndroid Build Coastguard Worker        return param_type.replace('egl_', 'egl::')
2684*8975f5c5SAndroid Build Coastguard Worker    elif param_type.startswith('wl_'):
2685*8975f5c5SAndroid Build Coastguard Worker        return param_type
2686*8975f5c5SAndroid Build Coastguard Worker    elif param_type in egl_namespace:
2687*8975f5c5SAndroid Build Coastguard Worker        return "egl::" + param_type
2688*8975f5c5SAndroid Build Coastguard Worker    else:
2689*8975f5c5SAndroid Build Coastguard Worker        return "gl::" + param_type
2690*8975f5c5SAndroid Build Coastguard Worker
2691*8975f5c5SAndroid Build Coastguard Worker
2692*8975f5c5SAndroid Build Coastguard Workerdef get_gl_pointer_type(param_type):
2693*8975f5c5SAndroid Build Coastguard Worker
2694*8975f5c5SAndroid Build Coastguard Worker    if "ConstPointerPointer" in param_type:
2695*8975f5c5SAndroid Build Coastguard Worker        return "const " + param_type.replace("ConstPointerPointer", "") + " * const *"
2696*8975f5c5SAndroid Build Coastguard Worker
2697*8975f5c5SAndroid Build Coastguard Worker    if "ConstPointer" in param_type:
2698*8975f5c5SAndroid Build Coastguard Worker        return "const " + param_type.replace("ConstPointer", "") + " *"
2699*8975f5c5SAndroid Build Coastguard Worker
2700*8975f5c5SAndroid Build Coastguard Worker    if "PointerPointer" in param_type:
2701*8975f5c5SAndroid Build Coastguard Worker        return param_type.replace("PointerPointer", "") + " **"
2702*8975f5c5SAndroid Build Coastguard Worker
2703*8975f5c5SAndroid Build Coastguard Worker    if "Pointer" in param_type:
2704*8975f5c5SAndroid Build Coastguard Worker        return param_type.replace("Pointer", "") + " *"
2705*8975f5c5SAndroid Build Coastguard Worker
2706*8975f5c5SAndroid Build Coastguard Worker    return param_type
2707*8975f5c5SAndroid Build Coastguard Worker
2708*8975f5c5SAndroid Build Coastguard Worker
2709*8975f5c5SAndroid Build Coastguard Workerdef get_param_type_type(param_type):
2710*8975f5c5SAndroid Build Coastguard Worker    param_type = add_namespace(param_type)
2711*8975f5c5SAndroid Build Coastguard Worker    return get_gl_pointer_type(param_type)
2712*8975f5c5SAndroid Build Coastguard Worker
2713*8975f5c5SAndroid Build Coastguard Worker
2714*8975f5c5SAndroid Build Coastguard Workerdef is_id_type(t):
2715*8975f5c5SAndroid Build Coastguard Worker    return t.endswith('ID') and not t.endswith('ANDROID')
2716*8975f5c5SAndroid Build Coastguard Worker
2717*8975f5c5SAndroid Build Coastguard Worker
2718*8975f5c5SAndroid Build Coastguard Workerdef is_id_pointer_type(t):
2719*8975f5c5SAndroid Build Coastguard Worker    return t.endswith("IDConstPointer") or t.endswith("IDPointer") and not 'ANDROID' in t
2720*8975f5c5SAndroid Build Coastguard Worker
2721*8975f5c5SAndroid Build Coastguard Worker
2722*8975f5c5SAndroid Build Coastguard Workerdef get_gl_param_type_type(param_type):
2723*8975f5c5SAndroid Build Coastguard Worker    if is_packed_enum_param_type(param_type):
2724*8975f5c5SAndroid Build Coastguard Worker        base_type = param_type.replace("Pointer", "").replace("Const", "")
2725*8975f5c5SAndroid Build Coastguard Worker        if is_id_type(base_type):
2726*8975f5c5SAndroid Build Coastguard Worker            replace_type = "GLuint"
2727*8975f5c5SAndroid Build Coastguard Worker        else:
2728*8975f5c5SAndroid Build Coastguard Worker            replace_type = "GLenum"
2729*8975f5c5SAndroid Build Coastguard Worker        param_type = param_type.replace(base_type, replace_type)
2730*8975f5c5SAndroid Build Coastguard Worker    return get_gl_pointer_type(param_type)
2731*8975f5c5SAndroid Build Coastguard Worker
2732*8975f5c5SAndroid Build Coastguard Worker
2733*8975f5c5SAndroid Build Coastguard Workerdef get_param_type_union_name(param_type):
2734*8975f5c5SAndroid Build Coastguard Worker    return param_type + "Val"
2735*8975f5c5SAndroid Build Coastguard Worker
2736*8975f5c5SAndroid Build Coastguard Worker
2737*8975f5c5SAndroid Build Coastguard Workerdef format_param_type_union_type(param_type):
2738*8975f5c5SAndroid Build Coastguard Worker    return "%s %s;" % (get_param_type_type(param_type), get_param_type_union_name(param_type))
2739*8975f5c5SAndroid Build Coastguard Worker
2740*8975f5c5SAndroid Build Coastguard Worker
2741*8975f5c5SAndroid Build Coastguard Workerdef format_get_param_val_specialization(param_type):
2742*8975f5c5SAndroid Build Coastguard Worker    return TEMPLATE_GET_PARAM_VAL_SPECIALIZATION.format(
2743*8975f5c5SAndroid Build Coastguard Worker        enum=param_type,
2744*8975f5c5SAndroid Build Coastguard Worker        type=get_param_type_type(param_type),
2745*8975f5c5SAndroid Build Coastguard Worker        union_name=get_param_type_union_name(param_type))
2746*8975f5c5SAndroid Build Coastguard Worker
2747*8975f5c5SAndroid Build Coastguard Worker
2748*8975f5c5SAndroid Build Coastguard Workerdef format_access_param_value_case(param_type):
2749*8975f5c5SAndroid Build Coastguard Worker    return TEMPLATE_ACCESS_PARAM_VALUE_CASE.format(enum=param_type)
2750*8975f5c5SAndroid Build Coastguard Worker
2751*8975f5c5SAndroid Build Coastguard Worker
2752*8975f5c5SAndroid Build Coastguard Workerdef format_set_param_val_specialization(param_type):
2753*8975f5c5SAndroid Build Coastguard Worker    return TEMPLATE_SET_PARAM_VAL_SPECIALIZATION.format(
2754*8975f5c5SAndroid Build Coastguard Worker        enum=param_type,
2755*8975f5c5SAndroid Build Coastguard Worker        type=get_param_type_type(param_type),
2756*8975f5c5SAndroid Build Coastguard Worker        union_name=get_param_type_union_name(param_type))
2757*8975f5c5SAndroid Build Coastguard Worker
2758*8975f5c5SAndroid Build Coastguard Worker
2759*8975f5c5SAndroid Build Coastguard Workerdef format_init_param_value_case(param_type):
2760*8975f5c5SAndroid Build Coastguard Worker    return TEMPLATE_INIT_PARAM_VALUE_CASE.format(enum=param_type)
2761*8975f5c5SAndroid Build Coastguard Worker
2762*8975f5c5SAndroid Build Coastguard Worker
2763*8975f5c5SAndroid Build Coastguard Workerdef format_write_param_type_to_stream_case(param_type):
2764*8975f5c5SAndroid Build Coastguard Worker    return TEMPLATE_WRITE_PARAM_TYPE_TO_STREAM_CASE.format(
2765*8975f5c5SAndroid Build Coastguard Worker        enum_in=param_type, enum_out=param_type, union_name=get_param_type_union_name(param_type))
2766*8975f5c5SAndroid Build Coastguard Worker
2767*8975f5c5SAndroid Build Coastguard Worker
2768*8975f5c5SAndroid Build Coastguard Workerdef get_resource_id_types(all_param_types):
2769*8975f5c5SAndroid Build Coastguard Worker    return [t[:-2] for t in filter(lambda t: is_id_type(t), all_param_types)]
2770*8975f5c5SAndroid Build Coastguard Worker
2771*8975f5c5SAndroid Build Coastguard Worker
2772*8975f5c5SAndroid Build Coastguard Workerdef format_resource_id_types(all_param_types):
2773*8975f5c5SAndroid Build Coastguard Worker    resource_id_types = get_resource_id_types(all_param_types)
2774*8975f5c5SAndroid Build Coastguard Worker    resource_id_types += ["EnumCount", "InvalidEnum = EnumCount"]
2775*8975f5c5SAndroid Build Coastguard Worker    resource_id_types = ",\n    ".join(resource_id_types)
2776*8975f5c5SAndroid Build Coastguard Worker    return resource_id_types
2777*8975f5c5SAndroid Build Coastguard Worker
2778*8975f5c5SAndroid Build Coastguard Worker
2779*8975f5c5SAndroid Build Coastguard Workerdef format_resource_id_convert_structs(all_param_types):
2780*8975f5c5SAndroid Build Coastguard Worker    templ = """\
2781*8975f5c5SAndroid Build Coastguard Workertemplate <>
2782*8975f5c5SAndroid Build Coastguard Workerstruct GetResourceIDTypeFromType<%s>
2783*8975f5c5SAndroid Build Coastguard Worker{
2784*8975f5c5SAndroid Build Coastguard Worker    static constexpr ResourceIDType IDType = ResourceIDType::%s;
2785*8975f5c5SAndroid Build Coastguard Worker};
2786*8975f5c5SAndroid Build Coastguard Worker"""
2787*8975f5c5SAndroid Build Coastguard Worker    resource_id_types = get_resource_id_types(all_param_types)
2788*8975f5c5SAndroid Build Coastguard Worker    convert_struct_strings = [templ % (add_namespace('%sID' % id), id) for id in resource_id_types]
2789*8975f5c5SAndroid Build Coastguard Worker    return "\n".join(convert_struct_strings)
2790*8975f5c5SAndroid Build Coastguard Worker
2791*8975f5c5SAndroid Build Coastguard Worker
2792*8975f5c5SAndroid Build Coastguard Workerdef write_capture_helper_header(all_param_types):
2793*8975f5c5SAndroid Build Coastguard Worker
2794*8975f5c5SAndroid Build Coastguard Worker    param_types = "\n    ".join(["T%s," % t for t in all_param_types])
2795*8975f5c5SAndroid Build Coastguard Worker    param_union_values = "\n    ".join([format_param_type_union_type(t) for t in all_param_types])
2796*8975f5c5SAndroid Build Coastguard Worker    get_param_val_specializations = "\n\n".join(
2797*8975f5c5SAndroid Build Coastguard Worker        [format_get_param_val_specialization(t) for t in all_param_types])
2798*8975f5c5SAndroid Build Coastguard Worker    access_param_value_cases = "\n".join(
2799*8975f5c5SAndroid Build Coastguard Worker        [format_access_param_value_case(t) for t in all_param_types])
2800*8975f5c5SAndroid Build Coastguard Worker    set_param_val_specializations = "\n\n".join(
2801*8975f5c5SAndroid Build Coastguard Worker        [format_set_param_val_specialization(t) for t in all_param_types])
2802*8975f5c5SAndroid Build Coastguard Worker    init_param_value_cases = "\n".join([format_init_param_value_case(t) for t in all_param_types])
2803*8975f5c5SAndroid Build Coastguard Worker    resource_id_types = format_resource_id_types(all_param_types)
2804*8975f5c5SAndroid Build Coastguard Worker    convert_structs = format_resource_id_convert_structs(all_param_types)
2805*8975f5c5SAndroid Build Coastguard Worker
2806*8975f5c5SAndroid Build Coastguard Worker    content = TEMPLATE_FRAME_CAPTURE_UTILS_HEADER.format(
2807*8975f5c5SAndroid Build Coastguard Worker        script_name=os.path.basename(sys.argv[0]),
2808*8975f5c5SAndroid Build Coastguard Worker        data_source_name="gl.xml and gl_angle_ext.xml",
2809*8975f5c5SAndroid Build Coastguard Worker        param_types=param_types,
2810*8975f5c5SAndroid Build Coastguard Worker        param_type_count=len(all_param_types),
2811*8975f5c5SAndroid Build Coastguard Worker        param_union_values=param_union_values,
2812*8975f5c5SAndroid Build Coastguard Worker        get_param_val_specializations=get_param_val_specializations,
2813*8975f5c5SAndroid Build Coastguard Worker        access_param_value_cases=access_param_value_cases,
2814*8975f5c5SAndroid Build Coastguard Worker        set_param_val_specializations=set_param_val_specializations,
2815*8975f5c5SAndroid Build Coastguard Worker        init_param_value_cases=init_param_value_cases,
2816*8975f5c5SAndroid Build Coastguard Worker        resource_id_types=resource_id_types,
2817*8975f5c5SAndroid Build Coastguard Worker        type_to_resource_id_type_structs=convert_structs)
2818*8975f5c5SAndroid Build Coastguard Worker
2819*8975f5c5SAndroid Build Coastguard Worker    path = path_to("common", "frame_capture_utils_autogen.h")
2820*8975f5c5SAndroid Build Coastguard Worker
2821*8975f5c5SAndroid Build Coastguard Worker    with open(path, "w") as out:
2822*8975f5c5SAndroid Build Coastguard Worker        out.write(content)
2823*8975f5c5SAndroid Build Coastguard Worker        out.close()
2824*8975f5c5SAndroid Build Coastguard Worker
2825*8975f5c5SAndroid Build Coastguard Worker
2826*8975f5c5SAndroid Build Coastguard Workerdef format_param_type_to_string_case(param_type):
2827*8975f5c5SAndroid Build Coastguard Worker    return TEMPLATE_PARAM_TYPE_TO_STRING_CASE.format(
2828*8975f5c5SAndroid Build Coastguard Worker        enum=param_type, type=get_gl_param_type_type(param_type))
2829*8975f5c5SAndroid Build Coastguard Worker
2830*8975f5c5SAndroid Build Coastguard Worker
2831*8975f5c5SAndroid Build Coastguard Workerdef get_resource_id_type_from_param_type(param_type):
2832*8975f5c5SAndroid Build Coastguard Worker    if param_type.endswith("ConstPointer"):
2833*8975f5c5SAndroid Build Coastguard Worker        return param_type.replace("ConstPointer", "")[:-2]
2834*8975f5c5SAndroid Build Coastguard Worker    if param_type.endswith("Pointer"):
2835*8975f5c5SAndroid Build Coastguard Worker        return param_type.replace("Pointer", "")[:-2]
2836*8975f5c5SAndroid Build Coastguard Worker    return param_type[:-2]
2837*8975f5c5SAndroid Build Coastguard Worker
2838*8975f5c5SAndroid Build Coastguard Worker
2839*8975f5c5SAndroid Build Coastguard Workerdef format_param_type_to_resource_id_type_case(param_type):
2840*8975f5c5SAndroid Build Coastguard Worker    return TEMPLATE_PARAM_TYPE_TO_RESOURCE_ID_TYPE_CASE.format(
2841*8975f5c5SAndroid Build Coastguard Worker        enum=param_type, resource_id_type=get_resource_id_type_from_param_type(param_type))
2842*8975f5c5SAndroid Build Coastguard Worker
2843*8975f5c5SAndroid Build Coastguard Worker
2844*8975f5c5SAndroid Build Coastguard Workerdef format_param_type_resource_id_cases(all_param_types):
2845*8975f5c5SAndroid Build Coastguard Worker    id_types = filter(lambda t: is_id_type(t) or is_id_pointer_type(t), all_param_types)
2846*8975f5c5SAndroid Build Coastguard Worker    return "\n".join([format_param_type_to_resource_id_type_case(t) for t in id_types])
2847*8975f5c5SAndroid Build Coastguard Worker
2848*8975f5c5SAndroid Build Coastguard Worker
2849*8975f5c5SAndroid Build Coastguard Workerdef format_resource_id_type_name_case(resource_id_type):
2850*8975f5c5SAndroid Build Coastguard Worker    return TEMPLATE_RESOURCE_ID_TYPE_NAME_CASE.format(resource_id_type=resource_id_type)
2851*8975f5c5SAndroid Build Coastguard Worker
2852*8975f5c5SAndroid Build Coastguard Worker
2853*8975f5c5SAndroid Build Coastguard Workerdef write_capture_helper_source(all_param_types):
2854*8975f5c5SAndroid Build Coastguard Worker
2855*8975f5c5SAndroid Build Coastguard Worker    write_param_type_to_stream_cases = "\n".join(
2856*8975f5c5SAndroid Build Coastguard Worker        [format_write_param_type_to_stream_case(t) for t in all_param_types])
2857*8975f5c5SAndroid Build Coastguard Worker    param_type_to_string_cases = "\n".join(
2858*8975f5c5SAndroid Build Coastguard Worker        [format_param_type_to_string_case(t) for t in all_param_types])
2859*8975f5c5SAndroid Build Coastguard Worker
2860*8975f5c5SAndroid Build Coastguard Worker    param_type_resource_id_cases = format_param_type_resource_id_cases(all_param_types)
2861*8975f5c5SAndroid Build Coastguard Worker
2862*8975f5c5SAndroid Build Coastguard Worker    resource_id_types = get_resource_id_types(all_param_types)
2863*8975f5c5SAndroid Build Coastguard Worker    resource_id_type_name_cases = "\n".join(
2864*8975f5c5SAndroid Build Coastguard Worker        [format_resource_id_type_name_case(t) for t in resource_id_types])
2865*8975f5c5SAndroid Build Coastguard Worker
2866*8975f5c5SAndroid Build Coastguard Worker    content = TEMPLATE_FRAME_CAPTURE_UTILS_SOURCE.format(
2867*8975f5c5SAndroid Build Coastguard Worker        script_name=os.path.basename(sys.argv[0]),
2868*8975f5c5SAndroid Build Coastguard Worker        data_source_name="gl.xml and gl_angle_ext.xml",
2869*8975f5c5SAndroid Build Coastguard Worker        write_param_type_to_stream_cases=write_param_type_to_stream_cases,
2870*8975f5c5SAndroid Build Coastguard Worker        param_type_to_string_cases=param_type_to_string_cases,
2871*8975f5c5SAndroid Build Coastguard Worker        param_type_resource_id_cases=param_type_resource_id_cases,
2872*8975f5c5SAndroid Build Coastguard Worker        resource_id_type_name_cases=resource_id_type_name_cases)
2873*8975f5c5SAndroid Build Coastguard Worker
2874*8975f5c5SAndroid Build Coastguard Worker    path = path_to("common", "frame_capture_utils_autogen.cpp")
2875*8975f5c5SAndroid Build Coastguard Worker
2876*8975f5c5SAndroid Build Coastguard Worker    with open(path, "w") as out:
2877*8975f5c5SAndroid Build Coastguard Worker        out.write(content)
2878*8975f5c5SAndroid Build Coastguard Worker        out.close()
2879*8975f5c5SAndroid Build Coastguard Worker
2880*8975f5c5SAndroid Build Coastguard Worker
2881*8975f5c5SAndroid Build Coastguard Workerdef get_command_params_text(command_node, cmd_name):
2882*8975f5c5SAndroid Build Coastguard Worker    param_text_list = list()
2883*8975f5c5SAndroid Build Coastguard Worker    for param_node in command_node.findall('param'):
2884*8975f5c5SAndroid Build Coastguard Worker        param_text_list.append("".join(param_node.itertext()))
2885*8975f5c5SAndroid Build Coastguard Worker    return param_text_list
2886*8975f5c5SAndroid Build Coastguard Worker
2887*8975f5c5SAndroid Build Coastguard Worker
2888*8975f5c5SAndroid Build Coastguard Workerdef is_get_pointer_command(command_name):
2889*8975f5c5SAndroid Build Coastguard Worker    return command_name.endswith('Pointerv') and command_name.startswith('glGet')
2890*8975f5c5SAndroid Build Coastguard Worker
2891*8975f5c5SAndroid Build Coastguard Worker
2892*8975f5c5SAndroid Build Coastguard Workerdef remove_id_suffix(t):
2893*8975f5c5SAndroid Build Coastguard Worker    return t[:-2] if is_id_type(t) else t
2894*8975f5c5SAndroid Build Coastguard Worker
2895*8975f5c5SAndroid Build Coastguard Worker
2896*8975f5c5SAndroid Build Coastguard Workerdef format_replay_params(api, command_name, param_text_list, packed_enums, resource_id_types):
2897*8975f5c5SAndroid Build Coastguard Worker    param_access_strs = list()
2898*8975f5c5SAndroid Build Coastguard Worker    for i, param_text in enumerate(param_text_list):
2899*8975f5c5SAndroid Build Coastguard Worker        param_type = just_the_type(param_text)
2900*8975f5c5SAndroid Build Coastguard Worker        if param_type in EGL_PACKED_TYPES:
2901*8975f5c5SAndroid Build Coastguard Worker            param_type = 'void *'
2902*8975f5c5SAndroid Build Coastguard Worker        param_name = just_the_name(param_text)
2903*8975f5c5SAndroid Build Coastguard Worker        capture_type = get_capture_param_type_name(param_type)
2904*8975f5c5SAndroid Build Coastguard Worker        union_name = get_param_type_union_name(capture_type)
2905*8975f5c5SAndroid Build Coastguard Worker        param_access = 'captures[%d].value.%s' % (i, union_name)
2906*8975f5c5SAndroid Build Coastguard Worker        # Workaround for https://github.com/KhronosGroup/OpenGL-Registry/issues/545
2907*8975f5c5SAndroid Build Coastguard Worker        if command_name == 'glCreateShaderProgramvEXT' and i == 2:
2908*8975f5c5SAndroid Build Coastguard Worker            param_access = 'const_cast<const char **>(%s)' % param_access
2909*8975f5c5SAndroid Build Coastguard Worker        else:
2910*8975f5c5SAndroid Build Coastguard Worker            cmd_no_suffix = strip_suffix(api, command_name)
2911*8975f5c5SAndroid Build Coastguard Worker            if cmd_no_suffix in packed_enums and param_name in packed_enums[cmd_no_suffix]:
2912*8975f5c5SAndroid Build Coastguard Worker                packed_type = remove_id_suffix(packed_enums[cmd_no_suffix][param_name])
2913*8975f5c5SAndroid Build Coastguard Worker                if packed_type == 'Sync':
2914*8975f5c5SAndroid Build Coastguard Worker                    param_access = 'gSyncMap2[captures[%d].value.GLuintVal]' % i
2915*8975f5c5SAndroid Build Coastguard Worker                elif packed_type in resource_id_types:
2916*8975f5c5SAndroid Build Coastguard Worker                    param_access = 'g%sMap[%s]' % (packed_type, param_access)
2917*8975f5c5SAndroid Build Coastguard Worker                elif packed_type == 'UniformLocation':
2918*8975f5c5SAndroid Build Coastguard Worker                    param_access = 'gUniformLocations[gCurrentProgram][%s]' % param_access
2919*8975f5c5SAndroid Build Coastguard Worker                elif packed_type == 'egl::Image':
2920*8975f5c5SAndroid Build Coastguard Worker                    param_access = 'gEGLImageMap2[captures[%d].value.GLuintVal]' % i
2921*8975f5c5SAndroid Build Coastguard Worker                elif packed_type == 'egl::Sync':
2922*8975f5c5SAndroid Build Coastguard Worker                    param_access = 'gEGLSyncMap[captures[%d].value.egl_SyncIDVal]' % i
2923*8975f5c5SAndroid Build Coastguard Worker        param_access_strs.append(param_access)
2924*8975f5c5SAndroid Build Coastguard Worker    return ', '.join(param_access_strs)
2925*8975f5c5SAndroid Build Coastguard Worker
2926*8975f5c5SAndroid Build Coastguard Worker
2927*8975f5c5SAndroid Build Coastguard Workerdef format_capture_replay_call_case(api, command_to_param_types_mapping, gl_packed_enums,
2928*8975f5c5SAndroid Build Coastguard Worker                                    resource_id_types):
2929*8975f5c5SAndroid Build Coastguard Worker    call_list = list()
2930*8975f5c5SAndroid Build Coastguard Worker    for command_name, cmd_param_texts in sorted(command_to_param_types_mapping.items()):
2931*8975f5c5SAndroid Build Coastguard Worker        entry_point_name = strip_api_prefix(command_name)
2932*8975f5c5SAndroid Build Coastguard Worker
2933*8975f5c5SAndroid Build Coastguard Worker        call_list.append(
2934*8975f5c5SAndroid Build Coastguard Worker            TEMPLATE_REPLAY_CALL_CASE.format(
2935*8975f5c5SAndroid Build Coastguard Worker                enum=('EGL' if api == 'EGL' else 'GL') + entry_point_name,
2936*8975f5c5SAndroid Build Coastguard Worker                params=format_replay_params(api, command_name, cmd_param_texts, gl_packed_enums,
2937*8975f5c5SAndroid Build Coastguard Worker                                            resource_id_types),
2938*8975f5c5SAndroid Build Coastguard Worker                call=command_name,
2939*8975f5c5SAndroid Build Coastguard Worker            ))
2940*8975f5c5SAndroid Build Coastguard Worker
2941*8975f5c5SAndroid Build Coastguard Worker    return ''.join(call_list)
2942*8975f5c5SAndroid Build Coastguard Worker
2943*8975f5c5SAndroid Build Coastguard Worker
2944*8975f5c5SAndroid Build Coastguard Workerdef write_capture_replay_source(gl_command_nodes, gl_command_names, gl_packed_enums,
2945*8975f5c5SAndroid Build Coastguard Worker                                egl_command_nodes, egl_command_names, egl_packed_enums,
2946*8975f5c5SAndroid Build Coastguard Worker                                resource_id_types):
2947*8975f5c5SAndroid Build Coastguard Worker
2948*8975f5c5SAndroid Build Coastguard Worker    call_replay_cases = ''
2949*8975f5c5SAndroid Build Coastguard Worker
2950*8975f5c5SAndroid Build Coastguard Worker    for api, nodes, names, packed_enums in [
2951*8975f5c5SAndroid Build Coastguard Worker        (apis.GLES, gl_command_nodes, gl_command_names, gl_packed_enums),
2952*8975f5c5SAndroid Build Coastguard Worker        (apis.EGL, egl_command_nodes, egl_command_names, egl_packed_enums)
2953*8975f5c5SAndroid Build Coastguard Worker    ]:
2954*8975f5c5SAndroid Build Coastguard Worker        command_to_param_types_mapping = dict()
2955*8975f5c5SAndroid Build Coastguard Worker        all_commands_names = set(names)
2956*8975f5c5SAndroid Build Coastguard Worker        for command_node in nodes:
2957*8975f5c5SAndroid Build Coastguard Worker            command_name = command_node.find('proto').find('name').text
2958*8975f5c5SAndroid Build Coastguard Worker            if command_name not in all_commands_names:
2959*8975f5c5SAndroid Build Coastguard Worker                continue
2960*8975f5c5SAndroid Build Coastguard Worker            command_to_param_types_mapping[command_name] = get_command_params_text(
2961*8975f5c5SAndroid Build Coastguard Worker                command_node, command_name)
2962*8975f5c5SAndroid Build Coastguard Worker
2963*8975f5c5SAndroid Build Coastguard Worker        call_replay_cases += format_capture_replay_call_case(api, command_to_param_types_mapping,
2964*8975f5c5SAndroid Build Coastguard Worker                                                             packed_enums, resource_id_types)
2965*8975f5c5SAndroid Build Coastguard Worker
2966*8975f5c5SAndroid Build Coastguard Worker    source_content = TEMPLATE_CAPTURE_REPLAY_SOURCE.format(
2967*8975f5c5SAndroid Build Coastguard Worker        script_name=os.path.basename(sys.argv[0]),
2968*8975f5c5SAndroid Build Coastguard Worker        data_source_name="gl.xml and gl_angle_ext.xml",
2969*8975f5c5SAndroid Build Coastguard Worker        call_replay_cases=call_replay_cases,
2970*8975f5c5SAndroid Build Coastguard Worker    )
2971*8975f5c5SAndroid Build Coastguard Worker    source_file_path = registry_xml.script_relative(
2972*8975f5c5SAndroid Build Coastguard Worker        "../util/capture/frame_capture_replay_autogen.cpp")
2973*8975f5c5SAndroid Build Coastguard Worker    with open(source_file_path, 'w') as f:
2974*8975f5c5SAndroid Build Coastguard Worker        f.write(source_content)
2975*8975f5c5SAndroid Build Coastguard Worker
2976*8975f5c5SAndroid Build Coastguard Worker
2977*8975f5c5SAndroid Build Coastguard Workerdef write_windows_def_file(data_source_name, lib, libexport, folder, exports):
2978*8975f5c5SAndroid Build Coastguard Worker
2979*8975f5c5SAndroid Build Coastguard Worker    content = TEMPLATE_WINDOWS_DEF_FILE.format(
2980*8975f5c5SAndroid Build Coastguard Worker        script_name=os.path.basename(sys.argv[0]),
2981*8975f5c5SAndroid Build Coastguard Worker        data_source_name=data_source_name,
2982*8975f5c5SAndroid Build Coastguard Worker        exports="\n".join(exports),
2983*8975f5c5SAndroid Build Coastguard Worker        lib=libexport)
2984*8975f5c5SAndroid Build Coastguard Worker
2985*8975f5c5SAndroid Build Coastguard Worker    path = path_to(folder, "%s_autogen.def" % lib)
2986*8975f5c5SAndroid Build Coastguard Worker
2987*8975f5c5SAndroid Build Coastguard Worker    with open(path, "w") as out:
2988*8975f5c5SAndroid Build Coastguard Worker        out.write(content)
2989*8975f5c5SAndroid Build Coastguard Worker        out.close()
2990*8975f5c5SAndroid Build Coastguard Worker
2991*8975f5c5SAndroid Build Coastguard Worker
2992*8975f5c5SAndroid Build Coastguard Workerdef get_exports(commands, fmt=None):
2993*8975f5c5SAndroid Build Coastguard Worker    if fmt:
2994*8975f5c5SAndroid Build Coastguard Worker        return ["    %s" % fmt(cmd) for cmd in sorted(commands)]
2995*8975f5c5SAndroid Build Coastguard Worker    else:
2996*8975f5c5SAndroid Build Coastguard Worker        return ["    %s" % cmd for cmd in sorted(commands)]
2997*8975f5c5SAndroid Build Coastguard Worker
2998*8975f5c5SAndroid Build Coastguard Worker
2999*8975f5c5SAndroid Build Coastguard Worker# Get EGL exports
3000*8975f5c5SAndroid Build Coastguard Workerdef get_egl_exports():
3001*8975f5c5SAndroid Build Coastguard Worker
3002*8975f5c5SAndroid Build Coastguard Worker    egl = registry_xml.RegistryXML('egl.xml', 'egl_angle_ext.xml')
3003*8975f5c5SAndroid Build Coastguard Worker    exports = []
3004*8975f5c5SAndroid Build Coastguard Worker
3005*8975f5c5SAndroid Build Coastguard Worker    capser = lambda fn: "EGL_" + fn[3:]
3006*8975f5c5SAndroid Build Coastguard Worker
3007*8975f5c5SAndroid Build Coastguard Worker    for major, minor in registry_xml.EGL_VERSIONS:
3008*8975f5c5SAndroid Build Coastguard Worker        annotation = "{}_{}".format(major, minor)
3009*8975f5c5SAndroid Build Coastguard Worker        name_prefix = "EGL_VERSION_"
3010*8975f5c5SAndroid Build Coastguard Worker
3011*8975f5c5SAndroid Build Coastguard Worker        feature_name = "{}{}".format(name_prefix, annotation)
3012*8975f5c5SAndroid Build Coastguard Worker
3013*8975f5c5SAndroid Build Coastguard Worker        egl.AddCommands(feature_name, annotation)
3014*8975f5c5SAndroid Build Coastguard Worker
3015*8975f5c5SAndroid Build Coastguard Worker        commands = egl.commands[annotation]
3016*8975f5c5SAndroid Build Coastguard Worker
3017*8975f5c5SAndroid Build Coastguard Worker        if len(commands) == 0:
3018*8975f5c5SAndroid Build Coastguard Worker            continue
3019*8975f5c5SAndroid Build Coastguard Worker
3020*8975f5c5SAndroid Build Coastguard Worker        exports.append("\n    ; EGL %d.%d" % (major, minor))
3021*8975f5c5SAndroid Build Coastguard Worker        exports += get_exports(commands, capser)
3022*8975f5c5SAndroid Build Coastguard Worker
3023*8975f5c5SAndroid Build Coastguard Worker    egl.AddExtensionCommands(registry_xml.supported_egl_extensions, ['egl'])
3024*8975f5c5SAndroid Build Coastguard Worker
3025*8975f5c5SAndroid Build Coastguard Worker    for extension_name, ext_cmd_names in sorted(egl.ext_data.items()):
3026*8975f5c5SAndroid Build Coastguard Worker
3027*8975f5c5SAndroid Build Coastguard Worker        if len(ext_cmd_names) == 0:
3028*8975f5c5SAndroid Build Coastguard Worker            continue
3029*8975f5c5SAndroid Build Coastguard Worker
3030*8975f5c5SAndroid Build Coastguard Worker        exports.append("\n    ; %s" % extension_name)
3031*8975f5c5SAndroid Build Coastguard Worker        exports += get_exports(ext_cmd_names, capser)
3032*8975f5c5SAndroid Build Coastguard Worker
3033*8975f5c5SAndroid Build Coastguard Worker    return exports
3034*8975f5c5SAndroid Build Coastguard Worker
3035*8975f5c5SAndroid Build Coastguard Worker
3036*8975f5c5SAndroid Build Coastguard Worker# Construct a mapping from an EGL EP to object function
3037*8975f5c5SAndroid Build Coastguard Workerdef get_egl_entry_point_labeled_object(ep_to_object, cmd_stripped, params, packed_enums):
3038*8975f5c5SAndroid Build Coastguard Worker
3039*8975f5c5SAndroid Build Coastguard Worker    if not ep_to_object:
3040*8975f5c5SAndroid Build Coastguard Worker        return ""
3041*8975f5c5SAndroid Build Coastguard Worker
3042*8975f5c5SAndroid Build Coastguard Worker    # Finds a packed parameter name in a list of params
3043*8975f5c5SAndroid Build Coastguard Worker    def find_param(params, type_name, packed_enums):
3044*8975f5c5SAndroid Build Coastguard Worker        for param in params:
3045*8975f5c5SAndroid Build Coastguard Worker            if just_the_type_packed(param, packed_enums).split(' ')[0] == type_name:
3046*8975f5c5SAndroid Build Coastguard Worker                return just_the_name_packed(param, packed_enums)
3047*8975f5c5SAndroid Build Coastguard Worker        return None
3048*8975f5c5SAndroid Build Coastguard Worker
3049*8975f5c5SAndroid Build Coastguard Worker    display_param = find_param(params, "egl::Display", packed_enums)
3050*8975f5c5SAndroid Build Coastguard Worker
3051*8975f5c5SAndroid Build Coastguard Worker    # For entry points not listed in the JSON file, they default to an EGLDisplay or nothing.
3052*8975f5c5SAndroid Build Coastguard Worker    if cmd_stripped not in ep_to_object:
3053*8975f5c5SAndroid Build Coastguard Worker        if display_param:
3054*8975f5c5SAndroid Build Coastguard Worker            return "GetDisplayIfValid(%s)" % display_param
3055*8975f5c5SAndroid Build Coastguard Worker        return "nullptr"
3056*8975f5c5SAndroid Build Coastguard Worker
3057*8975f5c5SAndroid Build Coastguard Worker    # We first handle a few special cases for certain type categories.
3058*8975f5c5SAndroid Build Coastguard Worker    category = ep_to_object[cmd_stripped]
3059*8975f5c5SAndroid Build Coastguard Worker    if category == "Thread":
3060*8975f5c5SAndroid Build Coastguard Worker        return "GetThreadIfValid(thread)"
3061*8975f5c5SAndroid Build Coastguard Worker    found_param = find_param(params, category, packed_enums)
3062*8975f5c5SAndroid Build Coastguard Worker    if category == "Context" and not found_param:
3063*8975f5c5SAndroid Build Coastguard Worker        return "GetContextIfValid(thread->getDisplay(), thread->getContext())"
3064*8975f5c5SAndroid Build Coastguard Worker    assert found_param, "Did not find %s for %s: %s" % (category, cmd_stripped, str(params))
3065*8975f5c5SAndroid Build Coastguard Worker    if category == "Device":
3066*8975f5c5SAndroid Build Coastguard Worker        return "GetDeviceIfValid(%s)" % found_param
3067*8975f5c5SAndroid Build Coastguard Worker    if category == "LabeledObject":
3068*8975f5c5SAndroid Build Coastguard Worker        object_type_param = find_param(params, "ObjectType", packed_enums)
3069*8975f5c5SAndroid Build Coastguard Worker        return "GetLabeledObjectIfValid(thread, %s, %s, %s)" % (display_param, object_type_param,
3070*8975f5c5SAndroid Build Coastguard Worker                                                                found_param)
3071*8975f5c5SAndroid Build Coastguard Worker
3072*8975f5c5SAndroid Build Coastguard Worker    # We then handle the general case which handles the rest of the type categories.
3073*8975f5c5SAndroid Build Coastguard Worker    return "Get%sIfValid(%s, %s)" % (category, display_param, found_param)
3074*8975f5c5SAndroid Build Coastguard Worker
3075*8975f5c5SAndroid Build Coastguard Worker
3076*8975f5c5SAndroid Build Coastguard Workerdef disable_share_group_lock(api, cmd_name):
3077*8975f5c5SAndroid Build Coastguard Worker    if cmd_name == 'glBindBuffer':
3078*8975f5c5SAndroid Build Coastguard Worker        # This function looks up the ID in the buffer manager,
3079*8975f5c5SAndroid Build Coastguard Worker        # access to which is thread-safe for buffers.
3080*8975f5c5SAndroid Build Coastguard Worker        return True
3081*8975f5c5SAndroid Build Coastguard Worker
3082*8975f5c5SAndroid Build Coastguard Worker    if api == apis.GLES and cmd_name.startswith('glUniform'):
3083*8975f5c5SAndroid Build Coastguard Worker        # Thread safety of glUniform1/2/3/4 and glUniformMatrix* calls is defined by the backend,
3084*8975f5c5SAndroid Build Coastguard Worker        # frontend only does validation.
3085*8975f5c5SAndroid Build Coastguard Worker        keep_locked = [
3086*8975f5c5SAndroid Build Coastguard Worker            # Might set samplers:
3087*8975f5c5SAndroid Build Coastguard Worker            'glUniform1i',
3088*8975f5c5SAndroid Build Coastguard Worker            'glUniform1iv',
3089*8975f5c5SAndroid Build Coastguard Worker            # More complex state change with notifications:
3090*8975f5c5SAndroid Build Coastguard Worker            'glUniformBlockBinding',
3091*8975f5c5SAndroid Build Coastguard Worker        ]
3092*8975f5c5SAndroid Build Coastguard Worker        return cmd_name not in keep_locked
3093*8975f5c5SAndroid Build Coastguard Worker
3094*8975f5c5SAndroid Build Coastguard Worker    return False
3095*8975f5c5SAndroid Build Coastguard Worker
3096*8975f5c5SAndroid Build Coastguard Worker
3097*8975f5c5SAndroid Build Coastguard Workerdef get_context_lock(api, cmd_name):
3098*8975f5c5SAndroid Build Coastguard Worker    # EGLImage related commands need to access EGLImage and Display which should
3099*8975f5c5SAndroid Build Coastguard Worker    # be protected with global lock
3100*8975f5c5SAndroid Build Coastguard Worker    # Also handles ContextMutex merging when "angle_enable_context_mutex" is true.
3101*8975f5c5SAndroid Build Coastguard Worker    if api == apis.GLES and cmd_name.startswith("glEGLImage"):
3102*8975f5c5SAndroid Build Coastguard Worker        return "SCOPED_EGL_IMAGE_SHARE_CONTEXT_LOCK(context, imagePacked);"
3103*8975f5c5SAndroid Build Coastguard Worker
3104*8975f5c5SAndroid Build Coastguard Worker    # Certain commands do not need to hold the share group lock.  Both
3105*8975f5c5SAndroid Build Coastguard Worker    # validation and their implementation in the context are limited to
3106*8975f5c5SAndroid Build Coastguard Worker    # context-local state.
3107*8975f5c5SAndroid Build Coastguard Worker    if disable_share_group_lock(api, cmd_name):
3108*8975f5c5SAndroid Build Coastguard Worker        return ""
3109*8975f5c5SAndroid Build Coastguard Worker
3110*8975f5c5SAndroid Build Coastguard Worker    return "SCOPED_SHARE_CONTEXT_LOCK(context);"
3111*8975f5c5SAndroid Build Coastguard Worker
3112*8975f5c5SAndroid Build Coastguard Worker
3113*8975f5c5SAndroid Build Coastguard Workerdef get_egl_lock(cmd_name):
3114*8975f5c5SAndroid Build Coastguard Worker    if is_egl_sync_entry_point(cmd_name):
3115*8975f5c5SAndroid Build Coastguard Worker        return "ANGLE_SCOPED_GLOBAL_EGL_SYNC_LOCK();"
3116*8975f5c5SAndroid Build Coastguard Worker    if is_egl_entry_point_accessing_both_sync_and_non_sync_API_resources(cmd_name):
3117*8975f5c5SAndroid Build Coastguard Worker        return "ANGLE_SCOPED_GLOBAL_EGL_AND_EGL_SYNC_LOCK();"
3118*8975f5c5SAndroid Build Coastguard Worker    else:
3119*8975f5c5SAndroid Build Coastguard Worker        return "ANGLE_SCOPED_GLOBAL_LOCK();"
3120*8975f5c5SAndroid Build Coastguard Worker
3121*8975f5c5SAndroid Build Coastguard Worker
3122*8975f5c5SAndroid Build Coastguard Workerdef get_prepare_swap_buffers_call(api, cmd_name, params):
3123*8975f5c5SAndroid Build Coastguard Worker    if cmd_name not in [
3124*8975f5c5SAndroid Build Coastguard Worker            "eglSwapBuffers",
3125*8975f5c5SAndroid Build Coastguard Worker            "eglSwapBuffersWithDamageKHR",
3126*8975f5c5SAndroid Build Coastguard Worker            "eglSwapBuffersWithFrameTokenANGLE",
3127*8975f5c5SAndroid Build Coastguard Worker            "eglQuerySurface",
3128*8975f5c5SAndroid Build Coastguard Worker            "eglQuerySurface64KHR",
3129*8975f5c5SAndroid Build Coastguard Worker    ]:
3130*8975f5c5SAndroid Build Coastguard Worker        return ""
3131*8975f5c5SAndroid Build Coastguard Worker
3132*8975f5c5SAndroid Build Coastguard Worker    passed_params = [None, None]
3133*8975f5c5SAndroid Build Coastguard Worker
3134*8975f5c5SAndroid Build Coastguard Worker    for param in params:
3135*8975f5c5SAndroid Build Coastguard Worker        param_type = just_the_type(param)
3136*8975f5c5SAndroid Build Coastguard Worker        if param_type == "EGLDisplay":
3137*8975f5c5SAndroid Build Coastguard Worker            passed_params[0] = param
3138*8975f5c5SAndroid Build Coastguard Worker        if param_type == "EGLSurface":
3139*8975f5c5SAndroid Build Coastguard Worker            passed_params[1] = param
3140*8975f5c5SAndroid Build Coastguard Worker
3141*8975f5c5SAndroid Build Coastguard Worker    prepareCall = "ANGLE_EGLBOOLEAN_TRY(EGL_PrepareSwapBuffersANGLE(%s));" % (", ".join(
3142*8975f5c5SAndroid Build Coastguard Worker        [just_the_name(param) for param in passed_params]))
3143*8975f5c5SAndroid Build Coastguard Worker
3144*8975f5c5SAndroid Build Coastguard Worker    # For eglQuerySurface, the prepare call is only needed for EGL_BUFFER_AGE
3145*8975f5c5SAndroid Build Coastguard Worker    if cmd_name in ["eglQuerySurface", "eglQuerySurface64KHR"]:
3146*8975f5c5SAndroid Build Coastguard Worker        prepareCall = "if (attribute == EGL_BUFFER_AGE_EXT) {" + prepareCall + "}"
3147*8975f5c5SAndroid Build Coastguard Worker
3148*8975f5c5SAndroid Build Coastguard Worker    return prepareCall
3149*8975f5c5SAndroid Build Coastguard Worker
3150*8975f5c5SAndroid Build Coastguard Worker
3151*8975f5c5SAndroid Build Coastguard Workerdef get_preamble(api, cmd_name, params):
3152*8975f5c5SAndroid Build Coastguard Worker    preamble = ""
3153*8975f5c5SAndroid Build Coastguard Worker    preamble += get_prepare_swap_buffers_call(api, cmd_name, params)
3154*8975f5c5SAndroid Build Coastguard Worker    # TODO: others?
3155*8975f5c5SAndroid Build Coastguard Worker    return preamble
3156*8975f5c5SAndroid Build Coastguard Worker
3157*8975f5c5SAndroid Build Coastguard Worker
3158*8975f5c5SAndroid Build Coastguard Workerdef get_unlocked_tail_call(api, cmd_name):
3159*8975f5c5SAndroid Build Coastguard Worker    # Only the following can generate tail calls:
3160*8975f5c5SAndroid Build Coastguard Worker    #
3161*8975f5c5SAndroid Build Coastguard Worker    # - eglDestroySurface, eglMakeCurrent and eglReleaseThread -> May destroy
3162*8975f5c5SAndroid Build Coastguard Worker    #   VkSurfaceKHR in tail call
3163*8975f5c5SAndroid Build Coastguard Worker    # - eglCreateWindowSurface and eglCreatePlatformWindowSurface[EXT] -> May
3164*8975f5c5SAndroid Build Coastguard Worker    #   destroy VkSurfaceKHR in tail call if surface initialization fails
3165*8975f5c5SAndroid Build Coastguard Worker    #
3166*8975f5c5SAndroid Build Coastguard Worker    # - eglPrepareSwapBuffersANGLE -> Calls vkAcquireNextImageKHR in tail call
3167*8975f5c5SAndroid Build Coastguard Worker    #
3168*8975f5c5SAndroid Build Coastguard Worker    # - eglSwapBuffers, eglSwapBuffersWithDamageKHR and
3169*8975f5c5SAndroid Build Coastguard Worker    #   eglSwapBuffersWithFrameTokenANGLE -> May throttle the CPU in tail call or
3170*8975f5c5SAndroid Build Coastguard Worker    #   calls native EGL function
3171*8975f5c5SAndroid Build Coastguard Worker    #
3172*8975f5c5SAndroid Build Coastguard Worker    # - eglClientWaitSyncKHR, eglClientWaitSync, glClientWaitSync,
3173*8975f5c5SAndroid Build Coastguard Worker    #   glFinishFenceNV -> May wait on fence in tail call or call native EGL function
3174*8975f5c5SAndroid Build Coastguard Worker    #
3175*8975f5c5SAndroid Build Coastguard Worker    # - glTexImage2D, glTexImage3D, glTexSubImage2D, glTexSubImage3D,
3176*8975f5c5SAndroid Build Coastguard Worker    #   glCompressedTexImage2D, glCompressedTexImage3D,
3177*8975f5c5SAndroid Build Coastguard Worker    #   glCompressedTexSubImage2D, glCompressedTexSubImage3D -> May perform the
3178*8975f5c5SAndroid Build Coastguard Worker    #   data upload on the host in tail call
3179*8975f5c5SAndroid Build Coastguard Worker    #
3180*8975f5c5SAndroid Build Coastguard Worker    # - glCompileShader, glShaderBinary, glLinkProgram -> May perform the compilation /
3181*8975f5c5SAndroid Build Coastguard Worker    #   link in tail call
3182*8975f5c5SAndroid Build Coastguard Worker    #
3183*8975f5c5SAndroid Build Coastguard Worker    # - eglCreateSync, eglCreateImage, eglDestroySync, eglDestroyImage,
3184*8975f5c5SAndroid Build Coastguard Worker    #   eglGetCompositorTimingANDROID, eglGetFrameTimestampsANDROID -> Calls
3185*8975f5c5SAndroid Build Coastguard Worker    #   native EGL function in tail call
3186*8975f5c5SAndroid Build Coastguard Worker    #
3187*8975f5c5SAndroid Build Coastguard Worker    # - glFlush, glFinish -> May perform the CPU throttling from the implicit swap buffers call when
3188*8975f5c5SAndroid Build Coastguard Worker    #   the current Window Surface is in the single buffer mode.
3189*8975f5c5SAndroid Build Coastguard Worker    #
3190*8975f5c5SAndroid Build Coastguard Worker    if (cmd_name in [
3191*8975f5c5SAndroid Build Coastguard Worker            'eglDestroySurface', 'eglMakeCurrent', 'eglReleaseThread', 'eglCreateWindowSurface',
3192*8975f5c5SAndroid Build Coastguard Worker            'eglCreatePlatformWindowSurface', 'eglCreatePlatformWindowSurfaceEXT',
3193*8975f5c5SAndroid Build Coastguard Worker            'eglPrepareSwapBuffersANGLE', 'eglSwapBuffersWithFrameTokenANGLE', 'glFinishFenceNV',
3194*8975f5c5SAndroid Build Coastguard Worker            'glCompileShader', 'glLinkProgram', 'glShaderBinary', 'glFlush', 'glFinish'
3195*8975f5c5SAndroid Build Coastguard Worker    ] or cmd_name.startswith('glTexImage2D') or cmd_name.startswith('glTexImage3D') or
3196*8975f5c5SAndroid Build Coastguard Worker            cmd_name.startswith('glTexSubImage2D') or cmd_name.startswith('glTexSubImage3D') or
3197*8975f5c5SAndroid Build Coastguard Worker            cmd_name.startswith('glCompressedTexImage2D') or
3198*8975f5c5SAndroid Build Coastguard Worker            cmd_name.startswith('glCompressedTexImage3D') or
3199*8975f5c5SAndroid Build Coastguard Worker            cmd_name.startswith('glCompressedTexSubImage2D') or
3200*8975f5c5SAndroid Build Coastguard Worker            cmd_name.startswith('glCompressedTexSubImage3D')):
3201*8975f5c5SAndroid Build Coastguard Worker        return 'egl::Display::GetCurrentThreadUnlockedTailCall()->run(nullptr);'
3202*8975f5c5SAndroid Build Coastguard Worker
3203*8975f5c5SAndroid Build Coastguard Worker    if cmd_name in [
3204*8975f5c5SAndroid Build Coastguard Worker            'eglClientWaitSyncKHR',
3205*8975f5c5SAndroid Build Coastguard Worker            'eglClientWaitSync',
3206*8975f5c5SAndroid Build Coastguard Worker            'eglCreateImageKHR',
3207*8975f5c5SAndroid Build Coastguard Worker            'eglCreateImage',
3208*8975f5c5SAndroid Build Coastguard Worker            'eglCreateSyncKHR',
3209*8975f5c5SAndroid Build Coastguard Worker            'eglCreateSync',
3210*8975f5c5SAndroid Build Coastguard Worker            'eglDestroySyncKHR',
3211*8975f5c5SAndroid Build Coastguard Worker            'eglDestroySync',
3212*8975f5c5SAndroid Build Coastguard Worker            'eglGetCompositorTimingANDROID',
3213*8975f5c5SAndroid Build Coastguard Worker            'eglGetFrameTimestampsANDROID',
3214*8975f5c5SAndroid Build Coastguard Worker            'eglSwapBuffers',
3215*8975f5c5SAndroid Build Coastguard Worker            'eglSwapBuffersWithDamageKHR',
3216*8975f5c5SAndroid Build Coastguard Worker            'eglWaitSyncKHR',
3217*8975f5c5SAndroid Build Coastguard Worker            'eglWaitSync',
3218*8975f5c5SAndroid Build Coastguard Worker            'glClientWaitSync',
3219*8975f5c5SAndroid Build Coastguard Worker    ]:
3220*8975f5c5SAndroid Build Coastguard Worker        return 'egl::Display::GetCurrentThreadUnlockedTailCall()->run(&returnValue);'
3221*8975f5c5SAndroid Build Coastguard Worker
3222*8975f5c5SAndroid Build Coastguard Worker    # Otherwise assert that no tail calls where generated
3223*8975f5c5SAndroid Build Coastguard Worker    return 'ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());'
3224*8975f5c5SAndroid Build Coastguard Worker
3225*8975f5c5SAndroid Build Coastguard Worker
3226*8975f5c5SAndroid Build Coastguard Workerdef get_epilog(api, cmd_name):
3227*8975f5c5SAndroid Build Coastguard Worker    epilog = get_unlocked_tail_call(api, cmd_name)
3228*8975f5c5SAndroid Build Coastguard Worker    return epilog
3229*8975f5c5SAndroid Build Coastguard Worker
3230*8975f5c5SAndroid Build Coastguard Worker
3231*8975f5c5SAndroid Build Coastguard Workerdef write_stubs_header(api, annotation, title, data_source, out_file, all_commands, commands,
3232*8975f5c5SAndroid Build Coastguard Worker                       cmd_packed_egl_enums, packed_param_types):
3233*8975f5c5SAndroid Build Coastguard Worker
3234*8975f5c5SAndroid Build Coastguard Worker    stubs = []
3235*8975f5c5SAndroid Build Coastguard Worker
3236*8975f5c5SAndroid Build Coastguard Worker    for command in all_commands:
3237*8975f5c5SAndroid Build Coastguard Worker        proto = command.find('proto')
3238*8975f5c5SAndroid Build Coastguard Worker        cmd_name = proto.find('name').text
3239*8975f5c5SAndroid Build Coastguard Worker
3240*8975f5c5SAndroid Build Coastguard Worker        if cmd_name not in commands:
3241*8975f5c5SAndroid Build Coastguard Worker            continue
3242*8975f5c5SAndroid Build Coastguard Worker
3243*8975f5c5SAndroid Build Coastguard Worker        proto_text = "".join(proto.itertext())
3244*8975f5c5SAndroid Build Coastguard Worker
3245*8975f5c5SAndroid Build Coastguard Worker        params = [] if api == apis.CL else ["Thread *thread"]
3246*8975f5c5SAndroid Build Coastguard Worker        params += ["".join(param.itertext()) for param in command.findall('param')]
3247*8975f5c5SAndroid Build Coastguard Worker        if params and just_the_name(params[-1]) == "errcode_ret":
3248*8975f5c5SAndroid Build Coastguard Worker            # Using TLS object for CL error handling, no longer a need for errcode_ret
3249*8975f5c5SAndroid Build Coastguard Worker            del params[-1]
3250*8975f5c5SAndroid Build Coastguard Worker        return_type = proto_text[:-len(cmd_name)].strip()
3251*8975f5c5SAndroid Build Coastguard Worker
3252*8975f5c5SAndroid Build Coastguard Worker        internal_params = get_internal_params(api, cmd_name, params, cmd_packed_egl_enums,
3253*8975f5c5SAndroid Build Coastguard Worker                                              packed_param_types)
3254*8975f5c5SAndroid Build Coastguard Worker        stubs.append("%s %s(%s);" % (return_type, strip_api_prefix(cmd_name), internal_params))
3255*8975f5c5SAndroid Build Coastguard Worker
3256*8975f5c5SAndroid Build Coastguard Worker    args = {
3257*8975f5c5SAndroid Build Coastguard Worker        "annotation_lower": annotation.lower(),
3258*8975f5c5SAndroid Build Coastguard Worker        "annotation_upper": annotation.upper(),
3259*8975f5c5SAndroid Build Coastguard Worker        "data_source_name": data_source,
3260*8975f5c5SAndroid Build Coastguard Worker        "script_name": os.path.basename(sys.argv[0]),
3261*8975f5c5SAndroid Build Coastguard Worker        "stubs": "\n".join(stubs),
3262*8975f5c5SAndroid Build Coastguard Worker        "title": title,
3263*8975f5c5SAndroid Build Coastguard Worker    }
3264*8975f5c5SAndroid Build Coastguard Worker
3265*8975f5c5SAndroid Build Coastguard Worker    output = get_stubs_header_template(api).format(**args)
3266*8975f5c5SAndroid Build Coastguard Worker
3267*8975f5c5SAndroid Build Coastguard Worker    with open(out_file, "w") as f:
3268*8975f5c5SAndroid Build Coastguard Worker        f.write(output)
3269*8975f5c5SAndroid Build Coastguard Worker
3270*8975f5c5SAndroid Build Coastguard Worker
3271*8975f5c5SAndroid Build Coastguard Workerdef main():
3272*8975f5c5SAndroid Build Coastguard Worker
3273*8975f5c5SAndroid Build Coastguard Worker    # auto_script parameters.
3274*8975f5c5SAndroid Build Coastguard Worker    if len(sys.argv) > 1:
3275*8975f5c5SAndroid Build Coastguard Worker        inputs = [
3276*8975f5c5SAndroid Build Coastguard Worker            'entry_point_packed_egl_enums.json', 'entry_point_packed_gl_enums.json',
3277*8975f5c5SAndroid Build Coastguard Worker            EGL_GET_LABELED_OBJECT_DATA_PATH
3278*8975f5c5SAndroid Build Coastguard Worker        ] + registry_xml.xml_inputs
3279*8975f5c5SAndroid Build Coastguard Worker        outputs = [
3280*8975f5c5SAndroid Build Coastguard Worker            CL_STUBS_HEADER_PATH,
3281*8975f5c5SAndroid Build Coastguard Worker            EGL_STUBS_HEADER_PATH,
3282*8975f5c5SAndroid Build Coastguard Worker            EGL_EXT_STUBS_HEADER_PATH,
3283*8975f5c5SAndroid Build Coastguard Worker            '../src/libOpenCL/libOpenCL_autogen.cpp',
3284*8975f5c5SAndroid Build Coastguard Worker            '../src/common/entry_points_enum_autogen.cpp',
3285*8975f5c5SAndroid Build Coastguard Worker            '../src/common/entry_points_enum_autogen.h',
3286*8975f5c5SAndroid Build Coastguard Worker            '../src/common/frame_capture_utils_autogen.cpp',
3287*8975f5c5SAndroid Build Coastguard Worker            '../src/common/frame_capture_utils_autogen.h',
3288*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/Context_gles_1_0_autogen.h',
3289*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/Context_gles_2_0_autogen.h',
3290*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/Context_gles_3_0_autogen.h',
3291*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/Context_gles_3_1_autogen.h',
3292*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/Context_gles_3_2_autogen.h',
3293*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/Context_gles_ext_autogen.h',
3294*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/context_private_call_autogen.h',
3295*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/capture/capture_egl_autogen.cpp',
3296*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/capture/capture_egl_autogen.h',
3297*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/capture/capture_gles_1_0_autogen.cpp',
3298*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/capture/capture_gles_1_0_autogen.h',
3299*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/capture/capture_gles_2_0_autogen.cpp',
3300*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/capture/capture_gles_2_0_autogen.h',
3301*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/capture/capture_gles_3_0_autogen.cpp',
3302*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/capture/capture_gles_3_0_autogen.h',
3303*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/capture/capture_gles_3_1_autogen.cpp',
3304*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/capture/capture_gles_3_1_autogen.h',
3305*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/capture/capture_gles_3_2_autogen.cpp',
3306*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/capture/capture_gles_3_2_autogen.h',
3307*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/capture/capture_gles_ext_autogen.cpp',
3308*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/capture/capture_gles_ext_autogen.h',
3309*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/validationCL_autogen.h',
3310*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/validationEGL_autogen.h',
3311*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/validationES1_autogen.h',
3312*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/validationES2_autogen.h',
3313*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/validationES31_autogen.h',
3314*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/validationES32_autogen.h',
3315*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/validationES3_autogen.h',
3316*8975f5c5SAndroid Build Coastguard Worker            '../src/libANGLE/validationESEXT_autogen.h',
3317*8975f5c5SAndroid Build Coastguard Worker            '../src/libEGL/libEGL_autogen.cpp',
3318*8975f5c5SAndroid Build Coastguard Worker            '../src/libEGL/libEGL_autogen.def',
3319*8975f5c5SAndroid Build Coastguard Worker            '../src/libGLESv2/entry_points_cl_autogen.cpp',
3320*8975f5c5SAndroid Build Coastguard Worker            '../src/libGLESv2/entry_points_cl_autogen.h',
3321*8975f5c5SAndroid Build Coastguard Worker            '../src/libGLESv2/entry_points_egl_autogen.cpp',
3322*8975f5c5SAndroid Build Coastguard Worker            '../src/libGLESv2/entry_points_egl_autogen.h',
3323*8975f5c5SAndroid Build Coastguard Worker            '../src/libGLESv2/entry_points_egl_ext_autogen.cpp',
3324*8975f5c5SAndroid Build Coastguard Worker            '../src/libGLESv2/entry_points_egl_ext_autogen.h',
3325*8975f5c5SAndroid Build Coastguard Worker            '../src/libGLESv2/entry_points_gles_1_0_autogen.cpp',
3326*8975f5c5SAndroid Build Coastguard Worker            '../src/libGLESv2/entry_points_gles_1_0_autogen.h',
3327*8975f5c5SAndroid Build Coastguard Worker            '../src/libGLESv2/entry_points_gles_2_0_autogen.cpp',
3328*8975f5c5SAndroid Build Coastguard Worker            '../src/libGLESv2/entry_points_gles_2_0_autogen.h',
3329*8975f5c5SAndroid Build Coastguard Worker            '../src/libGLESv2/entry_points_gles_3_0_autogen.cpp',
3330*8975f5c5SAndroid Build Coastguard Worker            '../src/libGLESv2/entry_points_gles_3_0_autogen.h',
3331*8975f5c5SAndroid Build Coastguard Worker            '../src/libGLESv2/entry_points_gles_3_1_autogen.cpp',
3332*8975f5c5SAndroid Build Coastguard Worker            '../src/libGLESv2/entry_points_gles_3_1_autogen.h',
3333*8975f5c5SAndroid Build Coastguard Worker            '../src/libGLESv2/entry_points_gles_3_2_autogen.cpp',
3334*8975f5c5SAndroid Build Coastguard Worker            '../src/libGLESv2/entry_points_gles_3_2_autogen.h',
3335*8975f5c5SAndroid Build Coastguard Worker            '../src/libGLESv2/entry_points_gles_ext_autogen.cpp',
3336*8975f5c5SAndroid Build Coastguard Worker            '../src/libGLESv2/entry_points_gles_ext_autogen.h',
3337*8975f5c5SAndroid Build Coastguard Worker            '../src/libGLESv2/libGLESv2_autogen.cpp',
3338*8975f5c5SAndroid Build Coastguard Worker            '../src/libGLESv2/libGLESv2_autogen.def',
3339*8975f5c5SAndroid Build Coastguard Worker            '../src/libGLESv2/libGLESv2_no_capture_autogen.def',
3340*8975f5c5SAndroid Build Coastguard Worker            '../src/libGLESv2/libGLESv2_with_capture_autogen.def',
3341*8975f5c5SAndroid Build Coastguard Worker            '../src/libGLESv2/egl_context_lock_autogen.h',
3342*8975f5c5SAndroid Build Coastguard Worker            '../util/capture/frame_capture_replay_autogen.cpp',
3343*8975f5c5SAndroid Build Coastguard Worker        ]
3344*8975f5c5SAndroid Build Coastguard Worker
3345*8975f5c5SAndroid Build Coastguard Worker        if sys.argv[1] == 'inputs':
3346*8975f5c5SAndroid Build Coastguard Worker            print(','.join(inputs))
3347*8975f5c5SAndroid Build Coastguard Worker        elif sys.argv[1] == 'outputs':
3348*8975f5c5SAndroid Build Coastguard Worker            print(','.join(outputs))
3349*8975f5c5SAndroid Build Coastguard Worker        else:
3350*8975f5c5SAndroid Build Coastguard Worker            print('Invalid script parameters')
3351*8975f5c5SAndroid Build Coastguard Worker            return 1
3352*8975f5c5SAndroid Build Coastguard Worker        return 0
3353*8975f5c5SAndroid Build Coastguard Worker
3354*8975f5c5SAndroid Build Coastguard Worker    glesdecls = {}
3355*8975f5c5SAndroid Build Coastguard Worker    glesdecls['core'] = {}
3356*8975f5c5SAndroid Build Coastguard Worker    glesdecls['exts'] = {}
3357*8975f5c5SAndroid Build Coastguard Worker    for ver in registry_xml.GLES_VERSIONS:
3358*8975f5c5SAndroid Build Coastguard Worker        glesdecls['core'][ver] = []
3359*8975f5c5SAndroid Build Coastguard Worker    for ver in ['GLES1 Extensions', 'GLES2+ Extensions', 'ANGLE Extensions']:
3360*8975f5c5SAndroid Build Coastguard Worker        glesdecls['exts'][ver] = {}
3361*8975f5c5SAndroid Build Coastguard Worker
3362*8975f5c5SAndroid Build Coastguard Worker    libgles_ep_defs = []
3363*8975f5c5SAndroid Build Coastguard Worker    libgles_ep_exports = []
3364*8975f5c5SAndroid Build Coastguard Worker
3365*8975f5c5SAndroid Build Coastguard Worker    xml = registry_xml.RegistryXML('gl.xml', 'gl_angle_ext.xml')
3366*8975f5c5SAndroid Build Coastguard Worker
3367*8975f5c5SAndroid Build Coastguard Worker    # Stores core commands to keep track of duplicates
3368*8975f5c5SAndroid Build Coastguard Worker    all_commands_no_suffix = []
3369*8975f5c5SAndroid Build Coastguard Worker    all_commands_with_suffix = []
3370*8975f5c5SAndroid Build Coastguard Worker
3371*8975f5c5SAndroid Build Coastguard Worker    # Collect all context-private-state-accessing helper declarations
3372*8975f5c5SAndroid Build Coastguard Worker    context_private_call_protos = []
3373*8975f5c5SAndroid Build Coastguard Worker    context_private_call_functions = set()
3374*8975f5c5SAndroid Build Coastguard Worker
3375*8975f5c5SAndroid Build Coastguard Worker    # First run through the main GLES entry points.  Since ES2+ is the primary use
3376*8975f5c5SAndroid Build Coastguard Worker    # case, we go through those first and then add ES1-only APIs at the end.
3377*8975f5c5SAndroid Build Coastguard Worker    for major_version, minor_version in registry_xml.GLES_VERSIONS:
3378*8975f5c5SAndroid Build Coastguard Worker        version = "{}_{}".format(major_version, minor_version)
3379*8975f5c5SAndroid Build Coastguard Worker        annotation = "GLES_{}".format(version)
3380*8975f5c5SAndroid Build Coastguard Worker        name_prefix = "GL_ES_VERSION_"
3381*8975f5c5SAndroid Build Coastguard Worker
3382*8975f5c5SAndroid Build Coastguard Worker        if major_version == 1:
3383*8975f5c5SAndroid Build Coastguard Worker            name_prefix = "GL_VERSION_ES_CM_"
3384*8975f5c5SAndroid Build Coastguard Worker
3385*8975f5c5SAndroid Build Coastguard Worker        comment = version.replace("_", ".")
3386*8975f5c5SAndroid Build Coastguard Worker        feature_name = "{}{}".format(name_prefix, version)
3387*8975f5c5SAndroid Build Coastguard Worker
3388*8975f5c5SAndroid Build Coastguard Worker        xml.AddCommands(feature_name, version)
3389*8975f5c5SAndroid Build Coastguard Worker
3390*8975f5c5SAndroid Build Coastguard Worker        version_commands = xml.commands[version]
3391*8975f5c5SAndroid Build Coastguard Worker        all_commands_no_suffix.extend(xml.commands[version])
3392*8975f5c5SAndroid Build Coastguard Worker        all_commands_with_suffix.extend(xml.commands[version])
3393*8975f5c5SAndroid Build Coastguard Worker
3394*8975f5c5SAndroid Build Coastguard Worker        eps = GLEntryPoints(apis.GLES, xml, version_commands, is_gles1=(major_version == 1))
3395*8975f5c5SAndroid Build Coastguard Worker        eps.decls.insert(0, "extern \"C\" {")
3396*8975f5c5SAndroid Build Coastguard Worker        eps.decls.append("} // extern \"C\"")
3397*8975f5c5SAndroid Build Coastguard Worker        eps.defs.insert(0, "extern \"C\" {")
3398*8975f5c5SAndroid Build Coastguard Worker        eps.defs.append("} // extern \"C\"")
3399*8975f5c5SAndroid Build Coastguard Worker
3400*8975f5c5SAndroid Build Coastguard Worker        # Write the version as a comment before the first EP.
3401*8975f5c5SAndroid Build Coastguard Worker        libgles_ep_exports.append("\n    ; OpenGL ES %s" % comment)
3402*8975f5c5SAndroid Build Coastguard Worker
3403*8975f5c5SAndroid Build Coastguard Worker        libgles_ep_defs += ["\n// OpenGL ES %s" % comment] + eps.export_defs
3404*8975f5c5SAndroid Build Coastguard Worker        libgles_ep_exports += get_exports(version_commands)
3405*8975f5c5SAndroid Build Coastguard Worker
3406*8975f5c5SAndroid Build Coastguard Worker        major_if_not_one = major_version if major_version != 1 else ""
3407*8975f5c5SAndroid Build Coastguard Worker        minor_if_not_zero = minor_version if minor_version != 0 else ""
3408*8975f5c5SAndroid Build Coastguard Worker
3409*8975f5c5SAndroid Build Coastguard Worker        header_includes = TEMPLATE_HEADER_INCLUDES.format(
3410*8975f5c5SAndroid Build Coastguard Worker            major=major_if_not_one, minor=minor_if_not_zero)
3411*8975f5c5SAndroid Build Coastguard Worker
3412*8975f5c5SAndroid Build Coastguard Worker        version_annotation = "%s%s" % (major_version, minor_if_not_zero)
3413*8975f5c5SAndroid Build Coastguard Worker        source_includes = TEMPLATE_SOURCES_INCLUDES.format(
3414*8975f5c5SAndroid Build Coastguard Worker            header_version=annotation.lower(), validation_header_version="ES" + version_annotation)
3415*8975f5c5SAndroid Build Coastguard Worker
3416*8975f5c5SAndroid Build Coastguard Worker        write_file(annotation, "GLES " + comment, TEMPLATE_ENTRY_POINT_HEADER,
3417*8975f5c5SAndroid Build Coastguard Worker                   "\n".join(eps.decls), "h", header_includes, "libGLESv2", "gl.xml")
3418*8975f5c5SAndroid Build Coastguard Worker        write_file(annotation, "GLES " + comment, TEMPLATE_ENTRY_POINT_SOURCE, "\n".join(eps.defs),
3419*8975f5c5SAndroid Build Coastguard Worker                   "cpp", source_includes, "libGLESv2", "gl.xml")
3420*8975f5c5SAndroid Build Coastguard Worker
3421*8975f5c5SAndroid Build Coastguard Worker        glesdecls['core'][(major_version,
3422*8975f5c5SAndroid Build Coastguard Worker                           minor_version)] = get_decls(apis.GLES, CONTEXT_DECL_FORMAT,
3423*8975f5c5SAndroid Build Coastguard Worker                                                       xml.all_commands, version_commands, [],
3424*8975f5c5SAndroid Build Coastguard Worker                                                       GLEntryPoints.get_packed_enums())
3425*8975f5c5SAndroid Build Coastguard Worker
3426*8975f5c5SAndroid Build Coastguard Worker        validation_annotation = "ES%s%s" % (major_version, minor_if_not_zero)
3427*8975f5c5SAndroid Build Coastguard Worker        write_gl_validation_header(validation_annotation, "ES %s" % comment, eps.validation_protos,
3428*8975f5c5SAndroid Build Coastguard Worker                                   "gl.xml and gl_angle_ext.xml")
3429*8975f5c5SAndroid Build Coastguard Worker
3430*8975f5c5SAndroid Build Coastguard Worker        context_private_call_protos += eps.context_private_call_protos
3431*8975f5c5SAndroid Build Coastguard Worker        context_private_call_functions.update(eps.context_private_call_functions)
3432*8975f5c5SAndroid Build Coastguard Worker
3433*8975f5c5SAndroid Build Coastguard Worker        write_capture_header(apis.GLES, 'gles_' + version, comment, eps.capture_protos,
3434*8975f5c5SAndroid Build Coastguard Worker                             eps.capture_pointer_funcs)
3435*8975f5c5SAndroid Build Coastguard Worker        write_capture_source(apis.GLES, 'gles_' + version, validation_annotation, comment,
3436*8975f5c5SAndroid Build Coastguard Worker                             eps.capture_methods)
3437*8975f5c5SAndroid Build Coastguard Worker
3438*8975f5c5SAndroid Build Coastguard Worker    # After we finish with the main entry points, we process the extensions.
3439*8975f5c5SAndroid Build Coastguard Worker    extension_decls = ["extern \"C\" {"]
3440*8975f5c5SAndroid Build Coastguard Worker    extension_defs = ["extern \"C\" {"]
3441*8975f5c5SAndroid Build Coastguard Worker    extension_commands = []
3442*8975f5c5SAndroid Build Coastguard Worker
3443*8975f5c5SAndroid Build Coastguard Worker    # Accumulated validation prototypes.
3444*8975f5c5SAndroid Build Coastguard Worker    ext_validation_protos = []
3445*8975f5c5SAndroid Build Coastguard Worker    ext_capture_protos = []
3446*8975f5c5SAndroid Build Coastguard Worker    ext_capture_methods = []
3447*8975f5c5SAndroid Build Coastguard Worker    ext_capture_pointer_funcs = []
3448*8975f5c5SAndroid Build Coastguard Worker
3449*8975f5c5SAndroid Build Coastguard Worker    for gles1ext in registry_xml.gles1_extensions:
3450*8975f5c5SAndroid Build Coastguard Worker        glesdecls['exts']['GLES1 Extensions'][gles1ext] = []
3451*8975f5c5SAndroid Build Coastguard Worker    for glesext in registry_xml.gles_extensions:
3452*8975f5c5SAndroid Build Coastguard Worker        glesdecls['exts']['GLES2+ Extensions'][glesext] = []
3453*8975f5c5SAndroid Build Coastguard Worker    for angle_ext in registry_xml.angle_extensions:
3454*8975f5c5SAndroid Build Coastguard Worker        glesdecls['exts']['ANGLE Extensions'][angle_ext] = []
3455*8975f5c5SAndroid Build Coastguard Worker
3456*8975f5c5SAndroid Build Coastguard Worker    xml.AddExtensionCommands(registry_xml.supported_extensions, ['gles2', 'gles1'])
3457*8975f5c5SAndroid Build Coastguard Worker
3458*8975f5c5SAndroid Build Coastguard Worker    for extension_name, ext_cmd_names in sorted(xml.ext_data.items()):
3459*8975f5c5SAndroid Build Coastguard Worker        extension_commands.extend(xml.ext_data[extension_name])
3460*8975f5c5SAndroid Build Coastguard Worker
3461*8975f5c5SAndroid Build Coastguard Worker        # Detect and filter duplicate extensions.
3462*8975f5c5SAndroid Build Coastguard Worker        is_gles1 = extension_name in registry_xml.gles1_extensions
3463*8975f5c5SAndroid Build Coastguard Worker        eps = GLEntryPoints(apis.GLES, xml, ext_cmd_names, is_gles1=is_gles1)
3464*8975f5c5SAndroid Build Coastguard Worker
3465*8975f5c5SAndroid Build Coastguard Worker        # Write the extension name as a comment before the first EP.
3466*8975f5c5SAndroid Build Coastguard Worker        comment = "\n// {}".format(extension_name)
3467*8975f5c5SAndroid Build Coastguard Worker        libgles_ep_exports.append("\n    ; %s" % extension_name)
3468*8975f5c5SAndroid Build Coastguard Worker
3469*8975f5c5SAndroid Build Coastguard Worker        extension_defs += [comment] + eps.defs
3470*8975f5c5SAndroid Build Coastguard Worker        extension_decls += [comment] + eps.decls
3471*8975f5c5SAndroid Build Coastguard Worker
3472*8975f5c5SAndroid Build Coastguard Worker        # Avoid writing out entry points defined by a prior extension.
3473*8975f5c5SAndroid Build Coastguard Worker        for dupe in xml.ext_dupes[extension_name]:
3474*8975f5c5SAndroid Build Coastguard Worker            msg = "// {} is already defined.\n".format(strip_api_prefix(dupe))
3475*8975f5c5SAndroid Build Coastguard Worker            extension_defs.append(msg)
3476*8975f5c5SAndroid Build Coastguard Worker
3477*8975f5c5SAndroid Build Coastguard Worker        ext_validation_protos += [comment] + eps.validation_protos
3478*8975f5c5SAndroid Build Coastguard Worker        ext_capture_protos += [comment] + eps.capture_protos
3479*8975f5c5SAndroid Build Coastguard Worker        ext_capture_methods += eps.capture_methods
3480*8975f5c5SAndroid Build Coastguard Worker        ext_capture_pointer_funcs += eps.capture_pointer_funcs
3481*8975f5c5SAndroid Build Coastguard Worker
3482*8975f5c5SAndroid Build Coastguard Worker        for proto, function in zip(eps.context_private_call_protos,
3483*8975f5c5SAndroid Build Coastguard Worker                                   eps.context_private_call_functions):
3484*8975f5c5SAndroid Build Coastguard Worker            if function not in context_private_call_functions:
3485*8975f5c5SAndroid Build Coastguard Worker                context_private_call_protos.append(proto)
3486*8975f5c5SAndroid Build Coastguard Worker        context_private_call_functions.update(eps.context_private_call_functions)
3487*8975f5c5SAndroid Build Coastguard Worker
3488*8975f5c5SAndroid Build Coastguard Worker        libgles_ep_defs += [comment] + eps.export_defs
3489*8975f5c5SAndroid Build Coastguard Worker        libgles_ep_exports += get_exports(ext_cmd_names)
3490*8975f5c5SAndroid Build Coastguard Worker
3491*8975f5c5SAndroid Build Coastguard Worker        if (extension_name in registry_xml.gles1_extensions and
3492*8975f5c5SAndroid Build Coastguard Worker                extension_name not in GLES1_NO_CONTEXT_DECL_EXTENSIONS):
3493*8975f5c5SAndroid Build Coastguard Worker            glesdecls['exts']['GLES1 Extensions'][extension_name] = get_decls(
3494*8975f5c5SAndroid Build Coastguard Worker                apis.GLES, CONTEXT_DECL_FORMAT, xml.all_commands, ext_cmd_names,
3495*8975f5c5SAndroid Build Coastguard Worker                all_commands_no_suffix, GLEntryPoints.get_packed_enums())
3496*8975f5c5SAndroid Build Coastguard Worker        if extension_name in registry_xml.gles_extensions:
3497*8975f5c5SAndroid Build Coastguard Worker            glesdecls['exts']['GLES2+ Extensions'][extension_name] = get_decls(
3498*8975f5c5SAndroid Build Coastguard Worker                apis.GLES, CONTEXT_DECL_FORMAT, xml.all_commands, ext_cmd_names,
3499*8975f5c5SAndroid Build Coastguard Worker                all_commands_no_suffix, GLEntryPoints.get_packed_enums())
3500*8975f5c5SAndroid Build Coastguard Worker        if extension_name in registry_xml.angle_extensions:
3501*8975f5c5SAndroid Build Coastguard Worker            glesdecls['exts']['ANGLE Extensions'][extension_name] = get_decls(
3502*8975f5c5SAndroid Build Coastguard Worker                apis.GLES, CONTEXT_DECL_FORMAT, xml.all_commands, ext_cmd_names,
3503*8975f5c5SAndroid Build Coastguard Worker                all_commands_no_suffix, GLEntryPoints.get_packed_enums())
3504*8975f5c5SAndroid Build Coastguard Worker
3505*8975f5c5SAndroid Build Coastguard Worker    write_context_private_call_header(context_private_call_protos, "gl.xml and gl_angle_ext.xml",
3506*8975f5c5SAndroid Build Coastguard Worker                                      TEMPLATE_CONTEXT_PRIVATE_CALL_HEADER)
3507*8975f5c5SAndroid Build Coastguard Worker
3508*8975f5c5SAndroid Build Coastguard Worker    for name in extension_commands:
3509*8975f5c5SAndroid Build Coastguard Worker        all_commands_with_suffix.append(name)
3510*8975f5c5SAndroid Build Coastguard Worker        all_commands_no_suffix.append(strip_suffix(apis.GLES, name))
3511*8975f5c5SAndroid Build Coastguard Worker
3512*8975f5c5SAndroid Build Coastguard Worker    # OpenCL
3513*8975f5c5SAndroid Build Coastguard Worker    clxml = registry_xml.RegistryXML('cl.xml')
3514*8975f5c5SAndroid Build Coastguard Worker
3515*8975f5c5SAndroid Build Coastguard Worker    cl_validation_protos = []
3516*8975f5c5SAndroid Build Coastguard Worker    cl_decls = ["namespace cl\n{"]
3517*8975f5c5SAndroid Build Coastguard Worker    cl_defs = ["namespace cl\n{"]
3518*8975f5c5SAndroid Build Coastguard Worker    libcl_ep_defs = []
3519*8975f5c5SAndroid Build Coastguard Worker    libcl_windows_def_exports = []
3520*8975f5c5SAndroid Build Coastguard Worker    cl_commands = []
3521*8975f5c5SAndroid Build Coastguard Worker
3522*8975f5c5SAndroid Build Coastguard Worker    for major_version, minor_version in registry_xml.CL_VERSIONS:
3523*8975f5c5SAndroid Build Coastguard Worker        version = "%d_%d" % (major_version, minor_version)
3524*8975f5c5SAndroid Build Coastguard Worker        annotation = "CL_%s" % version
3525*8975f5c5SAndroid Build Coastguard Worker        name_prefix = "CL_VERSION_"
3526*8975f5c5SAndroid Build Coastguard Worker
3527*8975f5c5SAndroid Build Coastguard Worker        comment = version.replace("_", ".")
3528*8975f5c5SAndroid Build Coastguard Worker        feature_name = "%s%s" % (name_prefix, version)
3529*8975f5c5SAndroid Build Coastguard Worker
3530*8975f5c5SAndroid Build Coastguard Worker        clxml.AddCommands(feature_name, version)
3531*8975f5c5SAndroid Build Coastguard Worker
3532*8975f5c5SAndroid Build Coastguard Worker        cl_version_commands = clxml.commands[version]
3533*8975f5c5SAndroid Build Coastguard Worker        cl_commands += cl_version_commands
3534*8975f5c5SAndroid Build Coastguard Worker
3535*8975f5c5SAndroid Build Coastguard Worker        # Spec revs may have no new commands.
3536*8975f5c5SAndroid Build Coastguard Worker        if not cl_version_commands:
3537*8975f5c5SAndroid Build Coastguard Worker            continue
3538*8975f5c5SAndroid Build Coastguard Worker
3539*8975f5c5SAndroid Build Coastguard Worker        eps = CLEntryPoints(clxml, cl_version_commands)
3540*8975f5c5SAndroid Build Coastguard Worker
3541*8975f5c5SAndroid Build Coastguard Worker        comment = "\n// CL %d.%d" % (major_version, minor_version)
3542*8975f5c5SAndroid Build Coastguard Worker        win_def_comment = "\n    ; CL %d.%d" % (major_version, minor_version)
3543*8975f5c5SAndroid Build Coastguard Worker
3544*8975f5c5SAndroid Build Coastguard Worker        cl_decls += [comment] + eps.decls
3545*8975f5c5SAndroid Build Coastguard Worker        cl_defs += [comment] + eps.defs
3546*8975f5c5SAndroid Build Coastguard Worker        libcl_ep_defs += [comment] + eps.export_defs
3547*8975f5c5SAndroid Build Coastguard Worker        cl_validation_protos += [comment] + eps.validation_protos
3548*8975f5c5SAndroid Build Coastguard Worker        libcl_windows_def_exports += [win_def_comment] + get_exports(clxml.commands[version])
3549*8975f5c5SAndroid Build Coastguard Worker
3550*8975f5c5SAndroid Build Coastguard Worker    clxml.AddExtensionCommands(registry_xml.supported_cl_extensions, ['cl'])
3551*8975f5c5SAndroid Build Coastguard Worker    for extension_name, ext_cmd_names in sorted(clxml.ext_data.items()):
3552*8975f5c5SAndroid Build Coastguard Worker
3553*8975f5c5SAndroid Build Coastguard Worker        # Extensions may have no new commands.
3554*8975f5c5SAndroid Build Coastguard Worker        if not ext_cmd_names:
3555*8975f5c5SAndroid Build Coastguard Worker            continue
3556*8975f5c5SAndroid Build Coastguard Worker
3557*8975f5c5SAndroid Build Coastguard Worker        # Detect and filter duplicate extensions.
3558*8975f5c5SAndroid Build Coastguard Worker        eps = CLEntryPoints(clxml, ext_cmd_names)
3559*8975f5c5SAndroid Build Coastguard Worker
3560*8975f5c5SAndroid Build Coastguard Worker        comment = "\n// %s" % extension_name
3561*8975f5c5SAndroid Build Coastguard Worker        win_def_comment = "\n    ; %s" % (extension_name)
3562*8975f5c5SAndroid Build Coastguard Worker
3563*8975f5c5SAndroid Build Coastguard Worker        cl_commands += ext_cmd_names
3564*8975f5c5SAndroid Build Coastguard Worker
3565*8975f5c5SAndroid Build Coastguard Worker        cl_decls += [comment] + eps.decls
3566*8975f5c5SAndroid Build Coastguard Worker        cl_defs += [comment] + eps.defs
3567*8975f5c5SAndroid Build Coastguard Worker        libcl_ep_defs += [comment] + eps.export_defs
3568*8975f5c5SAndroid Build Coastguard Worker        cl_validation_protos += [comment] + eps.validation_protos
3569*8975f5c5SAndroid Build Coastguard Worker        libcl_windows_def_exports += [win_def_comment] + get_exports(ext_cmd_names)
3570*8975f5c5SAndroid Build Coastguard Worker
3571*8975f5c5SAndroid Build Coastguard Worker        # Avoid writing out entry points defined by a prior extension.
3572*8975f5c5SAndroid Build Coastguard Worker        for dupe in clxml.ext_dupes[extension_name]:
3573*8975f5c5SAndroid Build Coastguard Worker            msg = "// %s is already defined.\n" % strip_api_prefix(dupe)
3574*8975f5c5SAndroid Build Coastguard Worker            cl_defs.append(msg)
3575*8975f5c5SAndroid Build Coastguard Worker
3576*8975f5c5SAndroid Build Coastguard Worker    cl_decls.append("}  // namespace cl")
3577*8975f5c5SAndroid Build Coastguard Worker    cl_defs.append("}  // namespace cl")
3578*8975f5c5SAndroid Build Coastguard Worker
3579*8975f5c5SAndroid Build Coastguard Worker    write_file("cl", "CL", TEMPLATE_ENTRY_POINT_HEADER, "\n".join(cl_decls), "h",
3580*8975f5c5SAndroid Build Coastguard Worker               LIBCL_HEADER_INCLUDES, "libGLESv2", "cl.xml")
3581*8975f5c5SAndroid Build Coastguard Worker    write_file("cl", "CL", TEMPLATE_ENTRY_POINT_SOURCE, "\n".join(cl_defs), "cpp",
3582*8975f5c5SAndroid Build Coastguard Worker               LIBCL_SOURCE_INCLUDES, "libGLESv2", "cl.xml")
3583*8975f5c5SAndroid Build Coastguard Worker    write_validation_header("CL", "CL", cl_validation_protos, "cl.xml",
3584*8975f5c5SAndroid Build Coastguard Worker                            TEMPLATE_CL_VALIDATION_HEADER)
3585*8975f5c5SAndroid Build Coastguard Worker    write_stubs_header("CL", "cl", "CL", "cl.xml", CL_STUBS_HEADER_PATH, clxml.all_commands,
3586*8975f5c5SAndroid Build Coastguard Worker                       cl_commands, CLEntryPoints.get_packed_enums(), CL_PACKED_TYPES)
3587*8975f5c5SAndroid Build Coastguard Worker
3588*8975f5c5SAndroid Build Coastguard Worker    # EGL
3589*8975f5c5SAndroid Build Coastguard Worker    eglxml = registry_xml.RegistryXML('egl.xml', 'egl_angle_ext.xml')
3590*8975f5c5SAndroid Build Coastguard Worker
3591*8975f5c5SAndroid Build Coastguard Worker    egl_validation_protos = []
3592*8975f5c5SAndroid Build Coastguard Worker    egl_context_lock_protos = []
3593*8975f5c5SAndroid Build Coastguard Worker    egl_decls = ["extern \"C\" {"]
3594*8975f5c5SAndroid Build Coastguard Worker    egl_defs = ["extern \"C\" {"]
3595*8975f5c5SAndroid Build Coastguard Worker    libegl_ep_defs = []
3596*8975f5c5SAndroid Build Coastguard Worker    libegl_windows_def_exports = []
3597*8975f5c5SAndroid Build Coastguard Worker    egl_commands = []
3598*8975f5c5SAndroid Build Coastguard Worker    egl_capture_protos = []
3599*8975f5c5SAndroid Build Coastguard Worker    egl_capture_methods = []
3600*8975f5c5SAndroid Build Coastguard Worker
3601*8975f5c5SAndroid Build Coastguard Worker    for major_version, minor_version in registry_xml.EGL_VERSIONS:
3602*8975f5c5SAndroid Build Coastguard Worker        version = "%d_%d" % (major_version, minor_version)
3603*8975f5c5SAndroid Build Coastguard Worker        annotation = "EGL_%s" % version
3604*8975f5c5SAndroid Build Coastguard Worker        name_prefix = "EGL_VERSION_"
3605*8975f5c5SAndroid Build Coastguard Worker
3606*8975f5c5SAndroid Build Coastguard Worker        comment = version.replace("_", ".")
3607*8975f5c5SAndroid Build Coastguard Worker        feature_name = "%s%s" % (name_prefix, version)
3608*8975f5c5SAndroid Build Coastguard Worker
3609*8975f5c5SAndroid Build Coastguard Worker        eglxml.AddCommands(feature_name, version)
3610*8975f5c5SAndroid Build Coastguard Worker
3611*8975f5c5SAndroid Build Coastguard Worker        egl_version_commands = eglxml.commands[version]
3612*8975f5c5SAndroid Build Coastguard Worker        egl_commands += egl_version_commands
3613*8975f5c5SAndroid Build Coastguard Worker
3614*8975f5c5SAndroid Build Coastguard Worker        # Spec revs may have no new commands.
3615*8975f5c5SAndroid Build Coastguard Worker        if not egl_version_commands:
3616*8975f5c5SAndroid Build Coastguard Worker            continue
3617*8975f5c5SAndroid Build Coastguard Worker
3618*8975f5c5SAndroid Build Coastguard Worker        eps = EGLEntryPoints(eglxml, egl_version_commands)
3619*8975f5c5SAndroid Build Coastguard Worker
3620*8975f5c5SAndroid Build Coastguard Worker        comment = "\n// EGL %d.%d" % (major_version, minor_version)
3621*8975f5c5SAndroid Build Coastguard Worker        win_def_comment = "\n    ; EGL %d.%d" % (major_version, minor_version)
3622*8975f5c5SAndroid Build Coastguard Worker
3623*8975f5c5SAndroid Build Coastguard Worker        egl_decls += [comment] + eps.decls
3624*8975f5c5SAndroid Build Coastguard Worker        egl_defs += [comment] + eps.defs
3625*8975f5c5SAndroid Build Coastguard Worker        libegl_ep_defs += [comment] + eps.export_defs
3626*8975f5c5SAndroid Build Coastguard Worker        egl_validation_protos += [comment] + eps.validation_protos
3627*8975f5c5SAndroid Build Coastguard Worker        egl_context_lock_protos += [comment] + eps.context_lock_protos
3628*8975f5c5SAndroid Build Coastguard Worker        libegl_windows_def_exports += [win_def_comment] + get_exports(eglxml.commands[version])
3629*8975f5c5SAndroid Build Coastguard Worker        egl_capture_protos += eps.capture_protos
3630*8975f5c5SAndroid Build Coastguard Worker        egl_capture_methods += eps.capture_methods
3631*8975f5c5SAndroid Build Coastguard Worker
3632*8975f5c5SAndroid Build Coastguard Worker    egl_decls.append("} // extern \"C\"")
3633*8975f5c5SAndroid Build Coastguard Worker    egl_defs.append("} // extern \"C\"")
3634*8975f5c5SAndroid Build Coastguard Worker
3635*8975f5c5SAndroid Build Coastguard Worker    write_file("egl", "EGL", TEMPLATE_ENTRY_POINT_HEADER, "\n".join(egl_decls), "h",
3636*8975f5c5SAndroid Build Coastguard Worker               EGL_HEADER_INCLUDES, "libGLESv2", "egl.xml")
3637*8975f5c5SAndroid Build Coastguard Worker    write_file("egl", "EGL", TEMPLATE_ENTRY_POINT_SOURCE, "\n".join(egl_defs), "cpp",
3638*8975f5c5SAndroid Build Coastguard Worker               EGL_SOURCE_INCLUDES, "libGLESv2", "egl.xml")
3639*8975f5c5SAndroid Build Coastguard Worker    write_stubs_header("EGL", "egl", "EGL", "egl.xml", EGL_STUBS_HEADER_PATH, eglxml.all_commands,
3640*8975f5c5SAndroid Build Coastguard Worker                       egl_commands, EGLEntryPoints.get_packed_enums(), EGL_PACKED_TYPES)
3641*8975f5c5SAndroid Build Coastguard Worker
3642*8975f5c5SAndroid Build Coastguard Worker    eglxml.AddExtensionCommands(registry_xml.supported_egl_extensions, ['egl'])
3643*8975f5c5SAndroid Build Coastguard Worker    egl_ext_decls = ["extern \"C\" {"]
3644*8975f5c5SAndroid Build Coastguard Worker    egl_ext_defs = ["extern \"C\" {"]
3645*8975f5c5SAndroid Build Coastguard Worker    egl_ext_commands = []
3646*8975f5c5SAndroid Build Coastguard Worker
3647*8975f5c5SAndroid Build Coastguard Worker    for extension_name, ext_cmd_names in sorted(eglxml.ext_data.items()):
3648*8975f5c5SAndroid Build Coastguard Worker
3649*8975f5c5SAndroid Build Coastguard Worker        # Extensions may have no new commands.
3650*8975f5c5SAndroid Build Coastguard Worker        if not ext_cmd_names:
3651*8975f5c5SAndroid Build Coastguard Worker            continue
3652*8975f5c5SAndroid Build Coastguard Worker
3653*8975f5c5SAndroid Build Coastguard Worker        # Detect and filter duplicate extensions.
3654*8975f5c5SAndroid Build Coastguard Worker        eps = EGLEntryPoints(eglxml, ext_cmd_names)
3655*8975f5c5SAndroid Build Coastguard Worker
3656*8975f5c5SAndroid Build Coastguard Worker        comment = "\n// %s" % extension_name
3657*8975f5c5SAndroid Build Coastguard Worker        win_def_comment = "\n    ; %s" % (extension_name)
3658*8975f5c5SAndroid Build Coastguard Worker
3659*8975f5c5SAndroid Build Coastguard Worker        egl_ext_commands += ext_cmd_names
3660*8975f5c5SAndroid Build Coastguard Worker
3661*8975f5c5SAndroid Build Coastguard Worker        egl_ext_decls += [comment] + eps.decls
3662*8975f5c5SAndroid Build Coastguard Worker        egl_ext_defs += [comment] + eps.defs
3663*8975f5c5SAndroid Build Coastguard Worker        libegl_ep_defs += [comment] + eps.export_defs
3664*8975f5c5SAndroid Build Coastguard Worker        egl_validation_protos += [comment] + eps.validation_protos
3665*8975f5c5SAndroid Build Coastguard Worker        egl_context_lock_protos += [comment] + eps.context_lock_protos
3666*8975f5c5SAndroid Build Coastguard Worker        libegl_windows_def_exports += [win_def_comment] + get_exports(ext_cmd_names)
3667*8975f5c5SAndroid Build Coastguard Worker        egl_capture_protos += eps.capture_protos
3668*8975f5c5SAndroid Build Coastguard Worker        egl_capture_methods += eps.capture_methods
3669*8975f5c5SAndroid Build Coastguard Worker
3670*8975f5c5SAndroid Build Coastguard Worker        # Avoid writing out entry points defined by a prior extension.
3671*8975f5c5SAndroid Build Coastguard Worker        for dupe in eglxml.ext_dupes[extension_name]:
3672*8975f5c5SAndroid Build Coastguard Worker            msg = "// %s is already defined.\n" % strip_api_prefix(dupe)
3673*8975f5c5SAndroid Build Coastguard Worker            egl_ext_defs.append(msg)
3674*8975f5c5SAndroid Build Coastguard Worker
3675*8975f5c5SAndroid Build Coastguard Worker    egl_ext_decls.append("} // extern \"C\"")
3676*8975f5c5SAndroid Build Coastguard Worker    egl_ext_defs.append("} // extern \"C\"")
3677*8975f5c5SAndroid Build Coastguard Worker
3678*8975f5c5SAndroid Build Coastguard Worker    write_file("egl_ext", "EGL Extension", TEMPLATE_ENTRY_POINT_HEADER, "\n".join(egl_ext_decls),
3679*8975f5c5SAndroid Build Coastguard Worker               "h", EGL_EXT_HEADER_INCLUDES, "libGLESv2", "egl.xml and egl_angle_ext.xml")
3680*8975f5c5SAndroid Build Coastguard Worker    write_file("egl_ext", "EGL Extension", TEMPLATE_ENTRY_POINT_SOURCE, "\n".join(egl_ext_defs),
3681*8975f5c5SAndroid Build Coastguard Worker               "cpp", EGL_EXT_SOURCE_INCLUDES, "libGLESv2", "egl.xml and egl_angle_ext.xml")
3682*8975f5c5SAndroid Build Coastguard Worker    write_validation_header("EGL", "EGL", egl_validation_protos, "egl.xml and egl_angle_ext.xml",
3683*8975f5c5SAndroid Build Coastguard Worker                            TEMPLATE_EGL_VALIDATION_HEADER)
3684*8975f5c5SAndroid Build Coastguard Worker    write_context_lock_header("EGL", "EGL", egl_context_lock_protos,
3685*8975f5c5SAndroid Build Coastguard Worker                              "egl.xml and egl_angle_ext.xml", TEMPLATE_EGL_CONTEXT_LOCK_HEADER)
3686*8975f5c5SAndroid Build Coastguard Worker    write_stubs_header("EGL", "egl_ext", "EXT extension", "egl.xml and egl_angle_ext.xml",
3687*8975f5c5SAndroid Build Coastguard Worker                       EGL_EXT_STUBS_HEADER_PATH, eglxml.all_commands, egl_ext_commands,
3688*8975f5c5SAndroid Build Coastguard Worker                       EGLEntryPoints.get_packed_enums(), EGL_PACKED_TYPES)
3689*8975f5c5SAndroid Build Coastguard Worker
3690*8975f5c5SAndroid Build Coastguard Worker    write_capture_header(apis.EGL, 'egl', 'EGL', egl_capture_protos, [])
3691*8975f5c5SAndroid Build Coastguard Worker    write_capture_source(apis.EGL, 'egl', 'EGL', 'all', egl_capture_methods)
3692*8975f5c5SAndroid Build Coastguard Worker
3693*8975f5c5SAndroid Build Coastguard Worker    extension_decls.append("} // extern \"C\"")
3694*8975f5c5SAndroid Build Coastguard Worker    extension_defs.append("} // extern \"C\"")
3695*8975f5c5SAndroid Build Coastguard Worker
3696*8975f5c5SAndroid Build Coastguard Worker    write_file("gles_ext", "GLES extension", TEMPLATE_ENTRY_POINT_HEADER,
3697*8975f5c5SAndroid Build Coastguard Worker               "\n".join([item for item in extension_decls]), "h", GLES_EXT_HEADER_INCLUDES,
3698*8975f5c5SAndroid Build Coastguard Worker               "libGLESv2", "gl.xml and gl_angle_ext.xml")
3699*8975f5c5SAndroid Build Coastguard Worker    write_file("gles_ext", "GLES extension", TEMPLATE_ENTRY_POINT_SOURCE,
3700*8975f5c5SAndroid Build Coastguard Worker               "\n".join([item for item in extension_defs]), "cpp", GLES_EXT_SOURCE_INCLUDES,
3701*8975f5c5SAndroid Build Coastguard Worker               "libGLESv2", "gl.xml and gl_angle_ext.xml")
3702*8975f5c5SAndroid Build Coastguard Worker
3703*8975f5c5SAndroid Build Coastguard Worker    write_gl_validation_header("ESEXT", "ES extension", ext_validation_protos,
3704*8975f5c5SAndroid Build Coastguard Worker                               "gl.xml and gl_angle_ext.xml")
3705*8975f5c5SAndroid Build Coastguard Worker    write_capture_header(apis.GLES, "gles_ext", "extension", ext_capture_protos,
3706*8975f5c5SAndroid Build Coastguard Worker                         ext_capture_pointer_funcs)
3707*8975f5c5SAndroid Build Coastguard Worker    write_capture_source(apis.GLES, "gles_ext", "ESEXT", "extension", ext_capture_methods)
3708*8975f5c5SAndroid Build Coastguard Worker
3709*8975f5c5SAndroid Build Coastguard Worker    write_context_api_decls(glesdecls, "gles")
3710*8975f5c5SAndroid Build Coastguard Worker
3711*8975f5c5SAndroid Build Coastguard Worker    # Entry point enum
3712*8975f5c5SAndroid Build Coastguard Worker    unsorted_enums = clxml.GetEnums() + eglxml.GetEnums() + xml.GetEnums()
3713*8975f5c5SAndroid Build Coastguard Worker    all_enums = [('Invalid', 'Invalid')] + sorted(list(set(unsorted_enums)))
3714*8975f5c5SAndroid Build Coastguard Worker
3715*8975f5c5SAndroid Build Coastguard Worker    entry_points_enum_header = TEMPLATE_ENTRY_POINTS_ENUM_HEADER.format(
3716*8975f5c5SAndroid Build Coastguard Worker        script_name=os.path.basename(sys.argv[0]),
3717*8975f5c5SAndroid Build Coastguard Worker        data_source_name="gl.xml and gl_angle_ext.xml",
3718*8975f5c5SAndroid Build Coastguard Worker        lib="GL/GLES",
3719*8975f5c5SAndroid Build Coastguard Worker        entry_points_list=",\n".join(["    " + enum for (enum, _) in all_enums]))
3720*8975f5c5SAndroid Build Coastguard Worker
3721*8975f5c5SAndroid Build Coastguard Worker    entry_points_enum_header_path = path_to("common", "entry_points_enum_autogen.h")
3722*8975f5c5SAndroid Build Coastguard Worker    with open(entry_points_enum_header_path, "w") as out:
3723*8975f5c5SAndroid Build Coastguard Worker        out.write(entry_points_enum_header)
3724*8975f5c5SAndroid Build Coastguard Worker        out.close()
3725*8975f5c5SAndroid Build Coastguard Worker
3726*8975f5c5SAndroid Build Coastguard Worker    entry_points_cases = [
3727*8975f5c5SAndroid Build Coastguard Worker        TEMPLATE_ENTRY_POINTS_NAME_CASE.format(enum=enum, cmd=cmd) for (enum, cmd) in all_enums
3728*8975f5c5SAndroid Build Coastguard Worker    ]
3729*8975f5c5SAndroid Build Coastguard Worker    entry_points_enum_source = TEMPLATE_ENTRY_POINTS_ENUM_SOURCE.format(
3730*8975f5c5SAndroid Build Coastguard Worker        script_name=os.path.basename(sys.argv[0]),
3731*8975f5c5SAndroid Build Coastguard Worker        data_source_name="gl.xml and gl_angle_ext.xml",
3732*8975f5c5SAndroid Build Coastguard Worker        lib="GL/GLES",
3733*8975f5c5SAndroid Build Coastguard Worker        entry_points_name_cases="\n".join(entry_points_cases))
3734*8975f5c5SAndroid Build Coastguard Worker
3735*8975f5c5SAndroid Build Coastguard Worker    entry_points_enum_source_path = path_to("common", "entry_points_enum_autogen.cpp")
3736*8975f5c5SAndroid Build Coastguard Worker    with open(entry_points_enum_source_path, "w") as out:
3737*8975f5c5SAndroid Build Coastguard Worker        out.write(entry_points_enum_source)
3738*8975f5c5SAndroid Build Coastguard Worker        out.close()
3739*8975f5c5SAndroid Build Coastguard Worker
3740*8975f5c5SAndroid Build Coastguard Worker    write_export_files("\n".join([item for item in libgles_ep_defs]), LIBGLESV2_EXPORT_INCLUDES,
3741*8975f5c5SAndroid Build Coastguard Worker                       "gl.xml and gl_angle_ext.xml", "libGLESv2", "OpenGL ES")
3742*8975f5c5SAndroid Build Coastguard Worker    write_export_files("\n".join([item for item in libegl_ep_defs]),
3743*8975f5c5SAndroid Build Coastguard Worker                       LIBEGL_EXPORT_INCLUDES_AND_PREAMBLE, "egl.xml and egl_angle_ext.xml",
3744*8975f5c5SAndroid Build Coastguard Worker                       "libEGL", "EGL")
3745*8975f5c5SAndroid Build Coastguard Worker    write_export_files("\n".join([item for item in libcl_ep_defs]), LIBCL_EXPORT_INCLUDES,
3746*8975f5c5SAndroid Build Coastguard Worker                       "cl.xml", "libOpenCL", "CL")
3747*8975f5c5SAndroid Build Coastguard Worker
3748*8975f5c5SAndroid Build Coastguard Worker    libgles_ep_exports += get_egl_exports()
3749*8975f5c5SAndroid Build Coastguard Worker
3750*8975f5c5SAndroid Build Coastguard Worker    everything = "Khronos and ANGLE XML files"
3751*8975f5c5SAndroid Build Coastguard Worker
3752*8975f5c5SAndroid Build Coastguard Worker    for lib in [
3753*8975f5c5SAndroid Build Coastguard Worker            "libGLESv2" + suffix
3754*8975f5c5SAndroid Build Coastguard Worker            for suffix in ["", "_no_capture", "_with_capture", "_vulkan_secondaries"]
3755*8975f5c5SAndroid Build Coastguard Worker    ]:
3756*8975f5c5SAndroid Build Coastguard Worker        write_windows_def_file(everything, lib, lib, "libGLESv2", libgles_ep_exports)
3757*8975f5c5SAndroid Build Coastguard Worker
3758*8975f5c5SAndroid Build Coastguard Worker    for lib in ["libEGL" + suffix for suffix in ["", "_vulkan_secondaries"]]:
3759*8975f5c5SAndroid Build Coastguard Worker        write_windows_def_file("egl.xml and egl_angle_ext.xml", lib, lib, "libEGL",
3760*8975f5c5SAndroid Build Coastguard Worker                               libegl_windows_def_exports)
3761*8975f5c5SAndroid Build Coastguard Worker
3762*8975f5c5SAndroid Build Coastguard Worker    all_gles_param_types = sorted(GLEntryPoints.all_param_types)
3763*8975f5c5SAndroid Build Coastguard Worker    all_egl_param_types = sorted(EGLEntryPoints.all_param_types)
3764*8975f5c5SAndroid Build Coastguard Worker    resource_id_types = get_resource_id_types(GLEntryPoints.all_param_types)
3765*8975f5c5SAndroid Build Coastguard Worker    # Get a sorted list of param types without duplicates
3766*8975f5c5SAndroid Build Coastguard Worker    all_param_types = sorted(list(set(all_gles_param_types + all_egl_param_types)))
3767*8975f5c5SAndroid Build Coastguard Worker    write_capture_helper_header(all_param_types)
3768*8975f5c5SAndroid Build Coastguard Worker    write_capture_helper_source(all_param_types)
3769*8975f5c5SAndroid Build Coastguard Worker    write_capture_replay_source(xml.all_commands, all_commands_with_suffix,
3770*8975f5c5SAndroid Build Coastguard Worker                                GLEntryPoints.get_packed_enums(), eglxml.all_commands,
3771*8975f5c5SAndroid Build Coastguard Worker                                egl_commands, EGLEntryPoints.get_packed_enums(), resource_id_types)
3772*8975f5c5SAndroid Build Coastguard Worker
3773*8975f5c5SAndroid Build Coastguard Worker
3774*8975f5c5SAndroid Build Coastguard Workerif __name__ == '__main__':
3775*8975f5c5SAndroid Build Coastguard Worker    sys.exit(main())
3776