Commit ffa2cd04 by Jamie Madill Committed by Commit Bot

Entry Points: Speed up auto-gen.

This refactors the auto-generation script to use a simpler XML iteration. It will only query the Xpath once per script, instead of once per entry point. This speeds up execution significantly. Also this change sorts the entry points alphabetically instead of having them appear in the order they appear in the XML. This gives a more consistent ordering. Bug: angleproject:1309 Change-Id: Ifa1110af786b91ad0e6ff1cd3707e17666d398a5 Reviewed-on: https://chromium-review.googlesource.com/846419Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent 73618601
...@@ -236,20 +236,27 @@ def format_entry_point_def_oldstyle(cmd_name, proto, params): ...@@ -236,20 +236,27 @@ def format_entry_point_def_oldstyle(cmd_name, proto, params):
def path_to(folder, file): def path_to(folder, file):
return os.path.join(script_relative(".."), "src", folder, file) return os.path.join(script_relative(".."), "src", folder, file)
all_commands = root.findall('commands/command')
for major_version, minor_version in [[2, 0], [3, 0], [3, 1]]: for major_version, minor_version in [[2, 0], [3, 0], [3, 1]]:
gles_xpath = ".//feature[@name='GL_ES_VERSION_{}_{}']//command".format(major_version, minor_version) gles_xpath = ".//feature[@name='GL_ES_VERSION_{}_{}']//command".format(major_version, minor_version)
gles_commands = [cmd.attrib['name'] for cmd in root.findall(gles_xpath)] gles_commands = [cmd.attrib['name'] for cmd in root.findall(gles_xpath)]
entry_point_decls = [] entry_point_decls = []
entry_point_defs = [] entry_point_defs = []
for cmd_name in gles_commands:
command_xpath = "command/proto[name='" + cmd_name + "']/.." for command in all_commands:
command = commands.find(command_xpath) proto = command.find('proto')
params = ["".join(param.itertext()) for param in command.findall("./param")] cmd_name = proto.find('name').text
proto = "".join(command.find("./proto").itertext())
if cmd_name not in gles_commands:
continue
param_text = ["".join(param.itertext()) for param in command.findall('param')]
proto_text = "".join(proto.itertext())
cmd_names += [cmd_name] cmd_names += [cmd_name]
entry_point_decls += [format_entry_point_decl(cmd_name, proto, params)] entry_point_decls += [format_entry_point_decl(cmd_name, proto_text, param_text)]
entry_point_defs += [format_entry_point_def(cmd_name, proto, params)] entry_point_defs += [format_entry_point_def(cmd_name, proto_text, param_text)]
for type in ["header", "source"]: for type in ["header", "source"]:
if type == "header": if type == "header":
...@@ -284,7 +291,7 @@ for major_version, minor_version in [[2, 0], [3, 0], [3, 1]]: ...@@ -284,7 +291,7 @@ for major_version, minor_version in [[2, 0], [3, 0], [3, 1]]:
out.close() out.close()
# TODO(jmadill): Remove manually added entry points once we auto-gen them. # TODO(jmadill): Remove manually added entry points once we auto-gen them.
manual_cmd_names = ["Invalid"] + [cmd[2:] for cmd in cmd_names] + ["DrawElementsInstancedANGLE"] manual_cmd_names = ["Invalid"] + [cmd[2:] for cmd in sorted(cmd_names)] + ["DrawElementsInstancedANGLE"]
entry_points_enum = template_entry_points_enum_header.format( entry_points_enum = template_entry_points_enum_header.format(
script_name = os.path.basename(sys.argv[0]), script_name = os.path.basename(sys.argv[0]),
data_source_name = "gl.xml", data_source_name = "gl.xml",
......
...@@ -731,7 +731,7 @@ class DispatchTableGL : angle::NonCopyable ...@@ -731,7 +731,7 @@ class DispatchTableGL : angle::NonCopyable
PFNGLBLENDBARRIERPROC blendBarrier = nullptr; PFNGLBLENDBARRIERPROC blendBarrier = nullptr;
PFNGLPRIMITIVEBOUNDINGBOXPROC primitiveBoundingBox = nullptr; PFNGLPRIMITIVEBOUNDINGBOXPROC primitiveBoundingBox = nullptr;
// EXT_debug_marker // GL_EXT_debug_marker
PFNGLINSERTEVENTMARKEREXTPROC insertEventMarkerEXT = nullptr; PFNGLINSERTEVENTMARKEREXTPROC insertEventMarkerEXT = nullptr;
PFNGLPOPGROUPMARKEREXTPROC popGroupMarkerEXT = nullptr; PFNGLPOPGROUPMARKEREXTPROC popGroupMarkerEXT = nullptr;
PFNGLPUSHGROUPMARKEREXTPROC pushGroupMarkerEXT = nullptr; PFNGLPUSHGROUPMARKEREXTPROC pushGroupMarkerEXT = nullptr;
......
...@@ -922,22 +922,6 @@ void GL_APIENTRY GenBuffers(GLsizei n, GLuint *buffers) ...@@ -922,22 +922,6 @@ void GL_APIENTRY GenBuffers(GLsizei n, GLuint *buffers)
} }
} }
void GL_APIENTRY GenerateMipmap(GLenum target)
{
EVENT("(GLenum target = 0x%X)", target);
Context *context = GetValidGlobalContext();
if (context)
{
context->gatherParams<EntryPoint::GenerateMipmap>(target);
if (context->skipValidation() || ValidateGenerateMipmap(context, target))
{
context->generateMipmap(target);
}
}
}
void GL_APIENTRY GenFramebuffers(GLsizei n, GLuint *framebuffers) void GL_APIENTRY GenFramebuffers(GLsizei n, GLuint *framebuffers)
{ {
EVENT("(GLsizei n = %d, GLuint *framebuffers = 0x%0.8p)", n, framebuffers); EVENT("(GLsizei n = %d, GLuint *framebuffers = 0x%0.8p)", n, framebuffers);
...@@ -986,6 +970,22 @@ void GL_APIENTRY GenTextures(GLsizei n, GLuint *textures) ...@@ -986,6 +970,22 @@ void GL_APIENTRY GenTextures(GLsizei n, GLuint *textures)
} }
} }
void GL_APIENTRY GenerateMipmap(GLenum target)
{
EVENT("(GLenum target = 0x%X)", target);
Context *context = GetValidGlobalContext();
if (context)
{
context->gatherParams<EntryPoint::GenerateMipmap>(target);
if (context->skipValidation() || ValidateGenerateMipmap(context, target))
{
context->generateMipmap(target);
}
}
}
void GL_APIENTRY GetActiveAttrib(GLuint program, void GL_APIENTRY GetActiveAttrib(GLuint program,
GLuint index, GLuint index,
GLsizei bufSize, GLsizei bufSize,
...@@ -1190,23 +1190,6 @@ void GL_APIENTRY GetIntegerv(GLenum pname, GLint *data) ...@@ -1190,23 +1190,6 @@ void GL_APIENTRY GetIntegerv(GLenum pname, GLint *data)
} }
} }
void GL_APIENTRY GetProgramiv(GLuint program, GLenum pname, GLint *params)
{
EVENT("(GLuint program = %u, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", program, pname,
params);
Context *context = GetValidGlobalContext();
if (context)
{
context->gatherParams<EntryPoint::GetProgramiv>(program, pname, params);
if (context->skipValidation() || ValidateGetProgramiv(context, program, pname, params))
{
context->getProgramiv(program, pname, params);
}
}
}
void GL_APIENTRY GetProgramInfoLog(GLuint program, void GL_APIENTRY GetProgramInfoLog(GLuint program,
GLsizei bufSize, GLsizei bufSize,
GLsizei *length, GLsizei *length,
...@@ -1230,37 +1213,37 @@ void GL_APIENTRY GetProgramInfoLog(GLuint program, ...@@ -1230,37 +1213,37 @@ void GL_APIENTRY GetProgramInfoLog(GLuint program,
} }
} }
void GL_APIENTRY GetRenderbufferParameteriv(GLenum target, GLenum pname, GLint *params) void GL_APIENTRY GetProgramiv(GLuint program, GLenum pname, GLint *params)
{ {
EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", target, pname, EVENT("(GLuint program = %u, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", program, pname,
params); params);
Context *context = GetValidGlobalContext(); Context *context = GetValidGlobalContext();
if (context) if (context)
{ {
context->gatherParams<EntryPoint::GetRenderbufferParameteriv>(target, pname, params); context->gatherParams<EntryPoint::GetProgramiv>(program, pname, params);
if (context->skipValidation() || if (context->skipValidation() || ValidateGetProgramiv(context, program, pname, params))
ValidateGetRenderbufferParameteriv(context, target, pname, params))
{ {
context->getRenderbufferParameteriv(target, pname, params); context->getProgramiv(program, pname, params);
} }
} }
} }
void GL_APIENTRY GetShaderiv(GLuint shader, GLenum pname, GLint *params) void GL_APIENTRY GetRenderbufferParameteriv(GLenum target, GLenum pname, GLint *params)
{ {
EVENT("(GLuint shader = %u, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", shader, pname, EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", target, pname,
params); params);
Context *context = GetValidGlobalContext(); Context *context = GetValidGlobalContext();
if (context) if (context)
{ {
context->gatherParams<EntryPoint::GetShaderiv>(shader, pname, params); context->gatherParams<EntryPoint::GetRenderbufferParameteriv>(target, pname, params);
if (context->skipValidation() || ValidateGetShaderiv(context, shader, pname, params)) if (context->skipValidation() ||
ValidateGetRenderbufferParameteriv(context, target, pname, params))
{ {
context->getShaderiv(shader, pname, params); context->getRenderbufferParameteriv(target, pname, params);
} }
} }
} }
...@@ -1329,6 +1312,23 @@ void GL_APIENTRY GetShaderSource(GLuint shader, GLsizei bufSize, GLsizei *length ...@@ -1329,6 +1312,23 @@ void GL_APIENTRY GetShaderSource(GLuint shader, GLsizei bufSize, GLsizei *length
} }
} }
void GL_APIENTRY GetShaderiv(GLuint shader, GLenum pname, GLint *params)
{
EVENT("(GLuint shader = %u, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", shader, pname,
params);
Context *context = GetValidGlobalContext();
if (context)
{
context->gatherParams<EntryPoint::GetShaderiv>(shader, pname, params);
if (context->skipValidation() || ValidateGetShaderiv(context, shader, pname, params))
{
context->getShaderiv(shader, pname, params);
}
}
}
const GLubyte *GL_APIENTRY GetString(GLenum name) const GLubyte *GL_APIENTRY GetString(GLenum name)
{ {
EVENT("(GLenum name = 0x%X)", name); EVENT("(GLenum name = 0x%X)", name);
...@@ -1381,6 +1381,24 @@ void GL_APIENTRY GetTexParameteriv(GLenum target, GLenum pname, GLint *params) ...@@ -1381,6 +1381,24 @@ void GL_APIENTRY GetTexParameteriv(GLenum target, GLenum pname, GLint *params)
} }
} }
GLint GL_APIENTRY GetUniformLocation(GLuint program, const GLchar *name)
{
EVENT("(GLuint program = %u, const GLchar *name = 0x%0.8p)", program, name);
Context *context = GetValidGlobalContext();
if (context)
{
context->gatherParams<EntryPoint::GetUniformLocation>(program, name);
if (context->skipValidation() || ValidateGetUniformLocation(context, program, name))
{
return context->getUniformLocation(program, name);
}
}
return GetDefaultReturnValue<EntryPoint::GetUniformLocation, GLint>();
}
void GL_APIENTRY GetUniformfv(GLuint program, GLint location, GLfloat *params) void GL_APIENTRY GetUniformfv(GLuint program, GLint location, GLfloat *params)
{ {
EVENT("(GLuint program = %u, GLint location = %d, GLfloat *params = 0x%0.8p)", program, EVENT("(GLuint program = %u, GLint location = %d, GLfloat *params = 0x%0.8p)", program,
...@@ -1415,22 +1433,22 @@ void GL_APIENTRY GetUniformiv(GLuint program, GLint location, GLint *params) ...@@ -1415,22 +1433,22 @@ void GL_APIENTRY GetUniformiv(GLuint program, GLint location, GLint *params)
} }
} }
GLint GL_APIENTRY GetUniformLocation(GLuint program, const GLchar *name) void GL_APIENTRY GetVertexAttribPointerv(GLuint index, GLenum pname, void **pointer)
{ {
EVENT("(GLuint program = %u, const GLchar *name = 0x%0.8p)", program, name); EVENT("(GLuint index = %u, GLenum pname = 0x%X, void **pointer = 0x%0.8p)", index, pname,
pointer);
Context *context = GetValidGlobalContext(); Context *context = GetValidGlobalContext();
if (context) if (context)
{ {
context->gatherParams<EntryPoint::GetUniformLocation>(program, name); context->gatherParams<EntryPoint::GetVertexAttribPointerv>(index, pname, pointer);
if (context->skipValidation() || ValidateGetUniformLocation(context, program, name)) if (context->skipValidation() ||
ValidateGetVertexAttribPointerv(context, index, pname, pointer))
{ {
return context->getUniformLocation(program, name); context->getVertexAttribPointerv(index, pname, pointer);
} }
} }
return GetDefaultReturnValue<EntryPoint::GetUniformLocation, GLint>();
} }
void GL_APIENTRY GetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params) void GL_APIENTRY GetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params)
...@@ -1467,24 +1485,6 @@ void GL_APIENTRY GetVertexAttribiv(GLuint index, GLenum pname, GLint *params) ...@@ -1467,24 +1485,6 @@ void GL_APIENTRY GetVertexAttribiv(GLuint index, GLenum pname, GLint *params)
} }
} }
void GL_APIENTRY GetVertexAttribPointerv(GLuint index, GLenum pname, void **pointer)
{
EVENT("(GLuint index = %u, GLenum pname = 0x%X, void **pointer = 0x%0.8p)", index, pname,
pointer);
Context *context = GetValidGlobalContext();
if (context)
{
context->gatherParams<EntryPoint::GetVertexAttribPointerv>(index, pname, pointer);
if (context->skipValidation() ||
ValidateGetVertexAttribPointerv(context, index, pname, pointer))
{
context->getVertexAttribPointerv(index, pname, pointer);
}
}
}
void GL_APIENTRY Hint(GLenum target, GLenum mode) void GL_APIENTRY Hint(GLenum target, GLenum mode)
{ {
EVENT("(GLenum target = 0x%X, GLenum mode = 0x%X)", target, mode); EVENT("(GLenum target = 0x%X, GLenum mode = 0x%X)", target, mode);
......
...@@ -117,10 +117,10 @@ ANGLE_EXPORT void GL_APIENTRY FramebufferTexture2D(GLenum target, ...@@ -117,10 +117,10 @@ ANGLE_EXPORT void GL_APIENTRY FramebufferTexture2D(GLenum target,
GLint level); GLint level);
ANGLE_EXPORT void GL_APIENTRY FrontFace(GLenum mode); ANGLE_EXPORT void GL_APIENTRY FrontFace(GLenum mode);
ANGLE_EXPORT void GL_APIENTRY GenBuffers(GLsizei n, GLuint *buffers); ANGLE_EXPORT void GL_APIENTRY GenBuffers(GLsizei n, GLuint *buffers);
ANGLE_EXPORT void GL_APIENTRY GenerateMipmap(GLenum target);
ANGLE_EXPORT void GL_APIENTRY GenFramebuffers(GLsizei n, GLuint *framebuffers); ANGLE_EXPORT void GL_APIENTRY GenFramebuffers(GLsizei n, GLuint *framebuffers);
ANGLE_EXPORT void GL_APIENTRY GenRenderbuffers(GLsizei n, GLuint *renderbuffers); ANGLE_EXPORT void GL_APIENTRY GenRenderbuffers(GLsizei n, GLuint *renderbuffers);
ANGLE_EXPORT void GL_APIENTRY GenTextures(GLsizei n, GLuint *textures); ANGLE_EXPORT void GL_APIENTRY GenTextures(GLsizei n, GLuint *textures);
ANGLE_EXPORT void GL_APIENTRY GenerateMipmap(GLenum target);
ANGLE_EXPORT void GL_APIENTRY GetActiveAttrib(GLuint program, ANGLE_EXPORT void GL_APIENTRY GetActiveAttrib(GLuint program,
GLuint index, GLuint index,
GLsizei bufSize, GLsizei bufSize,
...@@ -149,15 +149,14 @@ ANGLE_EXPORT void GL_APIENTRY GetFramebufferAttachmentParameteriv(GLenum target, ...@@ -149,15 +149,14 @@ ANGLE_EXPORT void GL_APIENTRY GetFramebufferAttachmentParameteriv(GLenum target,
GLenum pname, GLenum pname,
GLint *params); GLint *params);
ANGLE_EXPORT void GL_APIENTRY GetIntegerv(GLenum pname, GLint *data); ANGLE_EXPORT void GL_APIENTRY GetIntegerv(GLenum pname, GLint *data);
ANGLE_EXPORT void GL_APIENTRY GetProgramiv(GLuint program, GLenum pname, GLint *params);
ANGLE_EXPORT void GL_APIENTRY GetProgramInfoLog(GLuint program, ANGLE_EXPORT void GL_APIENTRY GetProgramInfoLog(GLuint program,
GLsizei bufSize, GLsizei bufSize,
GLsizei *length, GLsizei *length,
GLchar *infoLog); GLchar *infoLog);
ANGLE_EXPORT void GL_APIENTRY GetProgramiv(GLuint program, GLenum pname, GLint *params);
ANGLE_EXPORT void GL_APIENTRY GetRenderbufferParameteriv(GLenum target, ANGLE_EXPORT void GL_APIENTRY GetRenderbufferParameteriv(GLenum target,
GLenum pname, GLenum pname,
GLint *params); GLint *params);
ANGLE_EXPORT void GL_APIENTRY GetShaderiv(GLuint shader, GLenum pname, GLint *params);
ANGLE_EXPORT void GL_APIENTRY GetShaderInfoLog(GLuint shader, ANGLE_EXPORT void GL_APIENTRY GetShaderInfoLog(GLuint shader,
GLsizei bufSize, GLsizei bufSize,
GLsizei *length, GLsizei *length,
...@@ -170,15 +169,16 @@ ANGLE_EXPORT void GL_APIENTRY GetShaderSource(GLuint shader, ...@@ -170,15 +169,16 @@ ANGLE_EXPORT void GL_APIENTRY GetShaderSource(GLuint shader,
GLsizei bufSize, GLsizei bufSize,
GLsizei *length, GLsizei *length,
GLchar *source); GLchar *source);
ANGLE_EXPORT void GL_APIENTRY GetShaderiv(GLuint shader, GLenum pname, GLint *params);
ANGLE_EXPORT const GLubyte *GL_APIENTRY GetString(GLenum name); ANGLE_EXPORT const GLubyte *GL_APIENTRY GetString(GLenum name);
ANGLE_EXPORT void GL_APIENTRY GetTexParameterfv(GLenum target, GLenum pname, GLfloat *params); ANGLE_EXPORT void GL_APIENTRY GetTexParameterfv(GLenum target, GLenum pname, GLfloat *params);
ANGLE_EXPORT void GL_APIENTRY GetTexParameteriv(GLenum target, GLenum pname, GLint *params); ANGLE_EXPORT void GL_APIENTRY GetTexParameteriv(GLenum target, GLenum pname, GLint *params);
ANGLE_EXPORT GLint GL_APIENTRY GetUniformLocation(GLuint program, const GLchar *name);
ANGLE_EXPORT void GL_APIENTRY GetUniformfv(GLuint program, GLint location, GLfloat *params); ANGLE_EXPORT void GL_APIENTRY GetUniformfv(GLuint program, GLint location, GLfloat *params);
ANGLE_EXPORT void GL_APIENTRY GetUniformiv(GLuint program, GLint location, GLint *params); ANGLE_EXPORT void GL_APIENTRY GetUniformiv(GLuint program, GLint location, GLint *params);
ANGLE_EXPORT GLint GL_APIENTRY GetUniformLocation(GLuint program, const GLchar *name); ANGLE_EXPORT void GL_APIENTRY GetVertexAttribPointerv(GLuint index, GLenum pname, void **pointer);
ANGLE_EXPORT void GL_APIENTRY GetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params); ANGLE_EXPORT void GL_APIENTRY GetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params);
ANGLE_EXPORT void GL_APIENTRY GetVertexAttribiv(GLuint index, GLenum pname, GLint *params); ANGLE_EXPORT void GL_APIENTRY GetVertexAttribiv(GLuint index, GLenum pname, GLint *params);
ANGLE_EXPORT void GL_APIENTRY GetVertexAttribPointerv(GLuint index, GLenum pname, void **pointer);
ANGLE_EXPORT void GL_APIENTRY Hint(GLenum target, GLenum mode); ANGLE_EXPORT void GL_APIENTRY Hint(GLenum target, GLenum mode);
ANGLE_EXPORT GLboolean GL_APIENTRY IsBuffer(GLuint buffer); ANGLE_EXPORT GLboolean GL_APIENTRY IsBuffer(GLuint buffer);
ANGLE_EXPORT GLboolean GL_APIENTRY IsEnabled(GLenum cap); ANGLE_EXPORT GLboolean GL_APIENTRY IsEnabled(GLenum cap);
......
This source diff could not be displayed because it is too large. You can view the blob instead.
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