Add generator for packed GL enums.
For testing this also converts two unimportant GLenums, gl::BufferUsage
and gl::CullModeFace.
BUG=angleproject:2169
Change-Id: If1e86a97d0fed3fd567303aca6506ec579503076
Reviewed-on: https://chromium-review.googlesource.com/688000
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/scripts/generate_entry_points.py b/scripts/generate_entry_points.py
index 1b08d8f..731d516 100644
--- a/scripts/generate_entry_points.py
+++ b/scripts/generate_entry_points.py
@@ -7,7 +7,7 @@
# generate_entry_points.py:
# Generates the OpenGL bindings and entry point layers for ANGLE.
-import sys, os, pprint
+import sys, os, pprint, json
import xml.etree.ElementTree as etree
from datetime import date
@@ -85,12 +85,12 @@
Context *context = {context_getter}();
if (context)
- {{
- context->gatherParams<EntryPoint::{name}>({pass_params});
+ {{{packed_gl_enum_conversions}
+ context->gatherParams<EntryPoint::{name}>({internal_params});
if (context->skipValidation() || Validate{name}({validate_params}))
{{
- {return_if_needed}context->{name_lower}({pass_params});
+ {return_if_needed}context->{name_lower}({internal_params});
}}
}}
{default_return_if_needed}}}
@@ -132,6 +132,9 @@
entry_point_defs_gles_3_0 = []
cmd_names = []
+with open(script_relative('entry_point_packed_gl_enums.json')) as f:
+ cmd_packed_gl_enums = json.loads(f.read())
+
def format_entry_point_decl(cmd_name, proto, params):
return template_entry_point_decl.format(
name = cmd_name[2:],
@@ -149,6 +152,13 @@
def just_the_name(param):
return param[type_name_sep_index(param)+1:]
+def just_the_name_packed(param, reserved_set):
+ name = just_the_name(param)
+ if name in reserved_set:
+ return name + 'Packed'
+ else:
+ return name
+
format_dict = {
"GLbitfield": "0x%X",
"GLboolean": "%u",
@@ -185,6 +195,17 @@
return "GetValidGlobalContext"
def format_entry_point_def(cmd_name, proto, params):
+ packed_gl_enums = cmd_packed_gl_enums.get(cmd_name, {})
+ internal_params = [just_the_name_packed(param, packed_gl_enums) for param in params]
+ packed_gl_enum_conversions = []
+ for param in params:
+ name = just_the_name(param)
+ if name in packed_gl_enums:
+ internal_name = name + "Packed"
+ internal_type = packed_gl_enums[name]
+ packed_gl_enum_conversions += ["\n " + internal_type + " " + internal_name +" = FromGLenum<" +
+ internal_type + ">(" + name + ");"]
+
pass_params = [just_the_name(param) for param in params]
format_params = [param_format_string(param) for param in params]
return_type = proto[:-len(cmd_name)]
@@ -194,9 +215,11 @@
name_lower = cmd_name[2:3].lower() + cmd_name[3:],
return_type = return_type,
params = ", ".join(params),
+ internal_params = ", ".join(internal_params),
+ packed_gl_enum_conversions = "".join(packed_gl_enum_conversions),
pass_params = ", ".join(pass_params),
comma_if_needed = ", " if len(params) > 0 else "",
- validate_params = ", ".join(["context"] + pass_params),
+ validate_params = ", ".join(["context"] + internal_params),
format_params = ", ".join(format_params),
return_if_needed = "" if default_return == "" else "return ",
default_return_if_needed = "" if default_return == "" else "\n return " + default_return + ";\n",