aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/code_generation_hashes/GL_EGL_WGL_loader.json4
-rw-r--r--scripts/code_generation_hashes/GL_EGL_entry_points.json8
-rwxr-xr-xscripts/generate_entry_points.py138
-rwxr-xr-xscripts/generate_loader.py51
4 files changed, 58 insertions, 143 deletions
diff --git a/scripts/code_generation_hashes/GL_EGL_WGL_loader.json b/scripts/code_generation_hashes/GL_EGL_WGL_loader.json
index 1bb9d60886..38b81c538e 100644
--- a/scripts/code_generation_hashes/GL_EGL_WGL_loader.json
+++ b/scripts/code_generation_hashes/GL_EGL_WGL_loader.json
@@ -6,7 +6,7 @@
"scripts/egl_angle_ext.xml":
"5bcc01462b355d933cf3ada15198fb68",
"scripts/generate_loader.py":
- "e24af68efd9f8149b53225e4b07a20aa",
+ "5592f86f5841d24afa660c67330426d6",
"scripts/gl.xml":
"2a73a58a7e26d8676a2c0af6d528cae6",
"scripts/gl_angle_ext.xml":
@@ -19,8 +19,6 @@
"3740eb7bd4928f17c4239ab294930469",
"src/libEGL/egl_loader_autogen.h":
"9cbf4d491497058a32642865eb032276",
- "src/libOpenCL/cl_loader_autogen.cpp":
- "1251dfd7f095459ff076abb02a5bbf79",
"src/tests/restricted_traces/trace_egl_loader_autogen.cpp":
"ab1ce9e72e1e248b13302349f2228a89",
"src/tests/restricted_traces/trace_egl_loader_autogen.h":
diff --git a/scripts/code_generation_hashes/GL_EGL_entry_points.json b/scripts/code_generation_hashes/GL_EGL_entry_points.json
index 06097ac949..ae80c21f75 100644
--- a/scripts/code_generation_hashes/GL_EGL_entry_points.json
+++ b/scripts/code_generation_hashes/GL_EGL_entry_points.json
@@ -10,7 +10,7 @@
"scripts/entry_point_packed_gl_enums.json":
"4f7b43863a5e61991bba4010db463679",
"scripts/generate_entry_points.py":
- "ce49f151aac3d4a163686d7e45bcb03e",
+ "ef46ad67466c14b792ca7e9ac1cea8d7",
"scripts/gl.xml":
"2a73a58a7e26d8676a2c0af6d528cae6",
"scripts/gl_angle_ext.xml":
@@ -130,9 +130,9 @@
"src/libGLESv2/egl_stubs_autogen.h":
"6439daa350c1663e71dd0af37dcc91df",
"src/libGLESv2/entry_points_cl_autogen.cpp":
- "2c43ce51701c4499003638fa30de340e",
+ "2de1fb4947c632a11803a459b3fc2b25",
"src/libGLESv2/entry_points_cl_autogen.h":
- "129fa7936c8bc6a20de9269da0c3c7d3",
+ "c53bd6b7025be98440ae9ca90161d550",
"src/libGLESv2/entry_points_egl_autogen.cpp":
"e7b708af1c8de435532058eb165d421e",
"src/libGLESv2/entry_points_egl_autogen.h":
@@ -174,5 +174,5 @@
"src/libGLESv2/libGLESv2_with_capture_autogen.def":
"6b895f17f1a745f626a7534f14971fcd",
"src/libOpenCL/libOpenCL_autogen.cpp":
- "be80b03e4d121921f4a27aba9ad16aa1"
+ "06d55739c92ece6b669074451634b106"
} \ No newline at end of file
diff --git a/scripts/generate_entry_points.py b/scripts/generate_entry_points.py
index a5d92140a4..b931ed09df 100755
--- a/scripts/generate_entry_points.py
+++ b/scripts/generate_entry_points.py
@@ -58,9 +58,7 @@ TEMPLATE_ENTRY_POINT_HEADER = """\
{includes}
-extern "C" {{
{entry_points}
-}} // extern "C"
#endif // {lib}_ENTRY_POINTS_{annotation_upper}_AUTOGEN_H_
"""
@@ -78,9 +76,7 @@ TEMPLATE_ENTRY_POINT_SOURCE = """\
{includes}
-extern "C" {{
{entry_points}
-}} // extern "C"
"""
TEMPLATE_ENTRY_POINTS_ENUM_HEADER = """\
@@ -159,7 +155,7 @@ extern "C" {{
}} // extern "C"
"""
-TEMPLATE_ENTRY_POINT_DECL = """ANGLE_EXPORT {return_type} {export_def} {name}{explicit_context_suffix}({explicit_context_param}{explicit_context_comma}{params});"""
+TEMPLATE_ENTRY_POINT_DECL = """{angle_export}{return_type} {export_def} {name}{explicit_context_suffix}({explicit_context_param}{explicit_context_comma}{params});"""
TEMPLATE_GLES_ENTRY_POINT_NO_RETURN = """\
void GL_APIENTRY GL_{name}{explicit_context_suffix}({explicit_context_param}{explicit_context_comma}{params})
@@ -247,7 +243,7 @@ TEMPLATE_EGL_ENTRY_POINT_WITH_RETURN = """\
"""
TEMPLATE_CL_ENTRY_POINT_NO_RETURN = """\
-void CL_API_CALL CL_{name}({params})
+void CL_API_CALL cl{name}({params})
{{
CL_EVENT({name}, "{format_params}"{comma_if_needed}{pass_params});
@@ -260,7 +256,7 @@ void CL_API_CALL CL_{name}({params})
"""
TEMPLATE_CL_ENTRY_POINT_WITH_RETURN_ERROR = """\
-cl_int CL_API_CALL CL_{name}({params})
+cl_int CL_API_CALL cl{name}({params})
{{
CL_EVENT({name}, "{format_params}"{comma_if_needed}{pass_params});
@@ -268,12 +264,12 @@ cl_int CL_API_CALL CL_{name}({params})
ANGLE_CL_VALIDATE_ERROR({name}{comma_if_needed}{internal_params});
- return {return_cast}({name}({internal_params}));
+ return {name}({internal_params});
}}
"""
TEMPLATE_CL_ENTRY_POINT_WITH_RETURN_POINTER = """\
-{return_type} CL_API_CALL CL_{name}({params})
+{return_type} CL_API_CALL cl{name}({params})
{{
CL_EVENT({name}, "{format_params}"{comma_if_needed}{pass_params});
@@ -281,7 +277,7 @@ TEMPLATE_CL_ENTRY_POINT_WITH_RETURN_POINTER = """\
ANGLE_CL_VALIDATE_POINTER({name}{comma_if_needed}{internal_params});
- return {return_cast}({name}({internal_params}));
+ return {name}({internal_params});
}}
"""
@@ -373,8 +369,7 @@ CONTEXT_DECL_FORMAT = """ {return_type} {name_lower_no_suffix}({internal_para
TEMPLATE_CL_ENTRY_POINT_EXPORT = """\
{return_type} CL_API_CALL cl{name}({params})
{{
- EnsureCLLoaded();
- return cl_loader.cl{name}({internal_params});
+ return cl::GetDispatch().cl{name}({internal_params});
}}
"""
@@ -875,50 +870,8 @@ EGL_EXT_SOURCE_INCLUDES = """\
using namespace egl;
"""
-LIBCL_EXPORT_INCLUDES_AND_PREAMBLE = """
-#include "cl_loader.h"
-
-#include "anglebase/no_destructor.h"
-#include "common/system_utils.h"
-
-#include <iostream>
-#include <memory>
-
-namespace
-{
-bool gLoaded = false;
-
-std::unique_ptr<angle::Library> &EntryPointsLib()
-{
- static angle::base::NoDestructor<std::unique_ptr<angle::Library>> sEntryPointsLib;
- return *sEntryPointsLib;
-}
-
-angle::GenericProc CL_API_CALL GlobalLoad(const char *symbol)
-{
- return reinterpret_cast<angle::GenericProc>(EntryPointsLib()->getSymbol(symbol));
-}
-
-void EnsureCLLoaded()
-{
- if (gLoaded)
- {
- return;
- }
-
- EntryPointsLib().reset(
- angle::OpenSharedLibrary(ANGLE_GLESV2_LIBRARY_NAME, angle::SearchType::ApplicationDir));
- angle::LoadCL(GlobalLoad);
- if (!cl_loader.clGetDeviceIDs)
- {
- std::cerr << "Error loading CL entry points." << std::endl;
- }
- else
- {
- gLoaded = true;
- }
-}
-} // anonymous namespace
+LIBCL_EXPORT_INCLUDES = """
+#include "libOpenCL/dispatch.h"
"""
LIBGLESV2_EXPORT_INCLUDES = """
@@ -1000,23 +953,15 @@ void EnsureEGLLoaded() {}
"""
LIBCL_HEADER_INCLUDES = """\
-#include "export.h"
-
-#ifndef CL_API_ENTRY
-# define CL_API_ENTRY ANGLE_EXPORT
-#endif
#include "angle_cl.h"
"""
LIBCL_SOURCE_INCLUDES = """\
-#include "entry_points_cl_autogen.h"
-
-#include "cl_stubs_autogen.h"
-#include "entry_points_cl_utils.h"
+#include "libGLESv2/entry_points_cl_autogen.h"
#include "libANGLE/validationCL_autogen.h"
-
-using namespace cl;
+#include "libGLESv2/cl_stubs_autogen.h"
+#include "libGLESv2/entry_points_cl_utils.h"
"""
TEMPLATE_EVENT_COMMENT = """\
@@ -1292,10 +1237,18 @@ def is_aliasing_excepted(api, cmd_name):
return api == apis.GLES and cmd_name in ALIASING_EXCEPTIONS
+def entry_point_export(api):
+ if api == apis.CL:
+ return ""
+ return "ANGLE_EXPORT "
+
+
def entry_point_prefix(api):
+ if api == apis.CL:
+ return "cl"
if api == apis.GLES:
- return "GL"
- return api
+ return "GL_"
+ return api + "_"
def get_api_entry_def(api):
@@ -1320,8 +1273,9 @@ def format_entry_point_decl(api, cmd_name, proto, params, is_explicit_context):
comma_if_needed = ", " if len(params) > 0 else ""
stripped = strip_api_prefix(cmd_name)
return TEMPLATE_ENTRY_POINT_DECL.format(
+ angle_export=entry_point_export(api),
export_def=get_api_entry_def(api),
- name="%s_%s" % (entry_point_prefix(api), stripped),
+ name="%s%s" % (entry_point_prefix(api), stripped),
return_type=proto[:-len(cmd_name)].strip(),
params=", ".join(params),
comma_if_needed=comma_if_needed,
@@ -1571,7 +1525,6 @@ def format_entry_point_def(api, command_node, cmd_name, proto, params, is_explic
pass_params = [param_print_argument(command_node, param) for param in params]
format_params = [param_format_string(param) for param in params]
return_type = proto[:-len(cmd_name)].strip()
- return_cast = "UnpackParam<" + return_type + ">" if return_type in packed_param_types else ""
default_return = default_return_value(cmd_name, return_type)
event_comment = TEMPLATE_EVENT_COMMENT if cmd_name in NO_EVENT_MARKER_EXCEPTIONS_LIST else ""
name_lower_no_suffix = strip_suffix(api, cmd_name[2:3].lower() + cmd_name[3:])
@@ -1583,8 +1536,6 @@ def format_entry_point_def(api, command_node, cmd_name, proto, params, is_explic
name_lower_no_suffix,
"return_type":
return_type,
- "return_cast":
- return_cast,
"params":
", ".join(params),
"internal_params":
@@ -2696,6 +2647,10 @@ def main():
all_commands_with_suffix.extend(xml.commands[version])
eps = GLEntryPoints(apis.GLES, xml, version_commands)
+ eps.decls.insert(0, "extern \"C\" {")
+ eps.decls.append("} // extern \"C\"")
+ eps.defs.insert(0, "extern \"C\" {")
+ eps.defs.append("} // extern \"C\"")
# Write the version as a comment before the first EP.
libgles_ep_exports.append("\n ; OpenGL ES %s" % comment)
@@ -2735,8 +2690,8 @@ def main():
write_capture_source(version, validation_annotation, comment, eps.capture_methods)
# After we finish with the main entry points, we process the extensions.
- extension_defs = []
- extension_decls = []
+ extension_decls = ["extern \"C\" {"]
+ extension_defs = ["extern \"C\" {"]
extension_commands = []
# Accumulated validation prototypes.
@@ -2862,8 +2817,8 @@ def main():
set([major for (major, minor) in registry_xml.DESKTOP_GL_VERSIONS])):
is_major = lambda ver: ver[0] == major_version
- ver_decls = []
- ver_defs = []
+ ver_decls = ["extern \"C\" {"]
+ ver_defs = ["extern \"C\" {"]
validation_protos = []
for _, minor_version in filter(is_major, registry_xml.DESKTOP_GL_VERSIONS):
@@ -2905,6 +2860,8 @@ def main():
ver_decls += [cpp_comment] + eps.decls
ver_defs += [cpp_comment] + eps.defs
+ ver_decls.append("} // extern \"C\"")
+ ver_defs.append("} // extern \"C\"")
annotation = "GL_%d" % major_version
name = "Desktop GL %s.x" % major_version
@@ -2924,8 +2881,8 @@ def main():
clxml = registry_xml.RegistryXML('cl.xml')
cl_validation_protos = []
- cl_decls = []
- cl_defs = []
+ cl_decls = ["namespace cl\n{"]
+ cl_defs = ["namespace cl\n{"]
libcl_ep_defs = []
libcl_windows_def_exports = []
cl_commands = []
@@ -2958,6 +2915,9 @@ def main():
cl_validation_protos += [comment] + eps.validation_protos
libcl_windows_def_exports += [win_def_comment] + get_exports(clxml.commands[version])
+ cl_decls.append("} // namespace cl")
+ cl_defs.append("} // namespace cl")
+
write_file("cl", "CL", TEMPLATE_ENTRY_POINT_HEADER, "\n".join(cl_decls), "h",
LIBCL_HEADER_INCLUDES, "libGLESv2", "cl.xml")
write_file("cl", "CL", TEMPLATE_ENTRY_POINT_SOURCE, "\n".join(cl_defs), "cpp",
@@ -2971,8 +2931,8 @@ def main():
eglxml = registry_xml.RegistryXML('egl.xml', 'egl_angle_ext.xml')
egl_validation_protos = []
- egl_decls = []
- egl_defs = []
+ egl_decls = ["extern \"C\" {"]
+ egl_defs = ["extern \"C\" {"]
libegl_ep_defs = []
libegl_windows_def_exports = []
egl_commands = []
@@ -3005,6 +2965,9 @@ def main():
egl_validation_protos += [comment] + eps.validation_protos
libegl_windows_def_exports += [win_def_comment] + get_exports(eglxml.commands[version])
+ egl_decls.append("} // extern \"C\"")
+ egl_defs.append("} // extern \"C\"")
+
write_file("egl", "EGL", TEMPLATE_ENTRY_POINT_HEADER, "\n".join(egl_decls), "h",
EGL_HEADER_INCLUDES, "libGLESv2", "egl.xml")
write_file("egl", "EGL", TEMPLATE_ENTRY_POINT_SOURCE, "\n".join(egl_defs), "cpp",
@@ -3013,8 +2976,8 @@ def main():
egl_commands, EGLEntryPoints.get_packed_enums(), EGL_PACKED_TYPES)
eglxml.AddExtensionCommands(registry_xml.supported_egl_extensions, ['egl'])
- egl_ext_decls = []
- egl_ext_defs = []
+ egl_ext_decls = ["extern \"C\" {"]
+ egl_ext_defs = ["extern \"C\" {"]
egl_ext_commands = []
for extension_name, ext_cmd_names in sorted(eglxml.ext_data.items()):
@@ -3042,6 +3005,9 @@ def main():
msg = "// %s is already defined.\n" % strip_api_prefix(dupe)
egl_ext_defs.append(msg)
+ egl_ext_decls.append("} // extern \"C\"")
+ egl_ext_defs.append("} // extern \"C\"")
+
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")
write_file("egl_ext", "EGL Extension", TEMPLATE_ENTRY_POINT_SOURCE, "\n".join(egl_ext_defs),
@@ -3072,6 +3038,8 @@ def main():
wgl_commands.remove("wglUseFontOutlines")
libgl_ep_exports += get_exports(wgl_commands)
+ extension_decls.append("} // extern \"C\"")
+ extension_defs.append("} // extern \"C\"")
write_file("gles_ext", "GLES extension", TEMPLATE_ENTRY_POINT_HEADER,
"\n".join([item for item in extension_decls]), "h", GLES_EXT_HEADER_INCLUDES,
@@ -3133,8 +3101,8 @@ def main():
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")
- write_export_files("\n".join([item for item in libcl_ep_defs]),
- LIBCL_EXPORT_INCLUDES_AND_PREAMBLE, "cl.xml", "libOpenCL", "CL")
+ write_export_files("\n".join([item for item in libcl_ep_defs]), LIBCL_EXPORT_INCLUDES,
+ "cl.xml", "libOpenCL", "CL")
libgles_ep_exports += get_egl_exports()
diff --git a/scripts/generate_loader.py b/scripts/generate_loader.py
index 24a7f5a34e..ef3a8a5bd3 100755
--- a/scripts/generate_loader.py
+++ b/scripts/generate_loader.py
@@ -102,32 +102,6 @@ def write_source(data_source_name,
out.close()
-def gen_libcl_loader():
-
- xml = registry_xml.RegistryXML("cl.xml")
- for major_version, minor_version in registry_xml.CL_VERSIONS:
- name_prefix = "CL_VERSION_"
- annotation = "%d_%d" % (major_version, minor_version)
- feature_name = "%s%s" % (name_prefix, annotation)
- xml.AddCommands(feature_name, annotation)
- all_cmds = xml.all_cmd_names.get_all_commands()
-
- path = os.path.join("..", "src", "libOpenCL")
- source_path = registry_xml.path_to(path, "cl_loader_autogen.cpp")
-
- with open(source_path, "w") as out:
- setter = " cl_loader.%s = reinterpret_cast<cl_api_%s>(loadProc(\"CL_%s\"));"
- setters = [setter % (cmd, cmd, cmd[2:]) for cmd in all_cmds]
-
- loader_source = template_cl_loader_cpp.format(
- script_name=os.path.basename(sys.argv[0]),
- data_source_name="cl.xml",
- set_pointers="\n".join(setters))
-
- out.write(loader_source)
- out.close()
-
-
def gen_libegl_loader():
data_source_name = "egl.xml and egl_angle_ext.xml"
@@ -294,7 +268,6 @@ def main():
if len(sys.argv) > 1:
inputs = registry_xml.xml_inputs
outputs = [
- '../src/libOpenCL/cl_loader_autogen.cpp',
'../src/libEGL/egl_loader_autogen.cpp',
'../src/libEGL/egl_loader_autogen.h',
'../util/egl_loader_autogen.cpp',
@@ -318,7 +291,6 @@ def main():
return 1
return 0
- gen_libcl_loader()
gen_libegl_loader()
gen_util_gles_and_egl_loaders()
gen_util_wgl_loader()
@@ -418,28 +390,5 @@ void {load_fn_name}(LoadProc loadProc)
}} // namespace angle
"""
-template_cl_loader_cpp = """// GENERATED FILE - DO NOT EDIT.
-// Generated by {script_name} using data from {data_source_name}.
-//
-// Copyright 2021 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.
-//
-// cl_loader_autogen.cpp:
-// Simple CL function loader.
-
-#include "cl_loader.h"
-
-cl_icd_dispatch cl_loader;
-
-namespace angle
-{{
-void LoadCL(LoadProc loadProc)
-{{
-{set_pointers}
-}}
-}} // namespace angle
-"""
-
if __name__ == '__main__':
sys.exit(main())