Edit

kc3-lang/angle/src/libGLESv2/gen_proc_table.py

Branch :

  • Show log

    Commit

  • Author : Geoff Lang
    Date : 2018-01-12 17:17:27
    Hash : 2aaa7b4e
    Message : Add GLES1 targets and stub entry points. * Create a new libGLESv1_CM target. * Merge all autogenerated extension entry points into one file. * Allow creation of ES1 contexts. BUG=angleproject:2306 Change-Id: I446258363a96a3c37d657089dd7c1cff0fa3cf78 Reviewed-on: https://chromium-review.googlesource.com/865718 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>

  • src/libGLESv2/gen_proc_table.py
  • #!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_1_0_autogen.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 "libGLESv2/entry_points_gles_ext_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, 'wb') 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()