]> git.tdb.fi Git - libs/gl.git/commitdiff
Be smarter about detecting backport extensions
authorMikko Rasa <tdb@tdb.fi>
Wed, 26 Oct 2016 18:33:21 +0000 (21:33 +0300)
committerMikko Rasa <tdb@tdb.fi>
Wed, 26 Oct 2016 18:46:18 +0000 (21:46 +0300)
Sometimes a more recent and completely unrelated extension reuses some
tokens with their core names, causing them to seem like backport
extensions to the script.

13 files changed:
extensions/arb_texture_cube_map.glext
extensions/arb_texture_float.glext
extensions/arb_vertex_buffer_object.glext
extensions/arb_vertex_shader.glext
extensions/ext_bgra.glext
extensions/ext_blend_minmax.glext
extensions/ext_blend_subtract.glext
extensions/ext_framebuffer_blit.glext
extensions/ext_framebuffer_multisample.glext
extensions/ext_geometry_shader4.glext
extensions/ext_texture3d.glext
extensions/ext_texture_filter_anisotropic.glext
scripts/extgen.py

index 8874530792c325284002b04c72880ce0532edf54..3dd1498141020f348762491f98d77c0f151539bd 100644 (file)
@@ -1,2 +1,3 @@
 extension ARB_texture_cube_map
 core_version gl 1.3
 extension ARB_texture_cube_map
 core_version gl 1.3
+backport none
index 24f42c2f70e3a39fdaf447d1ead14abb970db393..55aa32d14b0882e9bc8da40e028be0ec7c82dca8 100644 (file)
@@ -1,2 +1,3 @@
 extension ARB_texture_float
 core_version gl 3.0
 extension ARB_texture_float
 core_version gl 3.0
+backport none
index 0eadd25f1c53fa69976018061414bdf2c479c2b9..e8962591ae42fdbd2195b35d60f62aec1a1c89f1 100644 (file)
@@ -1 +1,2 @@
 extension ARB_vertex_buffer_object
 extension ARB_vertex_buffer_object
+backport none
index 73d559b4ca385f0dae0d04de581ce9b5c4b55123..951fbaae61a1684061dde75fa201cebb8b2543b8 100644 (file)
@@ -1,2 +1,3 @@
 extension ARB_vertex_shader
 secondary ARB_vertex_program
 extension ARB_vertex_shader
 secondary ARB_vertex_program
+backport none
index 2ba56750b8102856bbfbac44e7adb5e6bcc6a0a1..d85221752e8c3a17968d2d37d14e7b9589a6f435 100644 (file)
@@ -1,2 +1,3 @@
 extension EXT_bgra
 core_version gl 1.2
 extension EXT_bgra
 core_version gl 1.2
+backport none
index 5b2174d5a675b9a7bd1099bc238fe83fe5f3a653..62606988a333beed797e56e16d163788605a9e07 100644 (file)
@@ -1 +1,2 @@
 extension EXT_blend_minmax
 extension EXT_blend_minmax
+backport none
index 0e89f4d247964ffa7b70a36085e7e5579f5c80df..cbd8b41659f5838b239be13abed5f8e1f15642e0 100644 (file)
@@ -1,2 +1,3 @@
 extension EXT_blend_subtract
 core_version gl 1.2
 extension EXT_blend_subtract
 core_version gl 1.2
+backport none
index 4c78ba5188afdba538f9dc2f6dcf57853ac2f16f..cdc1801bd818e3c5e0de453c1d6a6b59e8ee6e12 100644 (file)
@@ -1 +1,2 @@
 extension EXT_framebuffer_blit
 extension EXT_framebuffer_blit
+backport ARB_framebuffer_object
index 91f26a7f02d1aaaebeb7f3a42d6892d2dbec6f4e..272ca3ae7905ec5a0b513bec0a8fd315ff2d9437 100644 (file)
@@ -1 +1,2 @@
 extension EXT_framebuffer_multisample
 extension EXT_framebuffer_multisample
+backport ARB_framebuffer_object
index 0bc0f85d9842c90cc16b83a56d6820ae644eb526..210b9bdb4257e68d14460553616030dc5007bfff 100644 (file)
@@ -1 +1,2 @@
 extension EXT_geometry_shader4
 extension EXT_geometry_shader4
+backport none
index e9bc90bb5cb2931d44811fa2e612aefa5267570e..c1516184dd9801841fa874ef6a34e30bd2243434 100644 (file)
@@ -1 +1,2 @@
 extension EXT_texture3D
 extension EXT_texture3D
+backport none
index 6d7c6c1155d41e6bd16b99cb20479e91173bd570..0f611bf40b141c4f6eccf4a67343caf81a56e188 100644 (file)
@@ -1 +1,2 @@
 extension EXT_texture_filter_anisotropic
 extension EXT_texture_filter_anisotropic
+backport none
index ec57e2efb912fd9287185d7d5f0ab5bd9aa8609c..7083e13a1e6dcfc8ad00a3179bcd13cbe7f12bdb 100755 (executable)
@@ -31,6 +31,7 @@ if sys.argv[i].startswith("gl"):
        i += 1
 
 target_ext = sys.argv[i]
        i += 1
 
 target_ext = sys.argv[i]
+backport_ext = None
 out_base = None
 if target_ext.endswith(".glext"):
        fn = target_ext
 out_base = None
 if target_ext.endswith(".glext"):
        fn = target_ext
@@ -46,6 +47,8 @@ if target_ext.endswith(".glext"):
                                core_version = parts[2]
                elif parts[0]=="secondary":
                        secondary.append(parts[1])
                                core_version = parts[2]
                elif parts[0]=="secondary":
                        secondary.append(parts[1])
+               elif parts[0]=="backport":
+                       backport_ext = parts[1]
        if i+1<len(sys.argv):
                out_base = os.path.splitext(sys.argv[i+1])[0]
 else:
        if i+1<len(sys.argv):
                out_base = os.path.splitext(sys.argv[i+1])[0]
 else:
@@ -55,7 +58,6 @@ else:
                core_version = secondary.pop(0)
 
 ext_type = target_ext.split('_')[0]
                core_version = secondary.pop(0)
 
 ext_type = target_ext.split('_')[0]
-backport_ext = None
 
 if core_version:
        core_version = map(int, core_version.split('.'))
 
 if core_version:
        core_version = map(int, core_version.split('.'))
@@ -95,7 +97,9 @@ class Extension:
        def __init__(self, name):
                self.name = name
                self.supported_apis = []
        def __init__(self, name):
                self.name = name
                self.supported_apis = []
-               self.ext_type = name[0:name.find('_')]
+               underscore = name.find('_')
+               self.ext_type = name[0:underscore]
+               self.base_name = name[underscore+1:]
 
 extensions = {}
 things = {}
 
 extensions = {}
 things = {}
@@ -315,6 +319,7 @@ enums = filter(is_relevant, enums)
 enums.sort(key=(lambda e: e.value))
 
 # Some final preparations for creating the files
 enums.sort(key=(lambda e: e.value))
 
 # Some final preparations for creating the files
+backport_ext_candidates = []
 for t in itertools.chain(funcs, enums):
        if target_api in t.supported_apis and t.supported_apis[target_api]!="ext":
                t.version = t.supported_apis[target_api]
 for t in itertools.chain(funcs, enums):
        if target_api in t.supported_apis and t.supported_apis[target_api]!="ext":
                t.version = t.supported_apis[target_api]
@@ -323,7 +328,27 @@ for t in itertools.chain(funcs, enums):
 
        # Things in backport extensions don't acquire an extension suffix
        if t.extension and not t.name.endswith(ext_type) and target_api in t.supported_apis:
 
        # Things in backport extensions don't acquire an extension suffix
        if t.extension and not t.name.endswith(ext_type) and target_api in t.supported_apis:
-               backport_ext = t.extension
+               if t.extension not in backport_ext_candidates:
+                       backport_ext_candidates.append(t.extension)
+
+if backport_ext:
+       if backport_ext=="none":
+               backport_ext = None
+       else:
+               backport_ext = extensions[backport_ext]
+
+               if backport_ext not in backport_ext_candidates:
+                       print "Warning: explicitly specified backport extension %s does not look like a backport extension"
+elif backport_ext_candidates:
+       if len(backport_ext_candidates)>1:
+               print "Warning: multiple backport extension candidates: %s"%(" ".join(e.name for e in backport_ext_candidates))
+
+       for e in backport_ext_candidates:
+               if e.base_name==target_ext.base_name:
+                       backport_ext = e
+
+       if not backport_ext and len(backport_ext_candidates)==1:
+               print "Warning: potential backport extension has mismatched name: %s"%backport_ext_candidates[0].name
 
 for f in funcs:
        f.typedef = "FPtr_%s"%f.name
 
 for f in funcs:
        f.typedef = "FPtr_%s"%f.name