Commit 0a5bc0ce by Jamie Madill Committed by Commit Bot

EGL: Auto-generate "libEGL" export cpp file.

This steps towards full auto-generation of EGL entry point files. Bug: angleproject:2621 Change-Id: I629447bb6754ee1e87bef020de21b28e37e20eaf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2552774 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarCody Northrop <cnorthrop@google.com> Reviewed-by: 's avatarTim Van Patten <timvp@google.com>
parent 105b43f9
...@@ -204,12 +204,12 @@ EGLAPI EGLBoolean EGLAPIENTRY eglReleaseDeviceANGLE(EGLDeviceEXT device); ...@@ -204,12 +204,12 @@ EGLAPI EGLBoolean EGLAPIENTRY eglReleaseDeviceANGLE(EGLDeviceEXT device);
typedef EGLint (EGLAPIENTRYP PFNEGLPROGRAMCACHEGETATTRIBANGLEPROC) (EGLDisplay dpy, EGLenum attrib); typedef EGLint (EGLAPIENTRYP PFNEGLPROGRAMCACHEGETATTRIBANGLEPROC) (EGLDisplay dpy, EGLenum attrib);
typedef void (EGLAPIENTRYP PFNEGLPROGRAMCACHEQUERYANGLEPROC) (EGLDisplay dpy, EGLint index, void *key, EGLint *keysize, void *binary, EGLint *binarysize); typedef void (EGLAPIENTRYP PFNEGLPROGRAMCACHEQUERYANGLEPROC) (EGLDisplay dpy, EGLint index, void *key, EGLint *keysize, void *binary, EGLint *binarysize);
typedef void (EGLAPIENTRYP PFNEGLPROGRAMCACHEPOPULATEANGLEPROC) (EGLDisplay dpy, const void *key, EGLint keysize, const void *binary, EGLint binarysize); typedef void (EGLAPIENTRYP PFNEGLPROGRAMCACHEPOPULATEANGLEPROC) (EGLDisplay dpy, const void *key, EGLint keysize, const void *binary, EGLint binarysize);
typedef EGLint (EGLAPIENTRYP PFNEGLPROGRAMCACHERESIZEANGLEPROC) (EGLDisplay dpy, EGLint limit, EGLenum mode); typedef EGLint (EGLAPIENTRYP PFNEGLPROGRAMCACHERESIZEANGLEPROC) (EGLDisplay dpy, EGLint limit, EGLint mode);
#ifdef EGL_EGLEXT_PROTOTYPES #ifdef EGL_EGLEXT_PROTOTYPES
EGLAPI EGLint EGLAPIENTRY eglProgramCacheGetAttribANGLE(EGLDisplay dpy, EGLenum attrib); EGLAPI EGLint EGLAPIENTRY eglProgramCacheGetAttribANGLE(EGLDisplay dpy, EGLenum attrib);
EGLAPI void EGLAPIENTRY eglProgramCacheQueryANGLE(EGLDisplay dpy, EGLint index, void *key, EGLint *keysize, void *binary, EGLint *binarysize); EGLAPI void EGLAPIENTRY eglProgramCacheQueryANGLE(EGLDisplay dpy, EGLint index, void *key, EGLint *keysize, void *binary, EGLint *binarysize);
EGLAPI void EGLAPIENTRY eglProgramCachePopulateANGLE(EGLDisplay dpy, const void *key, EGLint keysize, const void *binary, EGLint binarysize); EGLAPI void EGLAPIENTRY eglProgramCachePopulateANGLE(EGLDisplay dpy, const void *key, EGLint keysize, const void *binary, EGLint binarysize);
EGLAPI EGLint EGLAPIENTRY eglProgramCacheResizeANGLE(EGLDisplay dpy, EGLint limit, EGLenum mode); EGLAPI EGLint EGLAPIENTRY eglProgramCacheResizeANGLE(EGLDisplay dpy, EGLint limit, EGLint mode);
#endif #endif
#endif /* EGL_ANGLE_program_cache_control */ #endif /* EGL_ANGLE_program_cache_control */
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
"scripts/entry_point_packed_gl_enums.json": "scripts/entry_point_packed_gl_enums.json":
"846be5dc8cb36076207699b025633fcc", "846be5dc8cb36076207699b025633fcc",
"scripts/generate_entry_points.py": "scripts/generate_entry_points.py":
"aae0f372d7db77f2cafa40f20c5a68d5", "06fac560bdbe1a51d7a5d0b5985dc894",
"scripts/gl.xml": "scripts/gl.xml":
"f66967f3f3d696b5d8306fd80bbd49a8", "f66967f3f3d696b5d8306fd80bbd49a8",
"scripts/gl_angle_ext.xml": "scripts/gl_angle_ext.xml":
...@@ -153,6 +153,8 @@ ...@@ -153,6 +153,8 @@
"46f74a3b19fd7e243ddd47a7478ae818", "46f74a3b19fd7e243ddd47a7478ae818",
"src/libANGLE/validationGL4_autogen.h": "src/libANGLE/validationGL4_autogen.h":
"cbe3f917024a93a3adcbd2806f3e951f", "cbe3f917024a93a3adcbd2806f3e951f",
"src/libEGL/libEGL_autogen.cpp":
"e6a94332f3bbea212b9a5df9654b59f8",
"src/libGL/entry_points_gl_1_0_autogen.cpp": "src/libGL/entry_points_gl_1_0_autogen.cpp":
"cb974a5a4230f15b0de83a3f690dc481", "cb974a5a4230f15b0de83a3f690dc481",
"src/libGL/entry_points_gl_1_0_autogen.h": "src/libGL/entry_points_gl_1_0_autogen.h":
......
...@@ -233,13 +233,21 @@ CONTEXT_HEADER = """\ ...@@ -233,13 +233,21 @@ CONTEXT_HEADER = """\
CONTEXT_DECL_FORMAT = """ {return_type} {name_lower_no_suffix}({internal_params}){maybe_const}; \\""" CONTEXT_DECL_FORMAT = """ {return_type} {name_lower_no_suffix}({internal_params}){maybe_const}; \\"""
LIBGLES_ENTRY_POINT_DEF = """\ TEMPLATE_GL_ENTRY_POINT_EXPORT = """\
{return_type}GL_APIENTRY gl{name}{explicit_context_suffix}({explicit_context_param}{explicit_context_comma}{params}) {return_type}GL_APIENTRY gl{name}{explicit_context_suffix}({explicit_context_param}{explicit_context_comma}{params})
{{ {{
return gl::{name}{explicit_context_suffix}({explicit_context_internal_param}{explicit_context_comma}{internal_params}); return gl::{name}{explicit_context_suffix}({explicit_context_internal_param}{explicit_context_comma}{internal_params});
}} }}
""" """
TEMPLATE_EGL_ENTRY_POINT_EXPORT = """\
{return_type}EGLAPIENTRY egl{name}({params})
{{
EnsureEGLLoaded();
return EGL_{name}({internal_params});
}}
"""
TEMPLATE_GLEXT_EXPLICIT_CONTEXT_INC = """\ TEMPLATE_GLEXT_EXPLICIT_CONTEXT_INC = """\
// GENERATED FILE - DO NOT EDIT. // GENERATED FILE - DO NOT EDIT.
// Generated by {script_name} using data from {data_source_name}. // Generated by {script_name} using data from {data_source_name}.
...@@ -582,6 +590,99 @@ EGL_EXT_HEADER_INCLUDES = """\ ...@@ -582,6 +590,99 @@ EGL_EXT_HEADER_INCLUDES = """\
#include <export.h> #include <export.h>
""" """
LIBGLESV2_EXPORT_INCLUDES = """
#include "angle_gl.h"
#include "libGLESv2/entry_points_gles_1_0_autogen.h"
#include "libGLESv2/entry_points_gles_2_0_autogen.h"
#include "libGLESv2/entry_points_gles_3_0_autogen.h"
#include "libGLESv2/entry_points_gles_3_1_autogen.h"
#include "libGLESv2/entry_points_gles_3_2_autogen.h"
#include "libGLESv2/entry_points_gles_ext_autogen.h"
#include "common/event_tracer.h"
"""
LIBGL_EXPORT_INCLUDES = """
#include "angle_gl.h"
#include "libGL/entry_points_gl_1_0_autogen.h"
#include "libGL/entry_points_gl_1_1_autogen.h"
#include "libGL/entry_points_gl_1_2_autogen.h"
#include "libGL/entry_points_gl_1_3_autogen.h"
#include "libGL/entry_points_gl_1_4_autogen.h"
#include "libGL/entry_points_gl_1_5_autogen.h"
#include "libGL/entry_points_gl_2_0_autogen.h"
#include "libGL/entry_points_gl_2_1_autogen.h"
#include "libGL/entry_points_gl_3_0_autogen.h"
#include "libGL/entry_points_gl_3_1_autogen.h"
#include "libGL/entry_points_gl_3_2_autogen.h"
#include "libGL/entry_points_gl_3_3_autogen.h"
#include "libGL/entry_points_gl_4_0_autogen.h"
#include "libGL/entry_points_gl_4_1_autogen.h"
#include "libGL/entry_points_gl_4_2_autogen.h"
#include "libGL/entry_points_gl_4_3_autogen.h"
#include "libGL/entry_points_gl_4_4_autogen.h"
#include "libGL/entry_points_gl_4_5_autogen.h"
#include "libGL/entry_points_gl_4_6_autogen.h"
#include "common/event_tracer.h"
"""
LIBEGL_EXPORT_INCLUDES_AND_PREAMBLE = """
#include "anglebase/no_destructor.h"
#include "common/system_utils.h"
#include <memory>
#if defined(ANGLE_USE_EGL_LOADER)
# include "libEGL/egl_loader_autogen.h"
#else
# include "libGLESv2/entry_points_egl_autogen.h"
# include "libGLESv2/entry_points_egl_ext_autogen.h"
#endif // defined(ANGLE_USE_EGL_LOADER)
namespace
{
#if defined(ANGLE_USE_EGL_LOADER)
bool gLoaded = false;
std::unique_ptr<angle::Library> &EntryPointsLib()
{
static angle::base::NoDestructor<std::unique_ptr<angle::Library>> sEntryPointsLib;
return *sEntryPointsLib;
}
angle::GenericProc KHRONOS_APIENTRY GlobalLoad(const char *symbol)
{
return reinterpret_cast<angle::GenericProc>(EntryPointsLib()->getSymbol(symbol));
}
void EnsureEGLLoaded()
{
if (gLoaded)
{
return;
}
EntryPointsLib().reset(
angle::OpenSharedLibrary(ANGLE_GLESV2_LIBRARY_NAME, angle::SearchType::ApplicationDir));
angle::LoadEGL_EGL(GlobalLoad);
if (!EGL_GetPlatformDisplay)
{
fprintf(stderr, "Error loading EGL entry points.\\n");
}
else
{
gLoaded = true;
}
}
#else
void EnsureEGLLoaded() {}
#endif // defined(ANGLE_USE_EGL_LOADER)
} // anonymous namespace
"""
TEMPLATE_EVENT_COMMENT = """\ TEMPLATE_EVENT_COMMENT = """\
// Don't run the EVENT() macro on the EXT_debug_marker entry points. // Don't run the EVENT() macro on the EXT_debug_marker entry points.
// It can interfere with the debug events being set by the caller. // It can interfere with the debug events being set by the caller.
...@@ -1192,11 +1293,11 @@ def format_context_decl(api, cmd_name, proto, params, template, cmd_packed_gl_en ...@@ -1192,11 +1293,11 @@ def format_context_decl(api, cmd_name, proto, params, template, cmd_packed_gl_en
maybe_const=maybe_const) maybe_const=maybe_const)
def format_libgles_entry_point_def(cmd_name, proto, params, is_explicit_context): def format_entry_point_export(cmd_name, proto, params, is_explicit_context, template):
internal_params = [just_the_name(param) for param in params] internal_params = [just_the_name(param) for param in params]
return_type = proto[:-len(cmd_name)] return_type = proto[:-len(cmd_name)]
return LIBGLES_ENTRY_POINT_DEF.format( return template.format(
name=strip_api_prefix(cmd_name), name=strip_api_prefix(cmd_name),
return_type=return_type, return_type=return_type,
params=", ".join(params), params=", ".join(params),
...@@ -1266,8 +1367,10 @@ def get_entry_points(api, ...@@ -1266,8 +1367,10 @@ def get_entry_points(api,
format_entry_point_def(api, command, cmd_name, proto_text, param_text, format_entry_point_def(api, command, cmd_name, proto_text, param_text,
is_explicit_context, cmd_packed_gl_enums, packed_param_types)) is_explicit_context, cmd_packed_gl_enums, packed_param_types))
export_template = TEMPLATE_EGL_ENTRY_POINT_EXPORT if api == "EGL" else TEMPLATE_GL_ENTRY_POINT_EXPORT
export_defs.append( export_defs.append(
format_libgles_entry_point_def(cmd_name, proto_text, param_text, is_explicit_context)) format_entry_point_export(cmd_name, proto_text, param_text, is_explicit_context,
export_template))
validation_protos.append( validation_protos.append(
format_validation_proto(api, cmd_name, param_text, cmd_packed_gl_enums, format_validation_proto(api, cmd_name, param_text, cmd_packed_gl_enums,
...@@ -1904,6 +2007,7 @@ def main(): ...@@ -1904,6 +2007,7 @@ def main():
'../src/libANGLE/validationGL44_autogen.h', '../src/libANGLE/validationGL44_autogen.h',
'../src/libANGLE/validationGL45_autogen.h', '../src/libANGLE/validationGL45_autogen.h',
'../src/libANGLE/validationGL46_autogen.h', '../src/libANGLE/validationGL46_autogen.h',
'../src/libEGL/libEGL_autogen.cpp',
'../src/libGLESv2/entry_points_egl_autogen.h', '../src/libGLESv2/entry_points_egl_autogen.h',
'../src/libGLESv2/entry_points_egl_ext_autogen.h', '../src/libGLESv2/entry_points_egl_ext_autogen.h',
'../src/libGLESv2/entry_points_gles_1_0_autogen.cpp', '../src/libGLESv2/entry_points_gles_1_0_autogen.cpp',
...@@ -2258,6 +2362,7 @@ def main(): ...@@ -2258,6 +2362,7 @@ def main():
egl_validation_protos = [] egl_validation_protos = []
egl_decls = [] egl_decls = []
egl_defs = [] egl_defs = []
libegl_ep_defs = []
for major_version, minor_version in [[1, 0], [1, 1], [1, 2], [1, 3], [1, 4], [1, 5]]: for major_version, minor_version in [[1, 0], [1, 1], [1, 2], [1, 3], [1, 4], [1, 5]]:
version = "%d_%d" % (major_version, minor_version) version = "%d_%d" % (major_version, minor_version)
...@@ -2275,7 +2380,7 @@ def main(): ...@@ -2275,7 +2380,7 @@ def main():
if not egl_version_commands: if not egl_version_commands:
continue continue
decls, defs, _, validation_protos, _, _, _ = get_entry_points( decls, defs, export_defs, validation_protos, _, _, _ = get_entry_points(
EGL, eglxml.all_commands, egl_version_commands, False, egl_param_types, EGL, eglxml.all_commands, egl_version_commands, False, egl_param_types,
cmd_packed_egl_enums, EGL_PACKED_TYPES) cmd_packed_egl_enums, EGL_PACKED_TYPES)
...@@ -2284,6 +2389,7 @@ def main(): ...@@ -2284,6 +2389,7 @@ def main():
egl_validation_protos += [comment] + validation_protos egl_validation_protos += [comment] + validation_protos
egl_decls += [comment] + decls egl_decls += [comment] + decls
egl_defs += [comment] + defs egl_defs += [comment] + defs
libegl_ep_defs += [comment] + export_defs
write_file("egl", "EGL", TEMPLATE_ENTRY_POINT_HEADER, "\n".join(egl_decls), "h", write_file("egl", "EGL", TEMPLATE_ENTRY_POINT_HEADER, "\n".join(egl_decls), "h",
EGL_HEADER_INCLUDES, "libGLESv2", "egl.xml", "extern \"C\"") EGL_HEADER_INCLUDES, "libGLESv2", "egl.xml", "extern \"C\"")
...@@ -2299,7 +2405,7 @@ def main(): ...@@ -2299,7 +2405,7 @@ def main():
continue continue
# Detect and filter duplicate extensions. # Detect and filter duplicate extensions.
decls, defs, _, validation_protos, _, _, _ = get_entry_points( decls, defs, export_defs, validation_protos, _, _, _ = get_entry_points(
EGL, eglxml.all_commands, ext_cmd_names, False, egl_param_types, cmd_packed_egl_enums, EGL, eglxml.all_commands, ext_cmd_names, False, egl_param_types, cmd_packed_egl_enums,
EGL_PACKED_TYPES) EGL_PACKED_TYPES)
...@@ -2313,6 +2419,7 @@ def main(): ...@@ -2313,6 +2419,7 @@ def main():
egl_validation_protos += [comment] + validation_protos egl_validation_protos += [comment] + validation_protos
egl_ext_decls += [comment] + decls egl_ext_decls += [comment] + decls
egl_ext_defs += [comment] + defs egl_ext_defs += [comment] + defs
libegl_ep_defs += [comment] + export_defs
write_file("egl_ext", "EGL Extension", TEMPLATE_ENTRY_POINT_HEADER, "\n".join(egl_ext_decls), write_file("egl_ext", "EGL Extension", TEMPLATE_ENTRY_POINT_HEADER, "\n".join(egl_ext_decls),
"h", EGL_EXT_HEADER_INCLUDES, "libGLESv2", "egl.xml and egl_angle_ext.xml", "h", EGL_EXT_HEADER_INCLUDES, "libGLESv2", "egl.xml and egl_angle_ext.xml",
...@@ -2419,50 +2526,13 @@ def main(): ...@@ -2419,50 +2526,13 @@ def main():
out.write(entry_points_enum_source) out.write(entry_points_enum_source)
out.close() out.close()
source_includes = """ write_export_files("\n".join([item for item in libgles_ep_defs]), LIBGLESV2_EXPORT_INCLUDES,
#include "angle_gl.h"
#include "libGLESv2/entry_points_gles_1_0_autogen.h"
#include "libGLESv2/entry_points_gles_2_0_autogen.h"
#include "libGLESv2/entry_points_gles_3_0_autogen.h"
#include "libGLESv2/entry_points_gles_3_1_autogen.h"
#include "libGLESv2/entry_points_gles_3_2_autogen.h"
#include "libGLESv2/entry_points_gles_ext_autogen.h"
#include "common/event_tracer.h"
"""
write_export_files("\n".join([item for item in libgles_ep_defs]), source_includes,
"gl.xml and gl_angle_ext.xml", "libGLESv2", "OpenGL ES") "gl.xml and gl_angle_ext.xml", "libGLESv2", "OpenGL ES")
write_export_files("\n".join([item for item in libgl_ep_defs]), LIBGL_EXPORT_INCLUDES,
source_includes = """
#include "angle_gl.h"
#include "libGL/entry_points_gl_1_0_autogen.h"
#include "libGL/entry_points_gl_1_1_autogen.h"
#include "libGL/entry_points_gl_1_2_autogen.h"
#include "libGL/entry_points_gl_1_3_autogen.h"
#include "libGL/entry_points_gl_1_4_autogen.h"
#include "libGL/entry_points_gl_1_5_autogen.h"
#include "libGL/entry_points_gl_2_0_autogen.h"
#include "libGL/entry_points_gl_2_1_autogen.h"
#include "libGL/entry_points_gl_3_0_autogen.h"
#include "libGL/entry_points_gl_3_1_autogen.h"
#include "libGL/entry_points_gl_3_2_autogen.h"
#include "libGL/entry_points_gl_3_3_autogen.h"
#include "libGL/entry_points_gl_4_0_autogen.h"
#include "libGL/entry_points_gl_4_1_autogen.h"
#include "libGL/entry_points_gl_4_2_autogen.h"
#include "libGL/entry_points_gl_4_3_autogen.h"
#include "libGL/entry_points_gl_4_4_autogen.h"
#include "libGL/entry_points_gl_4_5_autogen.h"
#include "libGL/entry_points_gl_4_6_autogen.h"
#include "common/event_tracer.h"
"""
write_export_files("\n".join([item for item in libgl_ep_defs]), source_includes,
"gl.xml and wgl.xml", "libGL", "Windows GL") "gl.xml and wgl.xml", "libGL", "Windows GL")
write_export_files("\n".join([item for item in libegl_ep_defs]),
LIBEGL_EXPORT_INCLUDES_AND_PREAMBLE, "egl.xml and egl_angle_ext.xml",
"libEGL", "EGL")
libgles_ep_exports += get_egl_exports() libgles_ep_exports += get_egl_exports()
......
...@@ -604,7 +604,7 @@ if (is_win) { ...@@ -604,7 +604,7 @@ if (is_win) {
libegl_sources = [ libegl_sources = [
"src/libEGL/egl_loader_autogen.h", "src/libEGL/egl_loader_autogen.h",
"src/libEGL/libEGL.cpp", "src/libEGL/libEGL_autogen.cpp",
"src/libEGL/resource.h", "src/libEGL/resource.h",
"src/libGLESv2/entry_points_egl_autogen.h", "src/libGLESv2/entry_points_egl_autogen.h",
"src/libGLESv2/entry_points_egl_ext_autogen.h", "src/libGLESv2/entry_points_egl_ext_autogen.h",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment