1*8975f5c5SAndroid Build Coastguard Worker#!/usr/bin/python3 2*8975f5c5SAndroid Build Coastguard Worker# 3*8975f5c5SAndroid Build Coastguard Worker# Copyright 2019 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# gen_gl_enum_utils.py: 8*8975f5c5SAndroid Build Coastguard Worker# Generates GLenum value to string mapping 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 12*8975f5c5SAndroid Build Coastguard Workerimport os 13*8975f5c5SAndroid Build Coastguard Worker 14*8975f5c5SAndroid Build Coastguard Workerimport registry_xml 15*8975f5c5SAndroid Build Coastguard Worker 16*8975f5c5SAndroid Build Coastguard Workertemplate_gl_enums_header = """// GENERATED FILE - DO NOT EDIT. 17*8975f5c5SAndroid Build Coastguard Worker// Generated by {script_name} using data from {data_source_name}. 18*8975f5c5SAndroid Build Coastguard Worker// 19*8975f5c5SAndroid Build Coastguard Worker// Copyright 2019 The ANGLE Project Authors. All rights reserved. 20*8975f5c5SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be 21*8975f5c5SAndroid Build Coastguard Worker// found in the LICENSE file. 22*8975f5c5SAndroid Build Coastguard Worker// 23*8975f5c5SAndroid Build Coastguard Worker// gl_enum_utils_autogen.h: 24*8975f5c5SAndroid Build Coastguard Worker// mapping of GLenum value to string. 25*8975f5c5SAndroid Build Coastguard Worker 26*8975f5c5SAndroid Build Coastguard Worker# ifndef COMMON_GL_ENUM_UTILS_AUTOGEN_H_ 27*8975f5c5SAndroid Build Coastguard Worker# define COMMON_GL_ENUM_UTILS_AUTOGEN_H_ 28*8975f5c5SAndroid Build Coastguard Worker 29*8975f5c5SAndroid Build Coastguard Workernamespace gl 30*8975f5c5SAndroid Build Coastguard Worker{{ 31*8975f5c5SAndroid Build Coastguard Workerenum class GLESEnum 32*8975f5c5SAndroid Build Coastguard Worker{{ 33*8975f5c5SAndroid Build Coastguard Worker {gles_enum_groups} 34*8975f5c5SAndroid Build Coastguard Worker}}; 35*8975f5c5SAndroid Build Coastguard Worker 36*8975f5c5SAndroid Build Coastguard Workerenum class BigGLEnum 37*8975f5c5SAndroid Build Coastguard Worker{{ 38*8975f5c5SAndroid Build Coastguard Worker {gl_enum_groups} 39*8975f5c5SAndroid Build Coastguard Worker}}; 40*8975f5c5SAndroid Build Coastguard Worker}} // namespace gl 41*8975f5c5SAndroid Build Coastguard Worker 42*8975f5c5SAndroid Build Coastguard Worker# endif // COMMON_GL_ENUM_UTILS_AUTOGEN_H_ 43*8975f5c5SAndroid Build Coastguard Worker""" 44*8975f5c5SAndroid Build Coastguard Worker 45*8975f5c5SAndroid Build Coastguard Workertemplate_gl_enums_source = """// GENERATED FILE - DO NOT EDIT. 46*8975f5c5SAndroid Build Coastguard Worker// Generated by {script_name} using data from {data_source_name}. 47*8975f5c5SAndroid Build Coastguard Worker// 48*8975f5c5SAndroid Build Coastguard Worker// Copyright 2019 The ANGLE Project Authors. All rights reserved. 49*8975f5c5SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be 50*8975f5c5SAndroid Build Coastguard Worker// found in the LICENSE file. 51*8975f5c5SAndroid Build Coastguard Worker// 52*8975f5c5SAndroid Build Coastguard Worker// gl_enum_utils_autogen.cpp: 53*8975f5c5SAndroid Build Coastguard Worker// mapping of GLenum value to string. 54*8975f5c5SAndroid Build Coastguard Worker 55*8975f5c5SAndroid Build Coastguard Worker#include "common/gl_enum_utils_autogen.h" 56*8975f5c5SAndroid Build Coastguard Worker 57*8975f5c5SAndroid Build Coastguard Worker#include "common/debug.h" 58*8975f5c5SAndroid Build Coastguard Worker#include "common/gl_enum_utils.h" 59*8975f5c5SAndroid Build Coastguard Worker 60*8975f5c5SAndroid Build Coastguard Worker#include <algorithm> 61*8975f5c5SAndroid Build Coastguard Worker#include <cstring> 62*8975f5c5SAndroid Build Coastguard Worker 63*8975f5c5SAndroid Build Coastguard Workernamespace gl 64*8975f5c5SAndroid Build Coastguard Worker{{ 65*8975f5c5SAndroid Build Coastguard Workernamespace 66*8975f5c5SAndroid Build Coastguard Worker{{ 67*8975f5c5SAndroid Build Coastguard Workerconst char *UnknownEnumToString(unsigned int value) 68*8975f5c5SAndroid Build Coastguard Worker{{ 69*8975f5c5SAndroid Build Coastguard Worker constexpr size_t kBufferSize = 64; 70*8975f5c5SAndroid Build Coastguard Worker static thread_local char sBuffer[kBufferSize]; 71*8975f5c5SAndroid Build Coastguard Worker snprintf(sBuffer, kBufferSize, "0x%04X", value); 72*8975f5c5SAndroid Build Coastguard Worker return sBuffer; 73*8975f5c5SAndroid Build Coastguard Worker}} 74*8975f5c5SAndroid Build Coastguard Worker}} // anonymous namespace 75*8975f5c5SAndroid Build Coastguard Worker 76*8975f5c5SAndroid Build Coastguard Workerconst char *GLenumToString(GLESEnum enumGroup, unsigned int value) 77*8975f5c5SAndroid Build Coastguard Worker{{ 78*8975f5c5SAndroid Build Coastguard Worker switch (enumGroup) 79*8975f5c5SAndroid Build Coastguard Worker {{ 80*8975f5c5SAndroid Build Coastguard Worker {gles_enums_value_to_string_table} 81*8975f5c5SAndroid Build Coastguard Worker default: 82*8975f5c5SAndroid Build Coastguard Worker return UnknownEnumToString(value); 83*8975f5c5SAndroid Build Coastguard Worker }} 84*8975f5c5SAndroid Build Coastguard Worker}} 85*8975f5c5SAndroid Build Coastguard Worker 86*8975f5c5SAndroid Build Coastguard Workerconst char *GLenumToString(BigGLEnum enumGroup, unsigned int value) 87*8975f5c5SAndroid Build Coastguard Worker{{ 88*8975f5c5SAndroid Build Coastguard Worker switch (enumGroup) 89*8975f5c5SAndroid Build Coastguard Worker {{ 90*8975f5c5SAndroid Build Coastguard Worker {gl_enums_value_to_string_table} 91*8975f5c5SAndroid Build Coastguard Worker default: 92*8975f5c5SAndroid Build Coastguard Worker return UnknownEnumToString(value); 93*8975f5c5SAndroid Build Coastguard Worker }} 94*8975f5c5SAndroid Build Coastguard Worker}} 95*8975f5c5SAndroid Build Coastguard Worker 96*8975f5c5SAndroid Build Coastguard Workernamespace 97*8975f5c5SAndroid Build Coastguard Worker{{ 98*8975f5c5SAndroid Build Coastguard Workerusing StringEnumEntry = std::pair<const char*, unsigned int>; 99*8975f5c5SAndroid Build Coastguard Workerstatic StringEnumEntry g_stringEnumTable[] = {{ 100*8975f5c5SAndroid Build Coastguard Worker {string_to_enum_table} 101*8975f5c5SAndroid Build Coastguard Worker}}; 102*8975f5c5SAndroid Build Coastguard Worker 103*8975f5c5SAndroid Build Coastguard Workerconst size_t g_numStringEnums = std::size(g_stringEnumTable); 104*8975f5c5SAndroid Build Coastguard Worker}} // anonymous namespace 105*8975f5c5SAndroid Build Coastguard Worker 106*8975f5c5SAndroid Build Coastguard Workerunsigned int StringToGLenum(const char *str) 107*8975f5c5SAndroid Build Coastguard Worker{{ 108*8975f5c5SAndroid Build Coastguard Worker auto it = std::lower_bound( 109*8975f5c5SAndroid Build Coastguard Worker &g_stringEnumTable[0], &g_stringEnumTable[g_numStringEnums], str, 110*8975f5c5SAndroid Build Coastguard Worker [](const StringEnumEntry& a, const char* b) {{ return strcmp(a.first, b) < 0; }}); 111*8975f5c5SAndroid Build Coastguard Worker 112*8975f5c5SAndroid Build Coastguard Worker if (strcmp(it->first, str) == 0) 113*8975f5c5SAndroid Build Coastguard Worker {{ 114*8975f5c5SAndroid Build Coastguard Worker return it->second; 115*8975f5c5SAndroid Build Coastguard Worker }} 116*8975f5c5SAndroid Build Coastguard Worker 117*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE(); 118*8975f5c5SAndroid Build Coastguard Worker return 0; 119*8975f5c5SAndroid Build Coastguard Worker}} 120*8975f5c5SAndroid Build Coastguard Worker}} // namespace gl 121*8975f5c5SAndroid Build Coastguard Worker 122*8975f5c5SAndroid Build Coastguard Worker""" 123*8975f5c5SAndroid Build Coastguard Worker 124*8975f5c5SAndroid Build Coastguard Workertemplate_enum_group_case = """case {api_enum}::{group_name}: {{ 125*8975f5c5SAndroid Build Coastguard Worker switch (value) {{ 126*8975f5c5SAndroid Build Coastguard Worker {inner_group_cases} 127*8975f5c5SAndroid Build Coastguard Worker default: 128*8975f5c5SAndroid Build Coastguard Worker return UnknownEnumToString(value); 129*8975f5c5SAndroid Build Coastguard Worker }} 130*8975f5c5SAndroid Build Coastguard Worker}} 131*8975f5c5SAndroid Build Coastguard Worker""" 132*8975f5c5SAndroid Build Coastguard Worker 133*8975f5c5SAndroid Build Coastguard Workertemplate_enum_value_to_string_case = """case {value}: return {name};""" 134*8975f5c5SAndroid Build Coastguard Workerexclude_enum_groups = {'SpecialNumbers'} 135*8975f5c5SAndroid Build Coastguard Worker 136*8975f5c5SAndroid Build Coastguard Worker# Special enum groups that don't have any enum values. 137*8975f5c5SAndroid Build Coastguard Worker# Add groups here if you get missing group compile errors. 138*8975f5c5SAndroid Build Coastguard Workerempty_enum_groups = ['SemaphoreParameterName', 'ShaderBinaryFormat'] 139*8975f5c5SAndroid Build Coastguard Worker 140*8975f5c5SAndroid Build Coastguard Worker 141*8975f5c5SAndroid Build Coastguard Workerdef dump_value_to_string_mapping(enum_groups, api_enum): 142*8975f5c5SAndroid Build Coastguard Worker exporting_groups = list() 143*8975f5c5SAndroid Build Coastguard Worker for group_name, inner_mapping in enum_groups.items(): 144*8975f5c5SAndroid Build Coastguard Worker # Convert to pairs and strip out-of-range values. 145*8975f5c5SAndroid Build Coastguard Worker string_value_pairs = list( 146*8975f5c5SAndroid Build Coastguard Worker filter(lambda x: x[1] >= 0 and x[1] <= 0xFFFFFFFFF, inner_mapping.items())) 147*8975f5c5SAndroid Build Coastguard Worker if not string_value_pairs: 148*8975f5c5SAndroid Build Coastguard Worker continue 149*8975f5c5SAndroid Build Coastguard Worker 150*8975f5c5SAndroid Build Coastguard Worker # sort according values 151*8975f5c5SAndroid Build Coastguard Worker string_value_pairs.sort(key=lambda x: (x[1], len(x[0]), x[0])) 152*8975f5c5SAndroid Build Coastguard Worker 153*8975f5c5SAndroid Build Coastguard Worker # remove all duplicate values from the pairs list 154*8975f5c5SAndroid Build Coastguard Worker # some value may have more than one GLenum mapped to them, such as: 155*8975f5c5SAndroid Build Coastguard Worker # GL_DRAW_FRAMEBUFFER_BINDING and GL_FRAMEBUFFER_BINDING 156*8975f5c5SAndroid Build Coastguard Worker # GL_BLEND_EQUATION_RGB and GL_BLEND_EQUATION 157*8975f5c5SAndroid Build Coastguard Worker # it is safe to output either one of them, for simplity here just 158*8975f5c5SAndroid Build Coastguard Worker # choose the shorter one which comes first in the sorted list 159*8975f5c5SAndroid Build Coastguard Worker exporting_string_value_pairs = list() 160*8975f5c5SAndroid Build Coastguard Worker for index, pair in enumerate(string_value_pairs): 161*8975f5c5SAndroid Build Coastguard Worker if index == 0 or pair[1] != string_value_pairs[index - 1][1]: 162*8975f5c5SAndroid Build Coastguard Worker exporting_string_value_pairs.append(pair) 163*8975f5c5SAndroid Build Coastguard Worker 164*8975f5c5SAndroid Build Coastguard Worker inner_code_block = "\n".join([ 165*8975f5c5SAndroid Build Coastguard Worker template_enum_value_to_string_case.format( 166*8975f5c5SAndroid Build Coastguard Worker value='0x%X' % value, 167*8975f5c5SAndroid Build Coastguard Worker name='"%s"' % name, 168*8975f5c5SAndroid Build Coastguard Worker ) for name, value in exporting_string_value_pairs 169*8975f5c5SAndroid Build Coastguard Worker ]) 170*8975f5c5SAndroid Build Coastguard Worker 171*8975f5c5SAndroid Build Coastguard Worker exporting_groups.append((group_name, inner_code_block)) 172*8975f5c5SAndroid Build Coastguard Worker 173*8975f5c5SAndroid Build Coastguard Worker return "\n".join([ 174*8975f5c5SAndroid Build Coastguard Worker template_enum_group_case.format( 175*8975f5c5SAndroid Build Coastguard Worker api_enum=api_enum, 176*8975f5c5SAndroid Build Coastguard Worker group_name=group_name, 177*8975f5c5SAndroid Build Coastguard Worker inner_group_cases=inner_code_block, 178*8975f5c5SAndroid Build Coastguard Worker ) for group_name, inner_code_block in sorted(exporting_groups, key=lambda x: x[0]) 179*8975f5c5SAndroid Build Coastguard Worker ]) 180*8975f5c5SAndroid Build Coastguard Worker 181*8975f5c5SAndroid Build Coastguard Worker 182*8975f5c5SAndroid Build Coastguard Workerdef dump_string_to_value_mapping(enums_and_values): 183*8975f5c5SAndroid Build Coastguard Worker 184*8975f5c5SAndroid Build Coastguard Worker def f(value): 185*8975f5c5SAndroid Build Coastguard Worker if value < 0: 186*8975f5c5SAndroid Build Coastguard Worker return str(value) 187*8975f5c5SAndroid Build Coastguard Worker if value < 0xFFFF: 188*8975f5c5SAndroid Build Coastguard Worker return "0x%04X" % value 189*8975f5c5SAndroid Build Coastguard Worker if value <= 0xFFFFFFFF: 190*8975f5c5SAndroid Build Coastguard Worker return "0x%X" % value 191*8975f5c5SAndroid Build Coastguard Worker else: 192*8975f5c5SAndroid Build Coastguard Worker return "0xFFFFFFFF" 193*8975f5c5SAndroid Build Coastguard Worker 194*8975f5c5SAndroid Build Coastguard Worker return '\n'.join('{"%s", %s},' % (k, f(v)) for k, v in sorted(enums_and_values)) 195*8975f5c5SAndroid Build Coastguard Worker 196*8975f5c5SAndroid Build Coastguard Worker 197*8975f5c5SAndroid Build Coastguard Workerdef main(header_output_path, source_output_path): 198*8975f5c5SAndroid Build Coastguard Worker xml = registry_xml.RegistryXML('gl.xml', 'gl_angle_ext.xml') 199*8975f5c5SAndroid Build Coastguard Worker 200*8975f5c5SAndroid Build Coastguard Worker # Compute a list of all GLES enums. 201*8975f5c5SAndroid Build Coastguard Worker gles_enums = set() 202*8975f5c5SAndroid Build Coastguard Worker bigl_enums = set() 203*8975f5c5SAndroid Build Coastguard Worker for feature in xml.root.findall('feature'): 204*8975f5c5SAndroid Build Coastguard Worker for require in feature.findall('require'): 205*8975f5c5SAndroid Build Coastguard Worker assert 'api' not in require.attrib 206*8975f5c5SAndroid Build Coastguard Worker if 'gles' in feature.attrib['api']: 207*8975f5c5SAndroid Build Coastguard Worker for enum in require.findall('enum'): 208*8975f5c5SAndroid Build Coastguard Worker gles_enums.add(enum.attrib['name']) 209*8975f5c5SAndroid Build Coastguard Worker if feature.attrib['api'] == 'gl': 210*8975f5c5SAndroid Build Coastguard Worker for enum in require.findall('enum'): 211*8975f5c5SAndroid Build Coastguard Worker bigl_enums.add(enum.attrib['name']) 212*8975f5c5SAndroid Build Coastguard Worker 213*8975f5c5SAndroid Build Coastguard Worker for extensions in xml.root.findall('extensions'): 214*8975f5c5SAndroid Build Coastguard Worker for extension in extensions.findall('extension'): 215*8975f5c5SAndroid Build Coastguard Worker if extension.attrib['name'] in registry_xml.supported_extensions: 216*8975f5c5SAndroid Build Coastguard Worker for require in extension.findall('require'): 217*8975f5c5SAndroid Build Coastguard Worker ext_apis = extension.attrib['supported'].split('|') 218*8975f5c5SAndroid Build Coastguard Worker if ('api' not in require.attrib or 'gles' in require.attrib['api']) and ( 219*8975f5c5SAndroid Build Coastguard Worker 'gles' in extension.attrib['supported']): 220*8975f5c5SAndroid Build Coastguard Worker for enum in require.findall('enum'): 221*8975f5c5SAndroid Build Coastguard Worker gles_enums.add(enum.attrib['name']) 222*8975f5c5SAndroid Build Coastguard Worker if ('api' not in require.attrib or 223*8975f5c5SAndroid Build Coastguard Worker feature.attrib['api'] == 'gl') and ('gl' in ext_apis): 224*8975f5c5SAndroid Build Coastguard Worker for enum in require.findall('enum'): 225*8975f5c5SAndroid Build Coastguard Worker bigl_enums.add(enum.attrib['name']) 226*8975f5c5SAndroid Build Coastguard Worker 227*8975f5c5SAndroid Build Coastguard Worker # Build a map from GLenum name to its value 228*8975f5c5SAndroid Build Coastguard Worker gl_enum_groups = dict() 229*8975f5c5SAndroid Build Coastguard Worker gles_enum_groups = dict() 230*8975f5c5SAndroid Build Coastguard Worker 231*8975f5c5SAndroid Build Coastguard Worker # Add all enums to default groups 232*8975f5c5SAndroid Build Coastguard Worker gl_default_enums = dict() 233*8975f5c5SAndroid Build Coastguard Worker gles_default_enums = dict() 234*8975f5c5SAndroid Build Coastguard Worker gl_enum_groups[registry_xml.default_enum_group_name] = gl_default_enums 235*8975f5c5SAndroid Build Coastguard Worker gles_enum_groups[registry_xml.default_enum_group_name] = gles_default_enums 236*8975f5c5SAndroid Build Coastguard Worker enums_and_values = [] 237*8975f5c5SAndroid Build Coastguard Worker 238*8975f5c5SAndroid Build Coastguard Worker for enums_node in xml.root.findall('enums'): 239*8975f5c5SAndroid Build Coastguard Worker for enum in enums_node.findall('enum'): 240*8975f5c5SAndroid Build Coastguard Worker enum_name = enum.attrib['name'] 241*8975f5c5SAndroid Build Coastguard Worker enum_value = int(enum.attrib['value'], base=16) 242*8975f5c5SAndroid Build Coastguard Worker enums_and_values.append((enum_name, enum_value)) 243*8975f5c5SAndroid Build Coastguard Worker 244*8975f5c5SAndroid Build Coastguard Worker if enum_name in gles_enums: 245*8975f5c5SAndroid Build Coastguard Worker gles_default_enums[enum_name] = enum_value 246*8975f5c5SAndroid Build Coastguard Worker if enum_name in bigl_enums: 247*8975f5c5SAndroid Build Coastguard Worker gl_default_enums[enum_name] = enum_value 248*8975f5c5SAndroid Build Coastguard Worker 249*8975f5c5SAndroid Build Coastguard Worker if 'group' in enum.attrib: 250*8975f5c5SAndroid Build Coastguard Worker for enum_group in enum.attrib['group'].split(','): 251*8975f5c5SAndroid Build Coastguard Worker if enum_group in exclude_enum_groups: 252*8975f5c5SAndroid Build Coastguard Worker continue 253*8975f5c5SAndroid Build Coastguard Worker if enum_name in gles_enums: 254*8975f5c5SAndroid Build Coastguard Worker if enum_group not in gles_enum_groups: 255*8975f5c5SAndroid Build Coastguard Worker gles_enum_groups[enum_group] = dict() 256*8975f5c5SAndroid Build Coastguard Worker gles_enum_groups[enum_group][enum_name] = enum_value 257*8975f5c5SAndroid Build Coastguard Worker if enum_name in bigl_enums: 258*8975f5c5SAndroid Build Coastguard Worker if enum_group not in gl_enum_groups: 259*8975f5c5SAndroid Build Coastguard Worker gl_enum_groups[enum_group] = dict() 260*8975f5c5SAndroid Build Coastguard Worker gl_enum_groups[enum_group][enum_name] = enum_value 261*8975f5c5SAndroid Build Coastguard Worker 262*8975f5c5SAndroid Build Coastguard Worker for empty_group in empty_enum_groups: 263*8975f5c5SAndroid Build Coastguard Worker assert not empty_group in gles_enum_groups or not empty_group in gl_enum_groups, 'Remove %s from the empty groups list, it has enums now.' % empty_group 264*8975f5c5SAndroid Build Coastguard Worker if empty_group not in gles_enum_groups: 265*8975f5c5SAndroid Build Coastguard Worker gles_enum_groups[empty_group] = dict() 266*8975f5c5SAndroid Build Coastguard Worker if empty_group not in gl_enum_groups: 267*8975f5c5SAndroid Build Coastguard Worker gl_enum_groups[empty_group] = dict() 268*8975f5c5SAndroid Build Coastguard Worker 269*8975f5c5SAndroid Build Coastguard Worker # Write GLenum groups into the header file. 270*8975f5c5SAndroid Build Coastguard Worker header_content = template_gl_enums_header.format( 271*8975f5c5SAndroid Build Coastguard Worker script_name=os.path.basename(sys.argv[0]), 272*8975f5c5SAndroid Build Coastguard Worker data_source_name="gl.xml and gl_angle_ext.xml", 273*8975f5c5SAndroid Build Coastguard Worker gles_enum_groups=',\n'.join(sorted(gles_enum_groups.keys())), 274*8975f5c5SAndroid Build Coastguard Worker gl_enum_groups=',\n'.join(sorted(gl_enum_groups.keys()))) 275*8975f5c5SAndroid Build Coastguard Worker 276*8975f5c5SAndroid Build Coastguard Worker header_output_path = registry_xml.script_relative(header_output_path) 277*8975f5c5SAndroid Build Coastguard Worker with open(header_output_path, 'w') as f: 278*8975f5c5SAndroid Build Coastguard Worker f.write(header_content) 279*8975f5c5SAndroid Build Coastguard Worker 280*8975f5c5SAndroid Build Coastguard Worker # Write mapping to source file 281*8975f5c5SAndroid Build Coastguard Worker gles_enums_value_to_string_table = dump_value_to_string_mapping(gles_enum_groups, 'GLESEnum') 282*8975f5c5SAndroid Build Coastguard Worker gl_enums_value_to_string_table = dump_value_to_string_mapping(gl_enum_groups, 'BigGLEnum') 283*8975f5c5SAndroid Build Coastguard Worker string_to_enum_table = dump_string_to_value_mapping(enums_and_values) 284*8975f5c5SAndroid Build Coastguard Worker source_content = template_gl_enums_source.format( 285*8975f5c5SAndroid Build Coastguard Worker script_name=os.path.basename(sys.argv[0]), 286*8975f5c5SAndroid Build Coastguard Worker data_source_name="gl.xml and gl_angle_ext.xml", 287*8975f5c5SAndroid Build Coastguard Worker gles_enums_value_to_string_table=gles_enums_value_to_string_table, 288*8975f5c5SAndroid Build Coastguard Worker gl_enums_value_to_string_table=gl_enums_value_to_string_table, 289*8975f5c5SAndroid Build Coastguard Worker string_to_enum_table=string_to_enum_table, 290*8975f5c5SAndroid Build Coastguard Worker ) 291*8975f5c5SAndroid Build Coastguard Worker 292*8975f5c5SAndroid Build Coastguard Worker source_output_path = registry_xml.script_relative(source_output_path) 293*8975f5c5SAndroid Build Coastguard Worker with open(source_output_path, 'w') as f: 294*8975f5c5SAndroid Build Coastguard Worker f.write(source_content) 295*8975f5c5SAndroid Build Coastguard Worker 296*8975f5c5SAndroid Build Coastguard Worker return 0 297*8975f5c5SAndroid Build Coastguard Worker 298*8975f5c5SAndroid Build Coastguard Worker 299*8975f5c5SAndroid Build Coastguard Workerif __name__ == '__main__': 300*8975f5c5SAndroid Build Coastguard Worker inputs = [ 301*8975f5c5SAndroid Build Coastguard Worker '../third_party/OpenGL-Registry/src/xml/gl.xml', 302*8975f5c5SAndroid Build Coastguard Worker 'gl_angle_ext.xml', 303*8975f5c5SAndroid Build Coastguard Worker 'registry_xml.py', 304*8975f5c5SAndroid Build Coastguard Worker ] 305*8975f5c5SAndroid Build Coastguard Worker 306*8975f5c5SAndroid Build Coastguard Worker gl_enum_utils_autogen_base_path = '../src/common/gl_enum_utils_autogen' 307*8975f5c5SAndroid Build Coastguard Worker outputs = [ 308*8975f5c5SAndroid Build Coastguard Worker gl_enum_utils_autogen_base_path + '.h', 309*8975f5c5SAndroid Build Coastguard Worker gl_enum_utils_autogen_base_path + '.cpp', 310*8975f5c5SAndroid Build Coastguard Worker ] 311*8975f5c5SAndroid Build Coastguard Worker 312*8975f5c5SAndroid Build Coastguard Worker if len(sys.argv) > 1: 313*8975f5c5SAndroid Build Coastguard Worker if sys.argv[1] == 'inputs': 314*8975f5c5SAndroid Build Coastguard Worker print(','.join(inputs)) 315*8975f5c5SAndroid Build Coastguard Worker elif sys.argv[1] == 'outputs': 316*8975f5c5SAndroid Build Coastguard Worker print(','.join(outputs)) 317*8975f5c5SAndroid Build Coastguard Worker else: 318*8975f5c5SAndroid Build Coastguard Worker sys.exit( 319*8975f5c5SAndroid Build Coastguard Worker main( 320*8975f5c5SAndroid Build Coastguard Worker registry_xml.script_relative(outputs[0]), 321*8975f5c5SAndroid Build Coastguard Worker registry_xml.script_relative(outputs[1]))) 322