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 ¶ms = 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 ¶m); 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 ¶m) 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