Commit 798f6c61 by Jamie Madill Committed by Commit Bot

Strip extension from packed GLenum data.

This reduces the code duplication in this json file. It should make the packed enum map easier to maintain going forward as we add more entry point permutations. Bug: angleproject:3611 Change-Id: Ideab630584f0a41892262660fc1e0aedcc5dd639 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1736126Reviewed-by: 's avatarTim Van Patten <timvp@google.com> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent b13c38c1
......@@ -4,9 +4,9 @@
"scripts/egl_angle_ext.xml":
"fc2e249239fb1365f6d145cdf1a3cfcf",
"scripts/entry_point_packed_gl_enums.json":
"e5282bdef690f0ec652fed0e0723d1e8",
"2f5d42edcd1a3ecd3d4decd5b770d2f5",
"scripts/generate_entry_points.py":
"c7ee7654f91562e2cb6ad9f336d08003",
"89199be94505dfc3c5465127c5a121f8",
"scripts/gl.xml":
"b470cb06b06cbbe7adb2c8129ec85708",
"scripts/gl_angle_ext.xml":
......
{
"description": [
"Copyright 2019 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.",
"",
"entry_point_packed_gl_enums.json: Metadata for packing entry point params.",
"",
"Note that all entry points have their suffixes stripped in this file.",
"See gen_packed_gl_enums.py for the generator that uses this data."
],
"glAlphaFunc": {
"func": "AlphaTestFunc"
},
......@@ -11,9 +21,6 @@
"glBeginQuery": {
"target": "QueryType"
},
"glBeginQueryEXT": {
"target": "QueryType"
},
"glBindBuffer": {
"target": "BufferBinding"
},
......@@ -39,40 +46,34 @@
"glCompressedTexImage2D": {
"target": "TextureTarget"
},
"glCompressedTexImage2DRobustANGLE": {
"glCompressedTexImage2DRobust": {
"target": "TextureTarget"
},
"glCompressedTexImage3D": {
"target": "TextureTarget"
},
"glCompressedTexImage3DOES": {
"target": "TextureTarget"
},
"glCompressedTexImage3DRobustANGLE": {
"glCompressedTexImage3DRobust": {
"target": "TextureTarget"
},
"glCompressedTexSubImage2D": {
"target": "TextureTarget"
},
"glCompressedTexSubImage2DRobustANGLE": {
"glCompressedTexSubImage2DRobust": {
"target": "TextureTarget"
},
"glCompressedTexSubImage3D": {
"target": "TextureTarget"
},
"glCompressedTexSubImage3DOES": {
"target": "TextureTarget"
},
"glCompressedTexSubImage3DRobustANGLE": {
"glCompressedTexSubImage3DRobust": {
"target": "TextureTarget"
},
"glCopyTexImage2D": {
"target": "TextureTarget"
},
"glCopyTexture3DANGLE": {
"glCopyTexture3D": {
"destTarget": "TextureTarget"
},
"glCopyTextureCHROMIUM": {
"glCopyTexture": {
"destTarget": "TextureTarget"
},
"glCopyTexSubImage2D": {
......@@ -81,13 +82,10 @@
"glCopyTexSubImage3D": {
"target": "TextureTarget"
},
"glCopyTexSubImage3DOES": {
"target": "TextureTarget"
},
"glCopySubTexture3DANGLE": {
"glCopySubTexture3D": {
"destTarget": "TextureTarget"
},
"glCopySubTextureCHROMIUM": {
"glCopySubTexture": {
"destTarget": "TextureTarget"
},
"glCopyBufferSubData": {
......@@ -115,12 +113,6 @@
"glDrawArraysInstanced": {
"mode": "PrimitiveMode"
},
"glDrawArraysInstancedANGLE": {
"mode": "PrimitiveMode"
},
"glDrawArraysInstancedEXT": {
"mode": "PrimitiveMode"
},
"glDrawElements": {
"mode": "PrimitiveMode",
"type": "DrawElementsType"
......@@ -133,19 +125,11 @@
"mode": "PrimitiveMode",
"type": "DrawElementsType"
},
"glDrawElementsInstancedANGLE": {
"mode": "PrimitiveMode",
"type": "DrawElementsType"
},
"glDrawElementsInstancedEXT": {
"mode": "PrimitiveMode",
"type": "DrawElementsType"
},
"glDrawRangeElements": {
"mode": "PrimitiveMode",
"type": "DrawElementsType"
},
"glEGLImageTargetTexture2DOES": {
"glEGLImageTargetTexture2D": {
"target": "TextureType"
},
"glEnableClientState": {
......@@ -154,52 +138,34 @@
"glEndQuery": {
"target": "QueryType"
},
"glEndQueryEXT": {
"target": "QueryType"
},
"glFlushMappedBufferRange": {
"target": "BufferBinding"
},
"glFlushMappedBufferRangeEXT": {
"target": "BufferBinding"
},
"glFramebufferTexture2D": {
"textarget": "TextureTarget"
},
"glFramebufferTexture2DOES": {
"textarget": "TextureTarget"
},
"glFramebufferTexture3D": {
"textarget": "TextureTarget"
},
"glFramebufferTexture3DOES": {
"textarget": "TextureTarget"
},
"glGenerateMipmap": {
"target": "TextureType"
},
"glGenerateMipmapOES": {
"target": "TextureType"
},
"glGetBufferParameteriv": {
"target": "BufferBinding"
},
"glGetBufferParameterivRobustANGLE": {
"glGetBufferParameterivRobust": {
"target": "BufferBinding"
},
"glGetBufferParameteri64v": {
"target": "BufferBinding"
},
"glGetBufferParameteri64vRobustANGLE": {
"glGetBufferParameteri64vRobust": {
"target": "BufferBinding"
},
"glGetBufferPointerv": {
"target": "BufferBinding"
},
"glGetBufferPointervOES": {
"target": "BufferBinding"
},
"glGetBufferPointervRobustANGLE": {
"glGetBufferPointervRobust": {
"target": "BufferBinding"
},
"glGetLightfv": {
......@@ -217,10 +183,7 @@
"glGetQueryiv": {
"target": "QueryType"
},
"glGetQueryivEXT": {
"target": "QueryType"
},
"glGetQueryivRobustANGLE": {
"glGetQueryivRobust": {
"target": "QueryType"
},
"glGetTexEnvfv": {
......@@ -238,61 +201,49 @@
"glGetTexLevelParameterfv": {
"target": "TextureTarget"
},
"glGetTexLevelParameterfvRobustANGLE": {
"target": "TextureTarget"
},
"glGetTexLevelParameterfvANGLE": {
"glGetTexLevelParameterfvRobust": {
"target": "TextureTarget"
},
"glGetTexLevelParameteriv": {
"target": "TextureTarget"
},
"glGetTexLevelParameterivRobustANGLE": {
"target": "TextureTarget"
},
"glGetTexLevelParameterivANGLE": {
"glGetTexLevelParameterivRobust": {
"target": "TextureTarget"
},
"glGetTexParameterfv": {
"target": "TextureType"
},
"glGetTexParameterfvRobustANGLE": {
"glGetTexParameterfvRobust": {
"target": "TextureType"
},
"glGetTexParameteriv": {
"target": "TextureType"
},
"glGetTexParameterivRobustANGLE": {
"glGetTexParameterivRobust": {
"target": "TextureType"
},
"glGetTexParameterIivRobustANGLE": {
"glGetTexParameterIivRobust": {
"target": "TextureType"
},
"glGetTexParameterIuivRobustANGLE": {
"glGetTexParameterIuivRobust": {
"target": "TextureType"
},
"glGetTexParameterIiv": {
"target": "TextureType"
},
"glGetTexParameterIivOES": {
"target": "TextureType"
},
"glGetTexParameterIuiv": {
"target": "TextureType"
},
"glGetTexParameterIuivOES": {
"target": "TextureType"
},
"glGetTexParameterxv": {
"target": "TextureType"
},
"glImportMemoryFdEXT": {
"glImportMemoryFd": {
"handleType": "HandleType"
},
"glImportSemaphoreFdEXT": {
"glImportSemaphoreFd": {
"handleType": "HandleType"
},
"glInvalidateTextureANGLE": {
"glInvalidateTexture": {
"target": "TextureType"
},
"glLightf" : {
......@@ -310,22 +261,16 @@
"glLogicOp" : {
"opcode" : "LogicalOperation"
},
"glLoseContextCHROMIUM" : {
"glLoseContext" : {
"current" : "GraphicsResetStatus",
"other" : "GraphicsResetStatus"
},
"glMapBuffer": {
"target": "BufferBinding"
},
"glMapBufferOES": {
"target": "BufferBinding"
},
"glMapBufferRange": {
"target": "BufferBinding"
},
"glMapBufferRangeEXT": {
"target": "BufferBinding"
},
"glMaterialf": {
"pname": "MaterialParameter"
},
......@@ -344,21 +289,14 @@
"glMultiDrawArrays": {
"mode": "PrimitiveMode"
},
"glMultiDrawArraysANGLE": {
"mode": "PrimitiveMode"
},
"glMultiDrawArraysInstancedANGLE": {
"glMultiDrawArraysInstanced": {
"mode": "PrimitiveMode"
},
"glMultiDrawElements": {
"mode": "PrimitiveMode",
"type": "DrawElementsType"
},
"glMultiDrawElementsANGLE": {
"mode": "PrimitiveMode",
"type": "DrawElementsType"
},
"glMultiDrawElementsInstancedANGLE": {
"glMultiDrawElementsInstanced": {
"mode": "PrimitiveMode",
"type": "DrawElementsType"
},
......@@ -377,21 +315,15 @@
"glPointParameterxv": {
"pname" : "PointParameter"
},
"glPointSizePointerOES": {
"glPointSizePointer": {
"type" : "VertexAttribType"
},
"glProvokingVertex": {
"mode": "ProvokingVertexConvention"
},
"glProvokingVertexANGLE": {
"mode": "ProvokingVertexConvention"
},
"glQueryCounter": {
"target": "QueryType"
},
"glQueryCounterEXT": {
"target": "QueryType"
},
"glShadeModel": {
"mode": "ShadingModel"
},
......@@ -425,19 +357,16 @@
"glTexImage2D": {
"target": "TextureTarget"
},
"glTexImage2DExternalANGLE": {
"glTexImage2DExternal": {
"target": "TextureTarget"
},
"glTexImage2DRobustANGLE": {
"glTexImage2DRobust": {
"target": "TextureTarget"
},
"glTexImage3D": {
"target": "TextureTarget"
},
"glTexImage3DOES": {
"target": "TextureTarget"
},
"glTexImage3DRobustANGLE": {
"glTexImage3DRobust": {
"target": "TextureTarget"
},
"glTexParameterf": {
......@@ -446,7 +375,7 @@
"glTexParameterfv": {
"target": "TextureType"
},
"glTexParameterfvRobustANGLE": {
"glTexParameterfvRobust": {
"target": "TextureType"
},
"glTexParameteri": {
......@@ -455,27 +384,21 @@
"glTexParameteriv": {
"target": "TextureType"
},
"glTexParameterivRobustANGLE": {
"glTexParameterivRobust": {
"target": "TextureType"
},
"glTexParameterIivRobustANGLE": {
"glTexParameterIivRobust": {
"target": "TextureType"
},
"glTexParameterIuivRobustANGLE": {
"glTexParameterIuivRobust": {
"target": "TextureType"
},
"glTexParameterIiv": {
"target": "TextureType"
},
"glTexParameterIivOES": {
"target": "TextureType"
},
"glTexParameterIuiv": {
"target": "TextureType"
},
"glTexParameterIuivOES": {
"target": "TextureType"
},
"glTexParameterx": {
"target": "TextureType"
},
......@@ -485,63 +408,45 @@
"glTexStorage2D": {
"target": "TextureType"
},
"glTexStorage2DEXT": {
"target": "TextureType"
},
"glTexStorage2DMultisample": {
"target": "TextureType"
},
"glTexStorage2DMultisampleANGLE": {
"target": "TextureType"
},
"glTexStorage3DMultisample": {
"target": "TextureType"
},
"glTexStorage3DMultisampleOES": {
"glTexStorageMem2D": {
"target": "TextureType"
},
"glTexStorageMem2DEXT": {
"glTexStorageMem2DMultisample": {
"target": "TextureType"
},
"glTexStorageMem2DMultisampleEXT": {
"glTexStorageMem3D": {
"target": "TextureType"
},
"glTexStorageMem3DEXT": {
"glTexStorageMem3DMultisample": {
"target": "TextureType"
},
"glTexStorageMem3DMultisampleEXT": {
"target": "TextureType"
},
"glBufferStorageMemEXT": {
"glBufferStorageMem": {
"target": "TextureType"
},
"glTexStorage3D": {
"target": "TextureType"
},
"glTexStorage3DEXT": {
"target": "TextureType"
},
"glTexSubImage2D": {
"target": "TextureTarget"
},
"glTexSubImage2DRobustANGLE": {
"glTexSubImage2DRobust": {
"target": "TextureTarget"
},
"glTexSubImage3D": {
"target": "TextureTarget"
},
"glTexSubImage3DOES": {
"target": "TextureTarget"
},
"glTexSubImage3DRobustANGLE": {
"glTexSubImage3DRobust": {
"target": "TextureTarget"
},
"glUnmapBuffer": {
"target": "BufferBinding"
},
"glUnmapBufferOES": {
"target": "BufferBinding"
},
"glVertexAttribFormat": {
"type": "VertexAttribType"
},
......
......@@ -569,10 +569,6 @@ def script_relative(path):
return os.path.join(os.path.dirname(sys.argv[0]), path)
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, is_explicit_context):
comma_if_needed = ", " if len(params) > 0 else ""
return template_entry_point_decl.format(
......@@ -692,8 +688,13 @@ def find_gl_enum_group_in_command(command_node, param_name):
return group_name
def format_entry_point_def(cmd_name, proto, params, is_explicit_context):
packed_gl_enums = cmd_packed_gl_enums.get(cmd_name, {})
def get_packed_enums(cmd_packed_gl_enums, cmd_name):
# Always strip the suffix when querying packed enums.
return cmd_packed_gl_enums.get(strip_suffix(cmd_name), {})
def format_entry_point_def(cmd_name, proto, params, is_explicit_context, cmd_packed_gl_enums):
packed_gl_enums = get_packed_enums(cmd_packed_gl_enums, cmd_name)
internal_params = [just_the_name_packed(param, packed_gl_enums) for param in params]
packed_gl_enum_conversions = []
for param in params:
......@@ -770,13 +771,13 @@ def get_capture_param_type_name(param_type):
return param_type
def format_capture_method(command, cmd_name, proto, params, all_param_types,
capture_pointer_funcs):
def format_capture_method(command, cmd_name, proto, params, all_param_types, capture_pointer_funcs,
cmd_packed_gl_enums):
packed_gl_enums = cmd_packed_gl_enums.get(cmd_name, {})
packed_gl_enums = get_packed_enums(cmd_packed_gl_enums, cmd_name)
params_with_type = get_internal_params(cmd_name,
["const Context *context", "bool isCallValid"] + params)
params_with_type = get_internal_params(
cmd_name, ["const Context *context", "bool isCallValid"] + params, cmd_packed_gl_enums)
params_just_name = ", ".join(
["context", "isCallValid"] +
[just_the_name_packed(param, packed_gl_enums) for param in params])
......@@ -828,8 +829,8 @@ def format_capture_method(command, cmd_name, proto, params, all_param_types,
return template_capture_method_with_return_value.format(**format_args)
def get_internal_params(cmd_name, params):
packed_gl_enums = cmd_packed_gl_enums.get(cmd_name, {})
def get_internal_params(cmd_name, params, cmd_packed_gl_enums):
packed_gl_enums = get_packed_enums(cmd_packed_gl_enums, cmd_name)
return ", ".join([
make_param(
just_the_type_packed(param, packed_gl_enums),
......@@ -837,8 +838,8 @@ def get_internal_params(cmd_name, params):
])
def format_context_decl(cmd_name, proto, params, template):
internal_params = get_internal_params(cmd_name, params)
def format_context_decl(cmd_name, proto, params, template, cmd_packed_gl_enums):
internal_params = get_internal_params(cmd_name, params, cmd_packed_gl_enums)
return_type = proto[:-len(cmd_name)]
name_lower_no_suffix = cmd_name[2:3].lower() + cmd_name[3:]
......@@ -865,14 +866,15 @@ def format_libgles_entry_point_def(cmd_name, proto, params, is_explicit_context)
explicit_context_internal_param="ctx" if is_explicit_context else "")
def format_validation_proto(cmd_name, params):
internal_params = get_internal_params(cmd_name, ["Context *context"] + params)
def format_validation_proto(cmd_name, params, cmd_packed_gl_enums):
internal_params = get_internal_params(cmd_name, ["Context *context"] + params,
cmd_packed_gl_enums)
return template_validation_proto % (cmd_name[2:], internal_params)
def format_capture_proto(cmd_name, proto, params):
internal_params = get_internal_params(cmd_name,
["const Context *context", "bool isCallValid"] + params)
def format_capture_proto(cmd_name, proto, params, cmd_packed_gl_enums):
internal_params = get_internal_params(
cmd_name, ["const Context *context", "bool isCallValid"] + params, cmd_packed_gl_enums)
return_type = proto[:-len(cmd_name)].strip()
if return_type != "void":
internal_params += ", %s returnValue" % return_type
......@@ -883,7 +885,8 @@ def path_to(folder, file):
return os.path.join(script_relative(".."), "src", folder, file)
def get_entry_points(all_commands, commands, is_explicit_context, is_wgl, all_param_types):
def get_entry_points(all_commands, commands, is_explicit_context, is_wgl, all_param_types,
cmd_packed_gl_enums):
decls = []
defs = []
export_defs = []
......@@ -906,21 +909,26 @@ def get_entry_points(all_commands, commands, is_explicit_context, is_wgl, all_pa
proto_text = "".join(proto.itertext())
decls.append(
format_entry_point_decl(cmd_name, proto_text, param_text, is_explicit_context))
defs.append(format_entry_point_def(cmd_name, proto_text, param_text, is_explicit_context))
defs.append(
format_entry_point_def(cmd_name, proto_text, param_text, is_explicit_context,
cmd_packed_gl_enums))
export_defs.append(
format_libgles_entry_point_def(cmd_name, proto_text, param_text, is_explicit_context))
validation_protos.append(format_validation_proto(cmd_name, param_text))
capture_protos.append(format_capture_proto(cmd_name, proto_text, param_text))
validation_protos.append(
format_validation_proto(cmd_name, param_text, cmd_packed_gl_enums))
capture_protos.append(
format_capture_proto(cmd_name, proto_text, param_text, cmd_packed_gl_enums))
capture_methods.append(
format_capture_method(command, cmd_name, proto_text, param_text, all_param_types,
capture_pointer_funcs))
capture_pointer_funcs, cmd_packed_gl_enums))
return decls, defs, export_defs, validation_protos, capture_protos, capture_methods, capture_pointer_funcs
def get_decls(formatter, all_commands, gles_commands, already_included, overloaded):
def get_decls(formatter, all_commands, gles_commands, already_included, overloaded,
cmd_packed_gl_enums):
decls = []
for command in all_commands:
proto = command.find('proto')
......@@ -938,7 +946,8 @@ def get_decls(formatter, all_commands, gles_commands, already_included, overload
param_text = ["".join(param.itertext()) for param in command.findall('param')]
proto_text = "".join(proto.itertext())
decls.append(format_context_decl(cmd_name, proto_text, param_text, formatter))
decls.append(
format_context_decl(cmd_name, proto_text, param_text, formatter, cmd_packed_gl_enums))
return decls
......@@ -1425,6 +1434,9 @@ def main():
return 1
return 0
with open(script_relative('entry_point_packed_gl_enums.json')) as f:
cmd_packed_gl_enums = json.loads(f.read())
glesdecls = {}
glesdecls['core'] = {}
glesdecls['exts'] = {}
......@@ -1465,7 +1477,7 @@ def main():
all_commands_with_suffix.extend(xml.commands[version])
decls, defs, libgles_defs, validation_protos, capture_protos, capture_methods, capture_pointer_funcs = get_entry_points(
all_commands, gles_commands, False, False, all_gles_param_types)
all_commands, gles_commands, False, False, all_gles_param_types, cmd_packed_gl_enums)
# Write the version as a comment before the first EP.
libgles_defs.insert(0, "\n// OpenGL ES %s" % comment)
......@@ -1495,7 +1507,8 @@ def main():
gles_overloaded = gles1_overloaded if is_gles1 else []
glesdecls['core'][(major_version, minor_version)] = get_decls(
context_decl_format, all_commands, gles_commands, [], gles_overloaded)
context_decl_format, all_commands, gles_commands, [], gles_overloaded,
cmd_packed_gl_enums)
validation_annotation = "ES%s%s" % (major_version, minor_if_not_zero)
write_validation_header(validation_annotation, "ES %s" % comment, validation_protos,
......@@ -1529,7 +1542,8 @@ def main():
# Detect and filter duplicate extensions.
decls, defs, libgles_defs, validation_protos, capture_protos, capture_methods, capture_param_funcs = get_entry_points(
xml.all_commands, ext_cmd_names, False, False, all_gles_param_types)
xml.all_commands, ext_cmd_names, False, False, all_gles_param_types,
cmd_packed_gl_enums)
# Avoid writing out entry points defined by a prior extension.
for dupe in xml.ext_dupes[extension_name]:
......@@ -1558,13 +1572,15 @@ def main():
extension_name not in gles1_no_context_decl_extensions):
glesdecls['exts']['GLES1 Extensions'][extension_name] = get_decls(
context_decl_format, all_commands, ext_cmd_names, all_commands_no_suffix,
gles1_overloaded)
gles1_overloaded, cmd_packed_gl_enums)
if extension_name in registry_xml.gles_extensions:
glesdecls['exts']['GLES2+ Extensions'][extension_name] = get_decls(
context_decl_format, all_commands, ext_cmd_names, all_commands_no_suffix, [])
context_decl_format, all_commands, ext_cmd_names, all_commands_no_suffix, [],
cmd_packed_gl_enums)
if extension_name in registry_xml.angle_extensions:
glesdecls['exts']['ANGLE Extensions'][extension_name] = get_decls(
context_decl_format, all_commands, ext_cmd_names, all_commands_no_suffix, [])
context_decl_format, all_commands, ext_cmd_names, all_commands_no_suffix, [],
cmd_packed_gl_enums)
for name in extension_commands:
all_commands_with_suffix.append(name)
......@@ -1581,7 +1597,7 @@ def main():
# Get the explicit context entry points
decls, defs, libgles_defs, validation_protos, capture_protos, capture_methods, capture_param_funcs = get_entry_points(
xml.all_commands, cmds, True, False, all_gles_param_types)
xml.all_commands, cmds, True, False, all_gles_param_types, cmd_packed_gl_enums)
# Append the explicit context entry points
extension_decls += decls
......@@ -1657,9 +1673,11 @@ def main():
# Validation duplicates handled with suffix
_, _, _, validation_protos32, _, _, _ = get_entry_points(
all_commands32, just_libgl_commands_suffix, False, False, all_gles_param_types)
all_commands32, just_libgl_commands_suffix, False, False, all_gles_param_types,
cmd_packed_gl_enums)
decls_gl, defs_gl, libgl_defs, _, _, _, _ = get_entry_points(
all_commands32, all_libgl_commands, False, False, all_gles_param_types)
all_commands32, all_libgl_commands, False, False, all_gles_param_types,
cmd_packed_gl_enums)
# Write the version as a comment before the first EP.
libgl_defs.insert(0, "\n// GL %s" % comment)
......@@ -1681,7 +1699,8 @@ def main():
"cpp", source_includes, "libGL", "gl.xml")
gldecls['core'][(major_version, minor_version)] = get_decls(
context_decl_format, all_commands32, just_libgl_commands, all_commands_no_suffix, [])
context_decl_format, all_commands32, just_libgl_commands, all_commands_no_suffix, [],
cmd_packed_gl_enums)
# Validation files
validation_annotation = "GL%s%s" % (major_version, minor_if_not_zero)
......@@ -1703,7 +1722,7 @@ def main():
wgl_param_types = set()
decls_wgl, defs_wgl, wgl_defs, validation_protos_wgl, _, _, _ = get_entry_points(
all_commands32, wgl_commands, False, True, wgl_param_types)
all_commands32, wgl_commands, False, True, wgl_param_types, {})
# Write the version as a comment before the first EP.
libgl_ep_exports.append("\n ; WGL %s" % comment)
......
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