| #!/usr/bin/python |
| # Copyright 2017 The ANGLE Project Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| # |
| # gen_proc_table.py: |
| # Code generation for entry point loading tables. |
| |
| # TODO(jmadill): Should be part of entry point generation. |
| |
| import sys |
| from datetime import date |
| |
| data_source_name = "proc_table_data.json" |
| out_file_name = "proc_table_autogen.cpp" |
| |
| template_cpp = """// GENERATED FILE - DO NOT EDIT. |
| // Generated by {script_name} using data from {data_source_name}. |
| // |
| // Copyright {copyright_year} The ANGLE Project Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| // getProcAddress loader table: |
| // Mapping from a string entry point name to function address. |
| // |
| |
| #include "libGLESv2/proc_table.h" |
| |
| #include "libGLESv2/entry_points_egl.h" |
| #include "libGLESv2/entry_points_egl_ext.h" |
| #include "libGLESv2/entry_points_gles_2_0_autogen.h" |
| #include "libGLESv2/entry_points_gles_2_0_ext.h" |
| #include "libGLESv2/entry_points_gles_3_0_autogen.h" |
| #include "libGLESv2/entry_points_gles_3_1_autogen.h" |
| #include "platform/Platform.h" |
| |
| #define P(FUNC) reinterpret_cast<__eglMustCastToProperFunctionPointerType>(FUNC) |
| |
| namespace egl |
| {{ |
| ProcEntry g_procTable[] = {{ |
| {proc_data} |
| }}; |
| |
| size_t g_numProcs = {num_procs}; |
| }} // namespace egl |
| """ |
| |
| sys.path.append('../libANGLE/renderer') |
| import angle_format |
| |
| json_data = angle_format.load_json(data_source_name) |
| |
| all_functions = {} |
| |
| for description, functions in json_data.iteritems(): |
| for function in functions: |
| if function.startswith("gl"): |
| all_functions[function] = "gl::" + function[2:] |
| elif function.startswith("egl"): |
| all_functions[function] = "egl::" + function[3:] |
| else: |
| all_functions[function] = function |
| |
| proc_data = [(' {"%s", P(%s)}' % (func, angle_func)) for func, angle_func in sorted(all_functions.iteritems())] |
| |
| with open(out_file_name, 'wt') as out_file: |
| output_cpp = template_cpp.format( |
| script_name = sys.argv[0], |
| data_source_name = data_source_name, |
| copyright_year = date.today().year, |
| proc_data = ",\n".join(proc_data), |
| num_procs = len(proc_data)) |
| out_file.write(output_cpp) |
| out_file.close() |
| |