1*8975f5c5SAndroid Build Coastguard Worker#!/usr/bin/python3 2*8975f5c5SAndroid Build Coastguard Worker# 3*8975f5c5SAndroid Build Coastguard Worker# Copyright 2018 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_loader.py: 8*8975f5c5SAndroid Build Coastguard Worker# Generates dynamic loaders for various binding interfaces. 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 registry_xml 13*8975f5c5SAndroid Build Coastguard Worker 14*8975f5c5SAndroid Build Coastguard Worker 15*8975f5c5SAndroid Build Coastguard WorkerDEFAULT_INTERNAL_PREFIX = "l_" 16*8975f5c5SAndroid Build Coastguard Worker 17*8975f5c5SAndroid Build Coastguard Worker 18*8975f5c5SAndroid Build Coastguard Workerdef write_header(data_source_name, 19*8975f5c5SAndroid Build Coastguard Worker all_cmds, 20*8975f5c5SAndroid Build Coastguard Worker api, 21*8975f5c5SAndroid Build Coastguard Worker preamble, 22*8975f5c5SAndroid Build Coastguard Worker path, 23*8975f5c5SAndroid Build Coastguard Worker lib, 24*8975f5c5SAndroid Build Coastguard Worker load_fn_name, 25*8975f5c5SAndroid Build Coastguard Worker ns="", 26*8975f5c5SAndroid Build Coastguard Worker prefix=None, 27*8975f5c5SAndroid Build Coastguard Worker export="", 28*8975f5c5SAndroid Build Coastguard Worker internal_prefix=DEFAULT_INTERNAL_PREFIX, 29*8975f5c5SAndroid Build Coastguard Worker file_prefix=""): 30*8975f5c5SAndroid Build Coastguard Worker file_name = "%s%s_loader_autogen.h" % (file_prefix, api) 31*8975f5c5SAndroid Build Coastguard Worker header_path = registry_xml.path_to(path, file_name) 32*8975f5c5SAndroid Build Coastguard Worker 33*8975f5c5SAndroid Build Coastguard Worker def pre(cmd): 34*8975f5c5SAndroid Build Coastguard Worker if prefix == None: 35*8975f5c5SAndroid Build Coastguard Worker return cmd 36*8975f5c5SAndroid Build Coastguard Worker return prefix + cmd[len(api):] 37*8975f5c5SAndroid Build Coastguard Worker 38*8975f5c5SAndroid Build Coastguard Worker with open(header_path, "w") as out: 39*8975f5c5SAndroid Build Coastguard Worker defines = [ 40*8975f5c5SAndroid Build Coastguard Worker "#define %s%s %s%s%s" % (ns, pre(cmd), internal_prefix, ns, pre(cmd)) 41*8975f5c5SAndroid Build Coastguard Worker for cmd in all_cmds 42*8975f5c5SAndroid Build Coastguard Worker ] 43*8975f5c5SAndroid Build Coastguard Worker var_protos = [ 44*8975f5c5SAndroid Build Coastguard Worker "%sextern PFN%sPROC %s%s%s;" % (export, cmd.upper(), internal_prefix, ns, pre(cmd)) 45*8975f5c5SAndroid Build Coastguard Worker for cmd in all_cmds 46*8975f5c5SAndroid Build Coastguard Worker ] 47*8975f5c5SAndroid Build Coastguard Worker loader_header = template_loader_h.format( 48*8975f5c5SAndroid Build Coastguard Worker script_name=os.path.basename(sys.argv[0]), 49*8975f5c5SAndroid Build Coastguard Worker data_source_name=data_source_name, 50*8975f5c5SAndroid Build Coastguard Worker defines="\n".join(defines), 51*8975f5c5SAndroid Build Coastguard Worker function_pointers="\n".join(var_protos), 52*8975f5c5SAndroid Build Coastguard Worker api_upper=api.upper(), 53*8975f5c5SAndroid Build Coastguard Worker api_lower=api, 54*8975f5c5SAndroid Build Coastguard Worker preamble=preamble, 55*8975f5c5SAndroid Build Coastguard Worker export=export, 56*8975f5c5SAndroid Build Coastguard Worker lib=lib.upper(), 57*8975f5c5SAndroid Build Coastguard Worker load_fn_name=load_fn_name, 58*8975f5c5SAndroid Build Coastguard Worker file_prefix=file_prefix) 59*8975f5c5SAndroid Build Coastguard Worker 60*8975f5c5SAndroid Build Coastguard Worker out.write(loader_header) 61*8975f5c5SAndroid Build Coastguard Worker out.close() 62*8975f5c5SAndroid Build Coastguard Worker 63*8975f5c5SAndroid Build Coastguard Worker 64*8975f5c5SAndroid Build Coastguard Workerdef write_source(data_source_name, 65*8975f5c5SAndroid Build Coastguard Worker all_cmds, 66*8975f5c5SAndroid Build Coastguard Worker api, 67*8975f5c5SAndroid Build Coastguard Worker path, 68*8975f5c5SAndroid Build Coastguard Worker load_fn_name, 69*8975f5c5SAndroid Build Coastguard Worker ns="", 70*8975f5c5SAndroid Build Coastguard Worker prefix=None, 71*8975f5c5SAndroid Build Coastguard Worker export="", 72*8975f5c5SAndroid Build Coastguard Worker internal_prefix=DEFAULT_INTERNAL_PREFIX, 73*8975f5c5SAndroid Build Coastguard Worker file_prefix=""): 74*8975f5c5SAndroid Build Coastguard Worker file_name = "%s%s_loader_autogen.cpp" % (file_prefix, api) 75*8975f5c5SAndroid Build Coastguard Worker source_path = registry_xml.path_to(path, file_name) 76*8975f5c5SAndroid Build Coastguard Worker 77*8975f5c5SAndroid Build Coastguard Worker def pre(cmd): 78*8975f5c5SAndroid Build Coastguard Worker if prefix == None: 79*8975f5c5SAndroid Build Coastguard Worker return cmd 80*8975f5c5SAndroid Build Coastguard Worker return prefix + cmd[len(api):] 81*8975f5c5SAndroid Build Coastguard Worker 82*8975f5c5SAndroid Build Coastguard Worker with open(source_path, "w") as out: 83*8975f5c5SAndroid Build Coastguard Worker var_defs = [ 84*8975f5c5SAndroid Build Coastguard Worker "%sPFN%sPROC %s%s%s;" % (export, cmd.upper(), internal_prefix, ns, pre(cmd)) 85*8975f5c5SAndroid Build Coastguard Worker for cmd in all_cmds 86*8975f5c5SAndroid Build Coastguard Worker ] 87*8975f5c5SAndroid Build Coastguard Worker 88*8975f5c5SAndroid Build Coastguard Worker setter = " %s%s%s = reinterpret_cast<PFN%sPROC>(loadProc(\"%s\"));" 89*8975f5c5SAndroid Build Coastguard Worker setters = [ 90*8975f5c5SAndroid Build Coastguard Worker setter % (internal_prefix, ns, pre(cmd), cmd.upper(), pre(cmd)) for cmd in all_cmds 91*8975f5c5SAndroid Build Coastguard Worker ] 92*8975f5c5SAndroid Build Coastguard Worker 93*8975f5c5SAndroid Build Coastguard Worker loader_source = template_loader_cpp.format( 94*8975f5c5SAndroid Build Coastguard Worker script_name=os.path.basename(sys.argv[0]), 95*8975f5c5SAndroid Build Coastguard Worker data_source_name=data_source_name, 96*8975f5c5SAndroid Build Coastguard Worker function_pointers="\n".join(var_defs), 97*8975f5c5SAndroid Build Coastguard Worker set_pointers="\n".join(setters), 98*8975f5c5SAndroid Build Coastguard Worker api_upper=api.upper(), 99*8975f5c5SAndroid Build Coastguard Worker api_lower=api, 100*8975f5c5SAndroid Build Coastguard Worker load_fn_name=load_fn_name, 101*8975f5c5SAndroid Build Coastguard Worker file_prefix=file_prefix) 102*8975f5c5SAndroid Build Coastguard Worker 103*8975f5c5SAndroid Build Coastguard Worker out.write(loader_source) 104*8975f5c5SAndroid Build Coastguard Worker out.close() 105*8975f5c5SAndroid Build Coastguard Worker 106*8975f5c5SAndroid Build Coastguard Worker 107*8975f5c5SAndroid Build Coastguard Workerdef gen_libegl_loader(): 108*8975f5c5SAndroid Build Coastguard Worker 109*8975f5c5SAndroid Build Coastguard Worker data_source_name = "egl.xml and egl_angle_ext.xml" 110*8975f5c5SAndroid Build Coastguard Worker xml = registry_xml.RegistryXML("egl.xml", "egl_angle_ext.xml") 111*8975f5c5SAndroid Build Coastguard Worker 112*8975f5c5SAndroid Build Coastguard Worker for major_version, minor_version in [[1, 0], [1, 1], [1, 2], [1, 3], [1, 4], [1, 5]]: 113*8975f5c5SAndroid Build Coastguard Worker annotation = "{}_{}".format(major_version, minor_version) 114*8975f5c5SAndroid Build Coastguard Worker name_prefix = "EGL_VERSION_" 115*8975f5c5SAndroid Build Coastguard Worker 116*8975f5c5SAndroid Build Coastguard Worker feature_name = "{}{}".format(name_prefix, annotation) 117*8975f5c5SAndroid Build Coastguard Worker 118*8975f5c5SAndroid Build Coastguard Worker xml.AddCommands(feature_name, annotation) 119*8975f5c5SAndroid Build Coastguard Worker 120*8975f5c5SAndroid Build Coastguard Worker xml.AddExtensionCommands(registry_xml.supported_egl_extensions, ['egl']) 121*8975f5c5SAndroid Build Coastguard Worker 122*8975f5c5SAndroid Build Coastguard Worker all_cmds = xml.all_cmd_names.get_all_commands() 123*8975f5c5SAndroid Build Coastguard Worker 124*8975f5c5SAndroid Build Coastguard Worker path = os.path.join("..", "src", "libEGL") 125*8975f5c5SAndroid Build Coastguard Worker write_header( 126*8975f5c5SAndroid Build Coastguard Worker data_source_name, 127*8975f5c5SAndroid Build Coastguard Worker all_cmds, 128*8975f5c5SAndroid Build Coastguard Worker "egl", 129*8975f5c5SAndroid Build Coastguard Worker libegl_preamble, 130*8975f5c5SAndroid Build Coastguard Worker path, 131*8975f5c5SAndroid Build Coastguard Worker "LIBEGL", 132*8975f5c5SAndroid Build Coastguard Worker "LoadLibEGL_EGL", 133*8975f5c5SAndroid Build Coastguard Worker prefix="EGL_", 134*8975f5c5SAndroid Build Coastguard Worker export="ANGLE_NO_EXPORT ") 135*8975f5c5SAndroid Build Coastguard Worker write_source(data_source_name, all_cmds, "egl", path, "LoadLibEGL_EGL", prefix="EGL_") 136*8975f5c5SAndroid Build Coastguard Worker 137*8975f5c5SAndroid Build Coastguard Worker 138*8975f5c5SAndroid Build Coastguard Workerdef gen_gles_loader(gles_preamble, path, header_lib, export, internal_prefix, file_prefix, tag): 139*8975f5c5SAndroid Build Coastguard Worker 140*8975f5c5SAndroid Build Coastguard Worker data_source_name = "gl.xml and gl_angle_ext.xml" 141*8975f5c5SAndroid Build Coastguard Worker xml = registry_xml.RegistryXML("gl.xml", "gl_angle_ext.xml") 142*8975f5c5SAndroid Build Coastguard Worker 143*8975f5c5SAndroid Build Coastguard Worker # First run through the main GLES entry points. Since ES2+ is the primary use 144*8975f5c5SAndroid Build Coastguard Worker # case, we go through those first and then add ES1-only APIs at the end. 145*8975f5c5SAndroid Build Coastguard Worker for major_version, minor_version in [[2, 0], [3, 0], [3, 1], [3, 2], [1, 0]]: 146*8975f5c5SAndroid Build Coastguard Worker annotation = "{}_{}".format(major_version, minor_version) 147*8975f5c5SAndroid Build Coastguard Worker name_prefix = "GL_ES_VERSION_" 148*8975f5c5SAndroid Build Coastguard Worker 149*8975f5c5SAndroid Build Coastguard Worker is_gles1 = major_version == 1 150*8975f5c5SAndroid Build Coastguard Worker if is_gles1: 151*8975f5c5SAndroid Build Coastguard Worker name_prefix = "GL_VERSION_ES_CM_" 152*8975f5c5SAndroid Build Coastguard Worker 153*8975f5c5SAndroid Build Coastguard Worker feature_name = "{}{}".format(name_prefix, annotation) 154*8975f5c5SAndroid Build Coastguard Worker 155*8975f5c5SAndroid Build Coastguard Worker xml.AddCommands(feature_name, annotation) 156*8975f5c5SAndroid Build Coastguard Worker 157*8975f5c5SAndroid Build Coastguard Worker xml.AddExtensionCommands(registry_xml.supported_extensions, ['gles2', 'gles1']) 158*8975f5c5SAndroid Build Coastguard Worker 159*8975f5c5SAndroid Build Coastguard Worker all_cmds = xml.all_cmd_names.get_all_commands() 160*8975f5c5SAndroid Build Coastguard Worker 161*8975f5c5SAndroid Build Coastguard Worker # Ensure there are no duplicates 162*8975f5c5SAndroid Build Coastguard Worker assert (len(all_cmds) == len(set(all_cmds))), "Duplicate command names found" 163*8975f5c5SAndroid Build Coastguard Worker 164*8975f5c5SAndroid Build Coastguard Worker write_header( 165*8975f5c5SAndroid Build Coastguard Worker data_source_name, 166*8975f5c5SAndroid Build Coastguard Worker all_cmds, 167*8975f5c5SAndroid Build Coastguard Worker "gles", 168*8975f5c5SAndroid Build Coastguard Worker gles_preamble, 169*8975f5c5SAndroid Build Coastguard Worker path, 170*8975f5c5SAndroid Build Coastguard Worker header_lib, 171*8975f5c5SAndroid Build Coastguard Worker "Load%sGLES" % tag, 172*8975f5c5SAndroid Build Coastguard Worker export=export, 173*8975f5c5SAndroid Build Coastguard Worker internal_prefix=internal_prefix, 174*8975f5c5SAndroid Build Coastguard Worker file_prefix=file_prefix) 175*8975f5c5SAndroid Build Coastguard Worker write_source( 176*8975f5c5SAndroid Build Coastguard Worker data_source_name, 177*8975f5c5SAndroid Build Coastguard Worker all_cmds, 178*8975f5c5SAndroid Build Coastguard Worker "gles", 179*8975f5c5SAndroid Build Coastguard Worker path, 180*8975f5c5SAndroid Build Coastguard Worker "Load%sGLES" % tag, 181*8975f5c5SAndroid Build Coastguard Worker export=export, 182*8975f5c5SAndroid Build Coastguard Worker internal_prefix=internal_prefix, 183*8975f5c5SAndroid Build Coastguard Worker file_prefix=file_prefix) 184*8975f5c5SAndroid Build Coastguard Worker 185*8975f5c5SAndroid Build Coastguard Worker 186*8975f5c5SAndroid Build Coastguard Workerdef gen_egl_loader(egl_preamble, path, header_lib, export, internal_prefix, file_prefix, tag): 187*8975f5c5SAndroid Build Coastguard Worker 188*8975f5c5SAndroid Build Coastguard Worker data_source_name = "egl.xml and egl_angle_ext.xml" 189*8975f5c5SAndroid Build Coastguard Worker xml = registry_xml.RegistryXML("egl.xml", "egl_angle_ext.xml") 190*8975f5c5SAndroid Build Coastguard Worker 191*8975f5c5SAndroid Build Coastguard Worker for major_version, minor_version in [[1, 0], [1, 1], [1, 2], [1, 3], [1, 4], [1, 5]]: 192*8975f5c5SAndroid Build Coastguard Worker annotation = "{}_{}".format(major_version, minor_version) 193*8975f5c5SAndroid Build Coastguard Worker name_prefix = "EGL_VERSION_" 194*8975f5c5SAndroid Build Coastguard Worker 195*8975f5c5SAndroid Build Coastguard Worker feature_name = "{}{}".format(name_prefix, annotation) 196*8975f5c5SAndroid Build Coastguard Worker 197*8975f5c5SAndroid Build Coastguard Worker xml.AddCommands(feature_name, annotation) 198*8975f5c5SAndroid Build Coastguard Worker 199*8975f5c5SAndroid Build Coastguard Worker xml.AddExtensionCommands(registry_xml.supported_egl_extensions, ['egl']) 200*8975f5c5SAndroid Build Coastguard Worker 201*8975f5c5SAndroid Build Coastguard Worker all_cmds = xml.all_cmd_names.get_all_commands() 202*8975f5c5SAndroid Build Coastguard Worker 203*8975f5c5SAndroid Build Coastguard Worker write_header( 204*8975f5c5SAndroid Build Coastguard Worker data_source_name, 205*8975f5c5SAndroid Build Coastguard Worker all_cmds, 206*8975f5c5SAndroid Build Coastguard Worker "egl", 207*8975f5c5SAndroid Build Coastguard Worker egl_preamble, 208*8975f5c5SAndroid Build Coastguard Worker path, 209*8975f5c5SAndroid Build Coastguard Worker header_lib, 210*8975f5c5SAndroid Build Coastguard Worker "Load%sEGL" % tag, 211*8975f5c5SAndroid Build Coastguard Worker export=export, 212*8975f5c5SAndroid Build Coastguard Worker internal_prefix=internal_prefix, 213*8975f5c5SAndroid Build Coastguard Worker file_prefix=file_prefix) 214*8975f5c5SAndroid Build Coastguard Worker write_source( 215*8975f5c5SAndroid Build Coastguard Worker data_source_name, 216*8975f5c5SAndroid Build Coastguard Worker all_cmds, 217*8975f5c5SAndroid Build Coastguard Worker "egl", 218*8975f5c5SAndroid Build Coastguard Worker path, 219*8975f5c5SAndroid Build Coastguard Worker "Load%sEGL" % tag, 220*8975f5c5SAndroid Build Coastguard Worker export=export, 221*8975f5c5SAndroid Build Coastguard Worker internal_prefix=internal_prefix, 222*8975f5c5SAndroid Build Coastguard Worker file_prefix=file_prefix) 223*8975f5c5SAndroid Build Coastguard Worker 224*8975f5c5SAndroid Build Coastguard Worker 225*8975f5c5SAndroid Build Coastguard Workerdef gen_util_gles_and_egl_loaders(): 226*8975f5c5SAndroid Build Coastguard Worker path = os.path.join("..", "util") 227*8975f5c5SAndroid Build Coastguard Worker export = "ANGLE_UTIL_EXPORT " 228*8975f5c5SAndroid Build Coastguard Worker lib = "UTIL" 229*8975f5c5SAndroid Build Coastguard Worker gen_gles_loader(util_gles_preamble, path, lib, export, DEFAULT_INTERNAL_PREFIX, "", "Util") 230*8975f5c5SAndroid Build Coastguard Worker gen_egl_loader(util_egl_preamble, path, lib, export, DEFAULT_INTERNAL_PREFIX, "", "Util") 231*8975f5c5SAndroid Build Coastguard Worker 232*8975f5c5SAndroid Build Coastguard Worker 233*8975f5c5SAndroid Build Coastguard Workerdef gen_trace_gles_and_egl_loaders(): 234*8975f5c5SAndroid Build Coastguard Worker path = os.path.join("..", "util", "capture") 235*8975f5c5SAndroid Build Coastguard Worker export = "ANGLE_TRACE_LOADER_EXPORT " 236*8975f5c5SAndroid Build Coastguard Worker lib = "ANGLE_TRACES_UTIL" 237*8975f5c5SAndroid Build Coastguard Worker gen_gles_loader(trace_gles_preamble, path, lib, export, "t_", "trace_", "Trace") 238*8975f5c5SAndroid Build Coastguard Worker gen_egl_loader(trace_egl_preamble, path, lib, export, "t_", "trace_", "Trace") 239*8975f5c5SAndroid Build Coastguard Worker 240*8975f5c5SAndroid Build Coastguard Worker 241*8975f5c5SAndroid Build Coastguard Workerdef gen_util_wgl_loader(): 242*8975f5c5SAndroid Build Coastguard Worker 243*8975f5c5SAndroid Build Coastguard Worker supported_wgl_extensions = [ 244*8975f5c5SAndroid Build Coastguard Worker "WGL_ARB_create_context", "WGL_ARB_extensions_string", "WGL_ARB_pixel_format", 245*8975f5c5SAndroid Build Coastguard Worker "WGL_EXT_colorspace", "WGL_EXT_swap_control" 246*8975f5c5SAndroid Build Coastguard Worker ] 247*8975f5c5SAndroid Build Coastguard Worker 248*8975f5c5SAndroid Build Coastguard Worker source = "wgl.xml" 249*8975f5c5SAndroid Build Coastguard Worker xml = registry_xml.RegistryXML(source) 250*8975f5c5SAndroid Build Coastguard Worker 251*8975f5c5SAndroid Build Coastguard Worker for major_version, minor_version in [[1, 0]]: 252*8975f5c5SAndroid Build Coastguard Worker annotation = "{}_{}".format(major_version, minor_version) 253*8975f5c5SAndroid Build Coastguard Worker name_prefix = "WGL_VERSION_" 254*8975f5c5SAndroid Build Coastguard Worker 255*8975f5c5SAndroid Build Coastguard Worker feature_name = "{}{}".format(name_prefix, annotation) 256*8975f5c5SAndroid Build Coastguard Worker 257*8975f5c5SAndroid Build Coastguard Worker xml.AddCommands(feature_name, annotation) 258*8975f5c5SAndroid Build Coastguard Worker 259*8975f5c5SAndroid Build Coastguard Worker xml.AddExtensionCommands(supported_wgl_extensions, ['wgl']) 260*8975f5c5SAndroid Build Coastguard Worker 261*8975f5c5SAndroid Build Coastguard Worker all_cmds = xml.all_cmd_names.get_all_commands() 262*8975f5c5SAndroid Build Coastguard Worker 263*8975f5c5SAndroid Build Coastguard Worker path = os.path.join("..", "util", "windows") 264*8975f5c5SAndroid Build Coastguard Worker write_header( 265*8975f5c5SAndroid Build Coastguard Worker source, all_cmds, "wgl", util_wgl_preamble, path, "UTIL_WINDOWS", "LoadWGL", ns="_") 266*8975f5c5SAndroid Build Coastguard Worker write_source(source, all_cmds, "wgl", path, "LoadWGL", ns="_") 267*8975f5c5SAndroid Build Coastguard Worker 268*8975f5c5SAndroid Build Coastguard Worker 269*8975f5c5SAndroid Build Coastguard Workerdef main(): 270*8975f5c5SAndroid Build Coastguard Worker 271*8975f5c5SAndroid Build Coastguard Worker # Handle inputs/outputs for run_code_generation.py's auto_script 272*8975f5c5SAndroid Build Coastguard Worker if len(sys.argv) > 1: 273*8975f5c5SAndroid Build Coastguard Worker inputs = registry_xml.xml_inputs 274*8975f5c5SAndroid Build Coastguard Worker outputs = [ 275*8975f5c5SAndroid Build Coastguard Worker '../src/libEGL/egl_loader_autogen.cpp', 276*8975f5c5SAndroid Build Coastguard Worker '../src/libEGL/egl_loader_autogen.h', 277*8975f5c5SAndroid Build Coastguard Worker '../util/egl_loader_autogen.cpp', 278*8975f5c5SAndroid Build Coastguard Worker '../util/egl_loader_autogen.h', 279*8975f5c5SAndroid Build Coastguard Worker '../util/gles_loader_autogen.cpp', 280*8975f5c5SAndroid Build Coastguard Worker '../util/gles_loader_autogen.h', 281*8975f5c5SAndroid Build Coastguard Worker '../util/windows/wgl_loader_autogen.cpp', 282*8975f5c5SAndroid Build Coastguard Worker '../util/windows/wgl_loader_autogen.h', 283*8975f5c5SAndroid Build Coastguard Worker '../util/capture/trace_egl_loader_autogen.cpp', 284*8975f5c5SAndroid Build Coastguard Worker '../util/capture/trace_egl_loader_autogen.h', 285*8975f5c5SAndroid Build Coastguard Worker '../util/capture/trace_gles_loader_autogen.cpp', 286*8975f5c5SAndroid Build Coastguard Worker '../util/capture/trace_gles_loader_autogen.h', 287*8975f5c5SAndroid Build Coastguard Worker ] 288*8975f5c5SAndroid Build Coastguard Worker 289*8975f5c5SAndroid Build Coastguard Worker if sys.argv[1] == 'inputs': 290*8975f5c5SAndroid Build Coastguard Worker print(','.join(inputs)) 291*8975f5c5SAndroid Build Coastguard Worker elif sys.argv[1] == 'outputs': 292*8975f5c5SAndroid Build Coastguard Worker print(','.join(outputs)) 293*8975f5c5SAndroid Build Coastguard Worker else: 294*8975f5c5SAndroid Build Coastguard Worker print('Invalid script parameters') 295*8975f5c5SAndroid Build Coastguard Worker return 1 296*8975f5c5SAndroid Build Coastguard Worker return 0 297*8975f5c5SAndroid Build Coastguard Worker 298*8975f5c5SAndroid Build Coastguard Worker gen_libegl_loader() 299*8975f5c5SAndroid Build Coastguard Worker gen_util_gles_and_egl_loaders() 300*8975f5c5SAndroid Build Coastguard Worker gen_util_wgl_loader() 301*8975f5c5SAndroid Build Coastguard Worker gen_trace_gles_and_egl_loaders() 302*8975f5c5SAndroid Build Coastguard Worker return 0 303*8975f5c5SAndroid Build Coastguard Worker 304*8975f5c5SAndroid Build Coastguard Worker 305*8975f5c5SAndroid Build Coastguard Workerlibegl_preamble = """#include <EGL/egl.h> 306*8975f5c5SAndroid Build Coastguard Worker#include <EGL/eglext.h> 307*8975f5c5SAndroid Build Coastguard Worker#include <export.h> 308*8975f5c5SAndroid Build Coastguard Worker""" 309*8975f5c5SAndroid Build Coastguard Worker 310*8975f5c5SAndroid Build Coastguard Workerutil_gles_preamble = """#if defined(GL_GLES_PROTOTYPES) && GL_GLES_PROTOTYPES 311*8975f5c5SAndroid Build Coastguard Worker#error "Don't define GL prototypes if you want to use a loader!" 312*8975f5c5SAndroid Build Coastguard Worker#endif // defined(GL_GLES_PROTOTYPES) 313*8975f5c5SAndroid Build Coastguard Worker 314*8975f5c5SAndroid Build Coastguard Worker#include "angle_gl.h" 315*8975f5c5SAndroid Build Coastguard Worker#include "util/util_export.h" 316*8975f5c5SAndroid Build Coastguard Worker""" 317*8975f5c5SAndroid Build Coastguard Worker 318*8975f5c5SAndroid Build Coastguard Workerutil_egl_preamble = """#include "util/util_export.h" 319*8975f5c5SAndroid Build Coastguard Worker 320*8975f5c5SAndroid Build Coastguard Worker#include <EGL/egl.h> 321*8975f5c5SAndroid Build Coastguard Worker#include <EGL/eglext.h> 322*8975f5c5SAndroid Build Coastguard Worker""" 323*8975f5c5SAndroid Build Coastguard Worker 324*8975f5c5SAndroid Build Coastguard Workertrace_gles_preamble = """#if defined(GL_GLES_PROTOTYPES) && GL_GLES_PROTOTYPES 325*8975f5c5SAndroid Build Coastguard Worker#error "Don't define GL prototypes if you want to use a loader!" 326*8975f5c5SAndroid Build Coastguard Worker#endif // defined(GL_GLES_PROTOTYPES) 327*8975f5c5SAndroid Build Coastguard Worker 328*8975f5c5SAndroid Build Coastguard Worker#include "angle_gl.h" 329*8975f5c5SAndroid Build Coastguard Worker#include "traces_export.h" 330*8975f5c5SAndroid Build Coastguard Worker""" 331*8975f5c5SAndroid Build Coastguard Worker 332*8975f5c5SAndroid Build Coastguard Workertrace_egl_preamble = """ 333*8975f5c5SAndroid Build Coastguard Worker#include <EGL/egl.h> 334*8975f5c5SAndroid Build Coastguard Worker#include <EGL/eglext.h> 335*8975f5c5SAndroid Build Coastguard Worker 336*8975f5c5SAndroid Build Coastguard Worker#include "traces_export.h" 337*8975f5c5SAndroid Build Coastguard Worker""" 338*8975f5c5SAndroid Build Coastguard Worker 339*8975f5c5SAndroid Build Coastguard Workerutil_wgl_preamble = """ 340*8975f5c5SAndroid Build Coastguard Worker#include <WGL/wgl.h> 341*8975f5c5SAndroid Build Coastguard Worker#include <GLES2/gl2.h> 342*8975f5c5SAndroid Build Coastguard Worker 343*8975f5c5SAndroid Build Coastguard Worker// We add an underscore before each function name to ensure common names like "ChoosePixelFormat" 344*8975f5c5SAndroid Build Coastguard Worker// and "SwapBuffers" don't conflict with our function pointers. We can't use a namespace because 345*8975f5c5SAndroid Build Coastguard Worker// some functions conflict with preprocessor definitions. 346*8975f5c5SAndroid Build Coastguard Worker""" 347*8975f5c5SAndroid Build Coastguard Worker 348*8975f5c5SAndroid Build Coastguard Workertemplate_loader_h = """// GENERATED FILE - DO NOT EDIT. 349*8975f5c5SAndroid Build Coastguard Worker// Generated by {script_name} using data from {data_source_name}. 350*8975f5c5SAndroid Build Coastguard Worker// 351*8975f5c5SAndroid Build Coastguard Worker// Copyright 2018 The ANGLE Project Authors. All rights reserved. 352*8975f5c5SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be 353*8975f5c5SAndroid Build Coastguard Worker// found in the LICENSE file. 354*8975f5c5SAndroid Build Coastguard Worker// 355*8975f5c5SAndroid Build Coastguard Worker// {api_lower}_loader_autogen.h: 356*8975f5c5SAndroid Build Coastguard Worker// Simple {api_upper} function loader. 357*8975f5c5SAndroid Build Coastguard Worker 358*8975f5c5SAndroid Build Coastguard Worker#ifndef {lib}_{api_upper}_LOADER_AUTOGEN_H_ 359*8975f5c5SAndroid Build Coastguard Worker#define {lib}_{api_upper}_LOADER_AUTOGEN_H_ 360*8975f5c5SAndroid Build Coastguard Worker 361*8975f5c5SAndroid Build Coastguard Worker{preamble} 362*8975f5c5SAndroid Build Coastguard Worker{defines} 363*8975f5c5SAndroid Build Coastguard Worker 364*8975f5c5SAndroid Build Coastguard Worker#if defined(__cplusplus) 365*8975f5c5SAndroid Build Coastguard Workerextern "C" {{ 366*8975f5c5SAndroid Build Coastguard Worker#endif // defined(__cplusplus) 367*8975f5c5SAndroid Build Coastguard Worker{function_pointers} 368*8975f5c5SAndroid Build Coastguard Worker 369*8975f5c5SAndroid Build Coastguard Workertypedef void (*GenericProc)(void); 370*8975f5c5SAndroid Build Coastguard Workertypedef GenericProc (KHRONOS_APIENTRY *LoadProc)(const char *); 371*8975f5c5SAndroid Build Coastguard Worker{export}void {load_fn_name}(LoadProc loadProc); 372*8975f5c5SAndroid Build Coastguard Worker 373*8975f5c5SAndroid Build Coastguard Worker#if defined(__cplusplus) 374*8975f5c5SAndroid Build Coastguard Worker}} // extern "C" 375*8975f5c5SAndroid Build Coastguard Worker#endif // defined(__cplusplus) 376*8975f5c5SAndroid Build Coastguard Worker 377*8975f5c5SAndroid Build Coastguard Worker#endif // {lib}_{api_upper}_LOADER_AUTOGEN_H_ 378*8975f5c5SAndroid Build Coastguard Worker""" 379*8975f5c5SAndroid Build Coastguard Worker 380*8975f5c5SAndroid Build Coastguard Workertemplate_loader_cpp = """// GENERATED FILE - DO NOT EDIT. 381*8975f5c5SAndroid Build Coastguard Worker// Generated by {script_name} using data from {data_source_name}. 382*8975f5c5SAndroid Build Coastguard Worker// 383*8975f5c5SAndroid Build Coastguard Worker// Copyright 2018 The ANGLE Project Authors. All rights reserved. 384*8975f5c5SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be 385*8975f5c5SAndroid Build Coastguard Worker// found in the LICENSE file. 386*8975f5c5SAndroid Build Coastguard Worker// 387*8975f5c5SAndroid Build Coastguard Worker// {api_lower}_loader_autogen.cpp: 388*8975f5c5SAndroid Build Coastguard Worker// Simple {api_upper} function loader. 389*8975f5c5SAndroid Build Coastguard Worker 390*8975f5c5SAndroid Build Coastguard Worker#include "{file_prefix}{api_lower}_loader_autogen.h" 391*8975f5c5SAndroid Build Coastguard Worker 392*8975f5c5SAndroid Build Coastguard Workerextern "C" {{ 393*8975f5c5SAndroid Build Coastguard Worker{function_pointers} 394*8975f5c5SAndroid Build Coastguard Worker 395*8975f5c5SAndroid Build Coastguard Workervoid {load_fn_name}(LoadProc loadProc) 396*8975f5c5SAndroid Build Coastguard Worker{{ 397*8975f5c5SAndroid Build Coastguard Worker{set_pointers} 398*8975f5c5SAndroid Build Coastguard Worker}} 399*8975f5c5SAndroid Build Coastguard Worker}} // extern "C" 400*8975f5c5SAndroid Build Coastguard Worker""" 401*8975f5c5SAndroid Build Coastguard Worker 402*8975f5c5SAndroid Build Coastguard Workerif __name__ == '__main__': 403*8975f5c5SAndroid Build Coastguard Worker sys.exit(main()) 404