dispatch: stop generating separate GLES1 API code.
authorPaul Berry <stereotype441@gmail.com>
Tue, 23 Oct 2012 20:24:17 +0000 (13:24 -0700)
committerPaul Berry <stereotype441@gmail.com>
Thu, 1 Nov 2012 18:26:30 +0000 (11:26 -0700)
This patch removes the generated files api_exec_es1.c,
api_exec_es1_dispatch.h, and api_exec_es1_remap_helper.h (and the
source files and build rules used to generate them), since they are no
longer used.  GLES1 now uses the same dispatch table layout as all the
other APIs.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/Android.gen.mk
src/mesa/Makefile.am
src/mesa/SConscript
src/mesa/main/.gitignore
src/mesa/main/APIspec.py [deleted file]
src/mesa/main/APIspec.xml [deleted file]
src/mesa/main/APIspecutil.py [deleted file]
src/mesa/main/api_exec.h
src/mesa/main/es_generator.py [deleted file]
src/mesa/sources.mak

index 893fa41991a0941d4d3e001f4d80b2ebe4b922ab..ffa36db4ddc7b1e4adf3aec28b2d586697b4a91d 100644 (file)
@@ -32,9 +32,6 @@ intermediates := $(call local-intermediates-dir)
 # This is the list of auto-generated files: sources and headers
 sources := \
        main/enums.c \
-       main/api_exec_es1.c \
-       main/api_exec_es1_dispatch.h \
-       main/api_exec_es1_remap_helper.h \
        program/program_parse.tab.c \
        program/lex.yy.c \
        main/dispatch.h \
@@ -60,13 +57,7 @@ LOCAL_GENERATED_SOURCES += $(sources)
 
 glapi := $(MESA_TOP)/src/mapi/glapi/gen
 
-es_src_deps := \
-       $(LOCAL_PATH)/main/APIspec.xml \
-       $(LOCAL_PATH)/main/es_generator.py \
-       $(LOCAL_PATH)/main/APIspecutil.py \
-       $(LOCAL_PATH)/main/APIspec.py
-
-es_hdr_deps := \
+dispatch_deps := \
        $(wildcard $(glapi)/*.py) \
        $(wildcard $(glapi)/*.xml)
 
@@ -88,22 +79,6 @@ define es-gen
        $(hide) $(PRIVATE_SCRIPT) $(1) $(PRIVATE_XML) > $@
 endef
 
-$(intermediates)/main/api_exec_%.c: PRIVATE_SCRIPT := $(MESA_PYTHON2) $(LOCAL_PATH)/main/es_generator.py
-$(intermediates)/main/api_exec_%.c: PRIVATE_XML := -S $(LOCAL_PATH)/main/APIspec.xml
-$(intermediates)/main/api_exec_%_dispatch.h: PRIVATE_SCRIPT := $(MESA_PYTHON2) $(glapi)/gl_table.py
-$(intermediates)/main/api_exec_%_dispatch.h: PRIVATE_XML := -f $(glapi)/gl_and_es_API.xml
-$(intermediates)/main/api_exec_%_remap_helper.h: PRIVATE_SCRIPT := $(MESA_PYTHON2) $(glapi)/remap_helper.py
-$(intermediates)/main/api_exec_%_remap_helper.h: PRIVATE_XML := -f $(glapi)/gl_and_es_API.xml
-
-$(intermediates)/main/api_exec_es1.c: $(es_src_deps)
-       $(call es-gen, -V GLES1.1)
-
-$(intermediates)/main/api_exec_%_dispatch.h: $(es_hdr_deps)
-       $(call es-gen, -c $* -m remap_table)
-
-$(intermediates)/main/api_exec_%_remap_helper.h: $(es_hdr_deps)
-       $(call es-gen, -c $*)
-
 $(intermediates)/program/program_parse.tab.c: $(LOCAL_PATH)/program/program_parse.y
        $(mesa_local-y-to-c-and-h)
 
@@ -133,19 +108,19 @@ $(intermediates)/x86/matypes.h: $(matypes_deps)
 $(intermediates)/main/dispatch.h: PRIVATE_SCRIPT := $(MESA_PYTHON2) $(glapi)/gl_table.py
 $(intermediates)/main/dispatch.h: PRIVATE_XML := -f $(glapi)/gl_and_es_API.xml
 
-$(intermediates)/main/dispatch.h: $(es_hdr_deps)
+$(intermediates)/main/dispatch.h: $(dispatch_deps)
        $(call es-gen, $* -m remap_table)
 
 $(intermediates)/main/remap_helper.h: PRIVATE_SCRIPT := $(MESA_PYTHON2) $(glapi)/remap_helper.py
 $(intermediates)/main/remap_helper.h: PRIVATE_XML := -f $(glapi)/gl_and_es_API.xml
 
-$(intermediates)/main/remap_helper.h: $(es_hdr_deps)
+$(intermediates)/main/remap_helper.h: $(dispatch_deps)
        $(call es-gen, $*)
 
 $(intermediates)/main/enums.c: PRIVATE_SCRIPT :=$(MESA_PYTHON2) $(glapi)/gl_enums.py
 $(intermediates)/main/enums.c: PRIVATE_XML := -f $(glapi)/gl_and_es_API.xml
 
-$(intermediates)/main/enums.c: $(es_src_deps)
+$(intermediates)/main/enums.c: $(dispatch_deps)
        $(call es-gen)
 
 GET_HASH_GEN := $(LOCAL_PATH)/main/get_hash_generator.py
index 1dc3132c7481d7a77c36b5350b07e692cfe9b29f..1f897257ed9564f998d4430f21561e5be06a656d 100644 (file)
@@ -53,9 +53,6 @@ include $(GLAPI)/glapi_gen.mk
 
 BUILT_SOURCES = \
        main/git_sha1.h \
-       main/api_exec_es1_dispatch.h \
-       main/api_exec_es1_remap_helper.h \
-       main/api_exec_es1.c \
        main/get_hash.h \
        program/program_parse.tab.c \
        program/program_parse.tab.h \
@@ -64,18 +61,6 @@ CLEANFILES = \
        $(BUILT_SOURCES) \
        git_sha1.h.tmp
 
-main/api_exec_es1_dispatch.h: $(GLAPI)/gl_and_es_API.xml $(glapi_gen_dispatch_deps)
-       $(call glapi_gen_dispatch,$<,es1)
-
-main/api_exec_es1_remap_helper.h: $(GLAPI)/gl_and_es_API.xml $(glapi_gen_remap_deps)
-       $(call glapi_gen_remap,$<,es1)
-
-main/api_exec_es1.o: main/api_exec_es1_dispatch.h main/api_exec_es1_remap_helper.h
-
-main/api_exec_es1.c: main/APIspec.xml main/es_generator.py main/APIspecutil.py main/APIspec.py
-       $(AM_V_GEN) $(PYTHON2) $(PYTHON_FLAGS) $(srcdir)/main/es_generator.py \
-         -S $(srcdir)/main/APIspec.xml -V GLES1.1 > $@
-
 program/program_parse.tab.c program/program_parse.tab.h: program/program_parse.y
        $(MKDIR_P) program
        $(AM_V_GEN) $(YACC) -p "_mesa_program_" -v -d --output=program/program_parse.tab.c $<
index 12bb70aecdae92f44e87f97b55e08c0ba87373c1..53e5ee8c206b5b3f6e0cb445b5f1c4a1538b0877 100644 (file)
@@ -339,27 +339,9 @@ if env['gles']:
 
     # generate GLES sources
     gles_sources = ['main/es1_conversion.c',]
-    gles_sources += env.CodeGenerate(
-        target = 'main/api_exec_es1.c',
-        script = 'main/es_generator.py',
-        source = 'main/APIspec.xml',
-        command = python_cmd + ' $SCRIPT -S $SOURCE -V GLES1.1 > $TARGET'
-    )
 
     # generate GLES headers
     gles_headers = []
-    gles_headers += env.CodeGenerate(
-        target = 'main/api_exec_es1_dispatch.h',
-        script = GLAPI + 'gen/gl_table.py',
-        source = GLAPI + 'gen/gl_and_es_API.xml',
-        command = python_cmd + ' $SCRIPT -c es1 -m remap_table -f $SOURCE > $TARGET',
-    )
-    gles_headers += env.CodeGenerate(
-        target = 'main/api_exec_es1_remap_helper.h',
-        script = GLAPI + 'gen/remap_helper.py',
-        source = GLAPI + 'gen/gl_and_es_API.xml',
-        command = python_cmd + ' $SCRIPT -c es1 -f $SOURCE > $TARGET',
-    )
 
     env.Depends(gles_sources, gles_headers)
 
index 29ebf8df4c7b36de2dca7caeb66a4bb0a227e21e..4115a9b2b495e1d5a1a4259776c995600dc4ed5c 100644 (file)
@@ -1,12 +1,9 @@
-api_exec_es1.c
 dispatch.h
 enums.c
 get_es1.c
 get_es2.c
 git_sha1.h
 git_sha1.h.tmp
-api_exec_es1_dispatch.h
-api_exec_es1_remap_helper.h
 remap_helper.h
 get_hash.h
 get_hash.h.tmp
diff --git a/src/mesa/main/APIspec.py b/src/mesa/main/APIspec.py
deleted file mode 100644 (file)
index 6947f73..0000000
+++ /dev/null
@@ -1,617 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2009 Chia-I Wu <olv@0xlab.org>
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# on the rights to use, copy, modify, merge, publish, distribute, sub
-# license, and/or sell copies of the Software, and to permit persons to whom
-# the Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
-# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-"""
-A parser for APIspec.
-"""
-
-class SpecError(Exception):
-    """Error in the spec file."""
-
-
-class Spec(object):
-    """A Spec is an abstraction of the API spec."""
-
-    def __init__(self, doc):
-        self.doc = doc
-
-        self.spec_node = doc.getRootElement()
-        self.tmpl_nodes = {}
-        self.api_nodes = {}
-        self.impl_node = None
-
-        # parse <apispec>
-        node = self.spec_node.children
-        while node:
-            if node.type == "element":
-                if node.name == "template":
-                    self.tmpl_nodes[node.prop("name")] = node
-                elif node.name == "api":
-                    self.api_nodes[node.prop("name")] = node
-                else:
-                    raise SpecError("unexpected node %s in apispec" %
-                            node.name)
-            node = node.next
-
-        # find an implementation
-        for name, node in self.api_nodes.iteritems():
-            if node.prop("implementation") == "true":
-                self.impl_node = node
-                break
-        if not self.impl_node:
-            raise SpecError("unable to find an implementation")
-
-    def get_impl(self):
-        """Return the implementation."""
-        return API(self, self.impl_node)
-
-    def get_api(self, name):
-        """Return an API."""
-        return API(self, self.api_nodes[name])
-
-
-class API(object):
-    """An API consists of categories and functions."""
-
-    def __init__(self, spec, api_node):
-        self.name = api_node.prop("name")
-        self.is_impl = (api_node.prop("implementation") == "true")
-
-        self.categories = []
-        self.functions = []
-
-        # parse <api>
-        func_nodes = []
-        node = api_node.children
-        while node:
-            if node.type == "element":
-                if node.name == "category":
-                    cat = node.prop("name")
-                    self.categories.append(cat)
-                elif node.name == "function":
-                    func_nodes.append(node)
-                else:
-                    raise SpecError("unexpected node %s in api" % node.name)
-            node = node.next
-
-        # realize functions
-        for func_node in func_nodes:
-            tmpl_node = spec.tmpl_nodes[func_node.prop("template")]
-            try:
-                func = Function(tmpl_node, func_node, self.is_impl,
-                                self.categories)
-            except SpecError, e:
-                func_name = func_node.prop("name")
-                raise SpecError("failed to parse %s: %s" % (func_name, e))
-            self.functions.append(func)
-
-    def match(self, func, conversions={}):
-        """Find a matching function in the API."""
-        match = None
-        need_conv = False
-        for f in self.functions:
-            matched, conv = f.match(func, conversions)
-            if matched:
-                match = f
-                need_conv = conv
-                # exact match
-                if not need_conv:
-                    break
-        return (match, need_conv)
-
-
-class Function(object):
-    """Parse and realize a <template> node."""
-
-    def __init__(self, tmpl_node, func_node, force_skip_desc=False, categories=[]):
-        self.tmpl_name = tmpl_node.prop("name")
-        self.direction = tmpl_node.prop("direction")
-
-        self.name = func_node.prop("name")
-        self.prefix = func_node.prop("default_prefix")
-        self.is_external = (func_node.prop("external") == "true")
-
-        if force_skip_desc:
-            self._skip_desc = True
-        else:
-            self._skip_desc = (func_node.prop("skip_desc") == "true")
-
-        self._categories = categories
-
-        # these attributes decide how the template is realized
-        self._gltype = func_node.prop("gltype")
-        if func_node.hasProp("vector_size"):
-            self._vector_size = int(func_node.prop("vector_size"))
-        else:
-            self._vector_size = 0
-        self._expand_vector = (func_node.prop("expand_vector") == "true")
-
-        self.return_type = "void"
-        param_nodes = []
-
-        # find <proto>
-        proto_node = tmpl_node.children
-        while proto_node:
-            if proto_node.type == "element" and proto_node.name == "proto":
-                break
-            proto_node = proto_node.next
-        if not proto_node:
-            raise SpecError("no proto")
-        # and parse it
-        node = proto_node.children
-        while node:
-            if node.type == "element":
-                if node.name == "return":
-                    self.return_type = node.prop("type")
-                elif node.name == "param" or node.name == "vector":
-                    if self.support_node(node):
-                        # make sure the node is not hidden
-                        if not (self._expand_vector and
-                                (node.prop("hide_if_expanded") == "true")):
-                            param_nodes.append(node)
-                else:
-                    raise SpecError("unexpected node %s in proto" % node.name)
-            node = node.next
-
-        self._init_params(param_nodes)
-        self._init_descs(tmpl_node, param_nodes)
-
-    def __str__(self):
-        return "%s %s%s(%s)" % (self.return_type, self.prefix, self.name,
-                self.param_string(True))
-
-    def _init_params(self, param_nodes):
-        """Parse and initialize parameters."""
-        self.params = []
-
-        for param_node in param_nodes:
-            size = self.param_node_size(param_node)
-            # when no expansion, vector is just like param
-            if param_node.name == "param" or not self._expand_vector:
-                param = Parameter(param_node, self._gltype, size)
-                self.params.append(param)
-                continue
-
-            if not size or size > param_node.lsCountNode():
-                raise SpecError("could not expand %s with unknown or "
-                                "mismatch sizes" % param.name)
-
-            # expand the vector
-            expanded_params = []
-            child = param_node.children
-            while child:
-                if (child.type == "element" and child.name == "param" and
-                    self.support_node(child)):
-                    expanded_params.append(Parameter(child, self._gltype))
-                    if len(expanded_params) == size:
-                        break
-                child = child.next
-            # just in case that lsCountNode counts unknown nodes
-            if len(expanded_params) < size:
-                raise SpecError("not enough named parameters")
-
-            self.params.extend(expanded_params)
-
-    def _init_descs(self, tmpl_node, param_nodes):
-        """Parse and initialize parameter descriptions."""
-        self.checker = Checker()
-        if self._skip_desc:
-            return
-
-        node = tmpl_node.children
-        while node:
-            if node.type == "element" and node.name == "desc":
-                if self.support_node(node):
-                    # parse <desc>
-                    desc = Description(node, self._categories)
-                    self.checker.add_desc(desc)
-            node = node.next
-
-        self.checker.validate(self, param_nodes)
-
-    def support_node(self, node):
-        """Return true if a node is in the supported category."""
-        return (not node.hasProp("category") or
-                node.prop("category") in self._categories)
-
-    def get_param(self, name):
-        """Return the named parameter."""
-        for param in self.params:
-            if param.name == name:
-                return param
-        return None
-
-    def param_node_size(self, param):
-        """Return the size of a vector."""
-        if param.name != "vector":
-            return 0
-
-        size = param.prop("size")
-        if size.isdigit():
-            size = int(size)
-        else:
-            size = 0
-        if not size:
-            size = self._vector_size
-            if not size and self._expand_vector:
-                # return the number of named parameters
-                size = param.lsCountNode()
-        return size
-
-    def param_string(self, declaration):
-        """Return the C code of the parameters."""
-        args = []
-        if declaration:
-            for param in self.params:
-                sep = "" if param.type.endswith("*") else " "
-                args.append("%s%s%s" % (param.type, sep, param.name))
-            if not args:
-                args.append("void")
-        else:
-            for param in self.params:
-                args.append(param.name)
-        return ", ".join(args)
-
-    def match(self, other, conversions={}):
-        """Return true if the functions match, probably with a conversion."""
-        if (self.tmpl_name != other.tmpl_name or
-            self.return_type != other.return_type or
-            len(self.params) != len(other.params)):
-            return (False, False)
-
-        need_conv = False
-        for i in xrange(len(self.params)):
-            src = other.params[i]
-            dst = self.params[i]
-            if (src.is_vector != dst.is_vector or src.size != dst.size):
-                return (False, False)
-            if src.type != dst.type:
-                if dst.base_type() in conversions.get(src.base_type(), []):
-                    need_conv = True
-                else:
-                    # unable to convert
-                    return (False, False)
-
-        return (True, need_conv)
-
-
-class Parameter(object):
-    """A parameter of a function."""
-
-    def __init__(self, param_node, gltype=None, size=0):
-        self.is_vector = (param_node.name == "vector")
-
-        self.name = param_node.prop("name")
-        self.size = size
-
-        type = param_node.prop("type")
-        if gltype:
-            type = type.replace("GLtype", gltype)
-        elif type.find("GLtype") != -1:
-            raise SpecError("parameter %s has unresolved type" % self.name)
-
-        self.type = type
-
-    def base_type(self):
-        """Return the base GL type by stripping qualifiers."""
-        return [t for t in self.type.split(" ") if t.startswith("GL")][0]
-
-
-class Checker(object):
-    """A checker is the collection of all descriptions on the same level.
-    Descriptions of the same parameter are concatenated.
-    """
-
-    def __init__(self):
-        self.switches = {}
-        self.switch_constants = {}
-
-    def add_desc(self, desc):
-        """Add a description."""
-        # TODO allow index to vary
-        const_attrs = ["index", "error", "convert", "size_str"]
-        if desc.name not in self.switches:
-            self.switches[desc.name] = []
-            self.switch_constants[desc.name] = {}
-            for attr in const_attrs:
-                self.switch_constants[desc.name][attr] = None
-
-        # some attributes, like error code, should be the same for all descs
-        consts = self.switch_constants[desc.name]
-        for attr in const_attrs:
-            if getattr(desc, attr) is not None:
-                if (consts[attr] is not None and
-                    consts[attr] != getattr(desc, attr)):
-                    raise SpecError("mismatch %s for %s" % (attr, desc.name))
-                consts[attr] = getattr(desc, attr)
-
-        self.switches[desc.name].append(desc)
-
-    def validate(self, func, param_nodes):
-        """Validate the checker against a function."""
-        tmp = Checker()
-
-        for switch in self.switches.itervalues():
-            valid_descs = []
-            for desc in switch:
-                if desc.validate(func, param_nodes):
-                    valid_descs.append(desc)
-            # no possible values
-            if not valid_descs:
-                return False
-            for desc in valid_descs:
-                if not desc._is_noop:
-                    tmp.add_desc(desc)
-
-        self.switches = tmp.switches
-        self.switch_constants = tmp.switch_constants
-        return True
-
-    def flatten(self, name=None):
-        """Return a flat list of all descriptions of the named parameter."""
-        flat_list = []
-        for switch in self.switches.itervalues():
-            for desc in switch:
-                if not name or desc.name == name:
-                    flat_list.append(desc)
-                flat_list.extend(desc.checker.flatten(name))
-        return flat_list
-
-    def always_check(self, name):
-        """Return true if the parameter is checked in all possible pathes."""
-        if name in self.switches:
-            return True
-
-        # a param is always checked if any of the switch always checks it
-        for switch in self.switches.itervalues():
-            # a switch always checks it if all of the descs always check it
-            always = True
-            for desc in switch:
-                if not desc.checker.always_check(name):
-                    always = False
-                    break
-            if always:
-                return True
-        return False
-
-    def _c_switch(self, name, indent="\t"):
-        """Output C switch-statement for the named parameter, for debug."""
-        switch = self.switches.get(name, [])
-        # make sure there are valid values
-        need_switch = False
-        for desc in switch:
-            if desc.values:
-                need_switch = True
-        if not need_switch:
-            return []
-
-        stmts = []
-        var = switch[0].name
-        if switch[0].index >= 0:
-            var += "[%d]" % switch[0].index
-        stmts.append("switch (%s) { /* assume GLenum */" % var)
-
-        for desc in switch:
-            if desc.values:
-                for val in desc.values:
-                    stmts.append("case %s:" % val)
-                for dep_name in desc.checker.switches.iterkeys():
-                    dep_stmts = [indent + s for s in desc.checker._c_switch(dep_name, indent)]
-                    stmts.extend(dep_stmts)
-                stmts.append(indent + "break;")
-
-        stmts.append("default:")
-        stmts.append(indent + "ON_ERROR(%s);" % switch[0].error);
-        stmts.append(indent + "break;")
-        stmts.append("}")
-
-        return stmts
-
-    def dump(self, indent="\t"):
-        """Dump the descriptions in C code."""
-        stmts = []
-        for name in self.switches.iterkeys():
-            c_switch = self._c_switch(name)
-            print "\n".join(c_switch)
-
-
-class Description(object):
-    """A description desribes a parameter and its relationship with other
-    parameters.
-    """
-
-    def __init__(self, desc_node, categories=[]):
-        self._categories = categories
-        self._is_noop = False
-
-        self.name = desc_node.prop("name")
-        self.index = -1
-
-        self.error = desc_node.prop("error") or "GL_INVALID_ENUM"
-        # vector_size may be C code
-        self.size_str = desc_node.prop("vector_size")
-
-        self._has_enum = False
-        self.values = []
-        dep_nodes = []
-
-        # parse <desc>
-        valid_names = ["value", "range", "desc"]
-        node = desc_node.children
-        while node:
-            if node.type == "element":
-                if node.name in valid_names:
-                    # ignore nodes that require unsupported categories
-                    if (node.prop("category") and
-                        node.prop("category") not in self._categories):
-                        node = node.next
-                        continue
-                else:
-                    raise SpecError("unexpected node %s in desc" % node.name)
-
-                if node.name == "value":
-                    val = node.prop("name")
-                    if not self._has_enum and val.startswith("GL_"):
-                        self._has_enum = True
-                    self.values.append(val)
-                elif node.name == "range":
-                    first = int(node.prop("from"))
-                    last = int(node.prop("to"))
-                    base = node.prop("base") or ""
-                    if not self._has_enum and base.startswith("GL_"):
-                        self._has_enum = True
-                    # expand range
-                    for i in xrange(first, last + 1):
-                        self.values.append("%s%d" % (base, i))
-                else: # dependent desc
-                    dep_nodes.append(node)
-            node = node.next
-
-        # default to convert if there is no enum
-        self.convert = not self._has_enum
-        if desc_node.hasProp("convert"):
-            self.convert = (desc_node.prop("convert") == "true")
-
-        self._init_deps(dep_nodes)
-
-    def _init_deps(self, dep_nodes):
-        """Parse and initialize dependents."""
-        self.checker = Checker()
-
-        for dep_node in dep_nodes:
-            # recursion!
-            dep = Description(dep_node, self._categories)
-            self.checker.add_desc(dep)
-
-    def _search_param_node(self, param_nodes, name=None):
-        """Search the template parameters for the named node."""
-        param_node = None
-        param_index = -1
-
-        if not name:
-            name = self.name
-        for node in param_nodes:
-            if name == node.prop("name"):
-                param_node = node
-            elif node.name == "vector":
-                child = node.children
-                idx = 0
-                while child:
-                    if child.type == "element" and child.name == "param":
-                        if name == child.prop("name"):
-                            param_node = node
-                            param_index = idx
-                            break
-                        idx += 1
-                    child = child.next
-            if param_node:
-                break
-        return (param_node, param_index)
-
-    def _find_final(self, func, param_nodes):
-        """Find the final parameter."""
-        param = func.get_param(self.name)
-        param_index = -1
-
-        # the described param is not in the final function
-        if not param:
-            # search the template parameters
-            node, index = self._search_param_node(param_nodes)
-            if not node:
-                raise SpecError("invalid desc %s in %s" %
-                        (self.name, func.name))
-
-            # a named parameter of a vector
-            if index >= 0:
-                param = func.get_param(node.prop("name"))
-                param_index = index
-            elif node.name == "vector":
-                # must be an expanded vector, check its size
-                if self.size_str and self.size_str.isdigit():
-                    size = int(self.size_str)
-                    expanded_size = func.param_node_size(node)
-                    if size != expanded_size:
-                        return (False, None, -1)
-            # otherwise, it is a valid, but no-op, description
-
-        return (True, param, param_index)
-
-    def validate(self, func, param_nodes):
-        """Validate a description against certain function."""
-        if self.checker.switches and not self.values:
-            raise SpecError("no valid values for %s" % self.name)
-
-        valid, param, param_index = self._find_final(func, param_nodes)
-        if not valid:
-            return False
-
-        # the description is valid, but the param is gone
-        # mark it no-op so that it will be skipped
-        if not param:
-            self._is_noop = True
-            return True
-
-        if param.is_vector:
-            # if param was known, this should have been done in __init__
-            if self._has_enum:
-                self.size_str = "1"
-            # size mismatch
-            if (param.size and self.size_str and self.size_str.isdigit() and
-                param.size != int(self.size_str)):
-                return False
-        elif self.size_str:
-            # only vector accepts vector_size
-            raise SpecError("vector_size is invalid for %s" % param.name)
-
-        if not self.checker.validate(func, param_nodes):
-            return False
-
-        # update the description
-        self.name = param.name
-        self.index = param_index
-
-        return True
-
-
-def main():
-    import libxml2
-
-    filename = "APIspec.xml"
-    apinames = ["GLES1.1", "GLES2.0"]
-
-    doc = libxml2.readFile(filename, None,
-            libxml2.XML_PARSE_DTDLOAD +
-            libxml2.XML_PARSE_DTDVALID +
-            libxml2.XML_PARSE_NOBLANKS)
-
-    spec = Spec(doc)
-    impl = spec.get_impl()
-    for apiname in apinames:
-        spec.get_api(apiname)
-
-    doc.freeDoc()
-
-    print "%s is successfully parsed" % filename
-
-
-if __name__ == "__main__":
-    main()
diff --git a/src/mesa/main/APIspec.xml b/src/mesa/main/APIspec.xml
deleted file mode 100644 (file)
index c396952..0000000
+++ /dev/null
@@ -1,2383 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE apispec SYSTEM "APIspec.dtd">
-
-<!-- A function is generated from a template.  Multiple functions can be
-     generated from a single template with different arguments.  For example,
-     glColor3f can be generated from
-
-     <function name="Color3f" template="Color" gltype="GLfloat" vector_size="3" expand_vector="true"/>
-
-     and glColor4iv can be generated from
-
-     <function name="Color4iv" template="Color" gltype="GLint" vector_size="4"/>
-
-     In a template, there are <desc>s that describe the properties of
-     parameters.  A <desc> can enumerate the valid values of a parameter.  It
-     can also specify the error code when an invalid value is given, and etc.
-     By nesting <desc>s, they can create dependency between parameters.
-
-     A function can be marked as external.  It means that the function cannot
-     be dispatched to the corresponding mesa function, if one exists, directly,
-     and requires an external implementation.
--->
-
-<apispec>
-
-<template name="Color">
-       <proto>
-               <return type="void"/>
-               <vector name="v" type="const GLtype *" size="dynamic">
-                       <param name="red" type="GLtype"/>
-                       <param name="green" type="GLtype"/>
-                       <param name="blue" type="GLtype"/>
-                       <param name="alpha" type="GLtype"/>
-               </vector>
-       </proto>
-</template>
-
-<template name="ClipPlane">
-       <proto>
-               <return type="void"/>
-               <param name="plane" type="GLenum"/>
-               <vector name="equation" type="const GLtype *" size="4"/>
-       </proto>
-</template>
-
-<template name="CullFace">
-       <proto>
-               <return type="void"/>
-               <param name="mode" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="Fog">
-       <proto>
-               <return type="void"/>
-               <param name="pname" type="GLenum"/>
-               <vector name="params" type="const GLtype *" size="dynamic">
-                       <param name="param" type="GLtype"/>
-               </vector>
-       </proto>
-</template>
-
-<template name="FrontFace">
-       <proto>
-               <return type="void"/>
-               <param name="mode" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="Hint">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="mode" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="Light">
-       <proto>
-               <return type="void"/>
-               <param name="light" type="GLenum"/>
-               <param name="pname" type="GLenum"/>
-               <vector name="params" type="const GLtype *" size="dynamic">
-                       <param name="param" type="GLtype"/>
-               </vector>
-       </proto>
-</template>
-
-<template name="LightModel">
-       <proto>
-               <return type="void"/>
-               <param name="pname" type="GLenum"/>
-               <vector name="params" type="const GLtype *" size="dynamic">
-                       <param name="param" type="GLtype"/>
-               </vector>
-       </proto>
-</template>
-
-<template name="LineWidth">
-       <proto>
-               <return type="void"/>
-               <param name="width" type="GLtype"/>
-       </proto>
-</template>
-
-<template name="Material">
-       <proto>
-               <return type="void"/>
-               <param name="face" type="GLenum"/>
-               <param name="pname" type="GLenum"/>
-               <vector name="params" type="const GLtype *" size="dynamic">
-                       <param name="param" type="GLtype"/>
-               </vector>
-       </proto>
-</template>
-
-<template name="PointSize">
-       <proto>
-               <return type="void"/>
-               <param name="size" type="GLtype"/>
-       </proto>
-</template>
-
-<template name="PointSizePointer">
-       <proto>
-               <return type="void"/>
-               <param name="type" type="GLenum"/>
-               <param name="stride" type="GLsizei"/>
-               <param name="pointer" type="const GLvoid *"/>
-       </proto>
-</template>
-
-<template name="Scissor">
-       <proto>
-               <return type="void"/>
-               <param name="x" type="GLint"/>
-               <param name="y" type="GLint"/>
-               <param name="width" type="GLsizei"/>
-               <param name="height" type="GLsizei"/>
-       </proto>
-</template>
-
-<template name="ShadeModel">
-       <proto>
-               <return type="void"/>
-               <param name="mode" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="TexParameter">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="pname" type="GLenum"/>
-               <vector name="params" type="const GLtype *" size="dynamic">
-                       <param name="param" type="GLtype"/>
-               </vector>
-       </proto>
-</template>
-
-<template name="TexImage2D">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="level" type="GLint"/>
-               <param name="internalFormat" type="GLint"/> <!-- should be GLenum -->
-               <param name="width" type="GLsizei"/>
-               <param name="height" type="GLsizei"/>
-               <param name="border" type="GLint"/>
-               <param name="format" type="GLenum"/>
-               <param name="type" type="GLenum"/>
-               <param name="pixels" type="const GLvoid *"/>
-       </proto>
-</template>
-
-<template name="TexEnv">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="pname" type="GLenum"/>
-               <vector name="params" type="const GLtype *" size="dynamic">
-                       <param name="param" type="GLtype"/>
-               </vector>
-       </proto>
-</template>
-
-<template name="TexGen">
-       <proto>
-               <return type="void"/>
-               <param name="coord" type="GLenum"/>
-               <param name="pname" type="GLenum"/>
-               <vector name="params" type="const GLtype *" size="dynamic">
-                       <param name="param" type="GLtype"/>
-               </vector>
-       </proto>
-</template>
-
-<template name="Clear">
-       <proto>
-               <return type="void"/>
-               <param name="mask" type="GLbitfield"/>
-       </proto>
-</template>
-
-<template name="ClearColor">
-       <proto>
-               <return type="void"/>
-               <param name="red" type="GLtype"/>
-               <param name="green" type="GLtype"/>
-               <param name="blue" type="GLtype"/>
-               <param name="alpha" type="GLtype"/>
-       </proto>
-</template>
-
-<template name="ClearStencil">
-       <proto>
-               <return type="void"/>
-               <param name="s" type="GLint"/>
-       </proto>
-</template>
-
-<template name="ClearDepth">
-       <proto>
-               <return type="void"/>
-               <param name="depth" type="GLtype"/>
-       </proto>
-</template>
-
-<template name="StencilMask">
-       <proto>
-               <return type="void"/>
-               <param name="mask" type="GLuint"/>
-       </proto>
-</template>
-
-<template name="StencilMaskSeparate">
-       <proto>
-               <return type="void"/>
-               <param name="face" type="GLenum"/>
-               <param name="mask" type="GLuint"/>
-       </proto>
-</template>
-
-<template name="ColorMask">
-       <proto>
-               <return type="void"/>
-               <param name="red" type="GLboolean"/>
-               <param name="green" type="GLboolean"/>
-               <param name="blue" type="GLboolean"/>
-               <param name="alpha" type="GLboolean"/>
-       </proto>
-</template>
-
-<template name="DepthMask">
-       <proto>
-               <return type="void"/>
-               <param name="flag" type="GLboolean"/>
-       </proto>
-</template>
-
-<template name="Disable">
-       <proto>
-               <return type="void"/>
-               <param name="cap" type="GLenum"/>
-       </proto>
-</template>
-
-<!-- it is exactly the same as Disable -->
-<template name="Enable">
-       <proto>
-               <return type="void"/>
-               <param name="cap" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="Finish">
-       <proto>
-               <return type="void"/>
-       </proto>
-</template>
-
-<template name="Flush">
-       <proto>
-               <return type="void"/>
-       </proto>
-</template>
-
-<template name="AlphaFunc">
-       <proto>
-               <return type="void"/>
-               <param name="func" type="GLenum"/>
-               <param name="ref" type="GLtype"/>
-       </proto>
-</template>
-
-<template name="BlendFunc">
-       <proto>
-               <return type="void"/>
-               <param name="sfactor" type="GLenum"/>
-               <param name="dfactor" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="LogicOp">
-       <proto>
-               <return type="void"/>
-               <param name="opcode" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="StencilFunc">
-       <proto>
-               <return type="void"/>
-               <param name="func" type="GLenum"/>
-               <param name="ref" type="GLint"/>
-               <param name="mask" type="GLuint"/>
-       </proto>
-</template>
-
-<template name="StencilFuncSeparate">
-       <proto>
-               <return type="void"/>
-               <param name="face" type="GLenum"/>
-               <param name="func" type="GLenum"/>
-               <param name="ref" type="GLint"/>
-               <param name="mask" type="GLuint"/>
-       </proto>
-</template>
-
-<template name="StencilOp">
-       <proto>
-               <return type="void"/>
-               <param name="fail" type="GLenum"/>
-               <param name="zfail" type="GLenum"/>
-               <param name="zpass" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="StencilOpSeparate">
-       <proto>
-               <return type="void"/>
-               <param name="face" type="GLenum"/>
-               <param name="fail" type="GLenum"/>
-               <param name="zfail" type="GLenum"/>
-               <param name="zpass" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="DepthFunc">
-       <proto>
-               <return type="void"/>
-               <param name="func" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="PixelStore">
-       <proto>
-               <return type="void"/>
-               <param name="pname" type="GLenum"/>
-               <param name="param" type="GLtype"/>
-       </proto>
-</template>
-
-<template name="ReadPixels" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="x" type="GLint"/>
-               <param name="y" type="GLint"/>
-               <param name="width" type="GLsizei"/>
-               <param name="height" type="GLsizei"/>
-               <param name="format" type="GLenum"/>
-               <param name="type" type="GLenum"/>
-               <param name="pixels" type="GLvoid *"/>
-       </proto>
-</template>
-
-<template name="GetClipPlane" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="plane" type="GLenum"/>
-               <vector name="equation" type="GLtype *" size="4"/>
-       </proto>
-</template>
-
-<template name="GetError" direction="get">
-       <proto>
-               <return type="GLenum"/>
-       </proto>
-</template>
-
-<!-- template for GetFloatv, GetIntegerv, GetBoolean, and GetFixedv -->
-<template name="GetState" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="pname" type="GLenum"/>
-               <vector name="params" type="GLtype *" size="dynamic"/>
-       </proto>
-       <!-- param checking is done in mesa -->
-</template>
-
-<template name="GetLight" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="light" type="GLenum"/>
-               <param name="pname" type="GLenum"/>
-               <vector name="params" type="GLtype *" size="dynamic"/>
-       </proto>
-</template>
-
-<template name="GetMaterial" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="face" type="GLenum"/>
-               <param name="pname" type="GLenum"/>
-               <vector name="params" type="GLtype *" size="dynamic">
-                       <param name="param" type="GLtype"/>
-               </vector>
-       </proto>
-</template>
-
-<template name="GetString" direction="get">
-       <proto>
-               <return type="const GLubyte *"/>
-               <param name="name" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="GetTexEnv" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="pname" type="GLenum"/>
-               <vector name="params" type="GLtype *" size="dynamic"/>
-       </proto>
-</template>
-
-<template name="GetTexGen" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="coord" type="GLenum"/>
-               <param name="pname" type="GLenum"/>
-               <vector name="params" type="GLtype *" size="dynamic"/>
-       </proto>
-</template>
-
-<template name="GetTexParameter" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="pname" type="GLenum"/>
-               <vector name="params" type="GLtype *" size="dynamic"/>
-       </proto>
-</template>
-
-<template name="IsEnabled" direction="get">
-       <proto>
-               <return type="GLboolean"/>
-               <param name="cap" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="DepthRange">
-       <proto>
-               <return type="void"/>
-               <param name="zNear" type="GLtype"/>
-               <param name="zFar" type="GLtype"/>
-       </proto>
-</template>
-
-<template name="Frustum">
-       <proto>
-               <return type="void"/>
-               <param name="left" type="GLtype"/>
-               <param name="right" type="GLtype"/>
-               <param name="bottom" type="GLtype"/>
-               <param name="top" type="GLtype"/>
-               <param name="zNear" type="GLtype"/>
-               <param name="zFar" type="GLtype"/>
-       </proto>
-</template>
-
-<template name="LoadIdentity">
-       <proto>
-               <return type="void"/>
-       </proto>
-</template>
-
-<template name="LoadMatrix">
-       <proto>
-               <return type="void"/>
-               <vector name="m" type="const GLtype *" size="16"/>
-       </proto>
-</template>
-
-<template name="MatrixMode">
-       <proto>
-               <return type="void"/>
-               <param name="mode" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="MultMatrix">
-       <proto>
-               <return type="void"/>
-               <vector name="m" type="const GLtype *" size="16"/>
-       </proto>
-</template>
-
-<template name="Ortho">
-       <proto>
-               <return type="void"/>
-               <param name="left" type="GLtype"/>
-               <param name="right" type="GLtype"/>
-               <param name="bottom" type="GLtype"/>
-               <param name="top" type="GLtype"/>
-               <param name="zNear" type="GLtype"/>
-               <param name="zFar" type="GLtype"/>
-       </proto>
-</template>
-
-<template name="PopMatrix">
-       <proto>
-               <return type="void"/>
-       </proto>
-</template>
-
-<template name="PushMatrix">
-       <proto>
-               <return type="void"/>
-       </proto>
-</template>
-
-<template name="Rotate">
-       <proto>
-               <return type="void"/>
-               <param name="angle" type="GLtype"/>
-               <param name="x" type="GLtype"/>
-               <param name="y" type="GLtype"/>
-               <param name="z" type="GLtype"/>
-       </proto>
-</template>
-
-<template name="Scale">
-       <proto>
-               <return type="void"/>
-               <param name="x" type="GLtype"/>
-               <param name="y" type="GLtype"/>
-               <param name="z" type="GLtype"/>
-       </proto>
-</template>
-
-<template name="Translate">
-       <proto>
-               <return type="void"/>
-               <param name="x" type="GLtype"/>
-               <param name="y" type="GLtype"/>
-               <param name="z" type="GLtype"/>
-       </proto>
-</template>
-
-<template name="Viewport">
-       <proto>
-               <return type="void"/>
-               <param name="x" type="GLint"/>
-               <param name="y" type="GLint"/>
-               <param name="width" type="GLsizei"/>
-               <param name="height" type="GLsizei"/>
-       </proto>
-</template>
-
-<template name="ColorPointer">
-       <proto>
-               <return type="void"/>
-               <param name="size" type="GLint"/>
-               <param name="type" type="GLenum"/>
-               <param name="stride" type="GLsizei"/>
-               <param name="pointer" type="const GLvoid *"/>
-       </proto>
-</template>
-
-<template name="DisableClientState">
-       <proto>
-               <return type="void"/>
-               <param name="array" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="DrawArrays">
-       <proto>
-               <return type="void"/>
-               <param name="mode" type="GLenum"/>
-               <param name="first" type="GLint"/>
-               <param name="count" type="GLsizei"/>
-       </proto>
-</template>
-
-<template name="DrawElements">
-       <proto>
-               <return type="void"/>
-               <param name="mode" type="GLenum"/>
-               <param name="count" type="GLsizei"/>
-               <param name="type" type="GLenum"/>
-               <param name="indices" type="const GLvoid *"/>
-       </proto>
-</template>
-
-<template name="EnableClientState">
-       <proto>
-               <return type="void"/>
-               <param name="array" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="GetPointer" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="pname" type="GLenum"/>
-               <vector name="params" type="GLvoid **" size="dynamic"/>
-       </proto>
-</template>
-
-<template name="Normal">
-       <proto>
-               <return type="void"/>
-               <vector name="v" type="const GLtype *" size="3">
-                       <param name="nx" type="GLtype"/>
-                       <param name="ny" type="GLtype"/>
-                       <param name="nz" type="GLtype"/>
-               </vector>
-       </proto>
-</template>
-
-<template name="NormalPointer">
-       <proto>
-               <return type="void"/>
-               <param name="type" type="GLenum"/>
-               <param name="stride" type="GLsizei"/>
-               <param name="pointer" type="const GLvoid *"/>
-       </proto>
-</template>
-
-<template name="TexCoordPointer">
-       <proto>
-               <return type="void"/>
-               <param name="size" type="GLint"/>
-               <param name="type" type="GLenum"/>
-               <param name="stride" type="GLsizei"/>
-               <param name="pointer" type="const GLvoid *"/>
-       </proto>
-</template>
-
-<template name="VertexPointer">
-       <proto>
-               <return type="void"/>
-               <param name="size" type="GLint"/>
-               <param name="type" type="GLenum"/>
-               <param name="stride" type="GLsizei"/>
-               <param name="pointer" type="const GLvoid *"/>
-       </proto>
-</template>
-
-<template name="PolygonOffset">
-       <proto>
-               <return type="void"/>
-               <param name="factor" type="GLtype"/>
-               <param name="units" type="GLtype"/>
-       </proto>
-</template>
-
-<template name="CopyTexImage2D">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="level" type="GLint"/>
-               <param name="internalFormat" type="GLenum"/>
-               <param name="x" type="GLint"/>
-               <param name="y" type="GLint"/>
-               <param name="width" type="GLsizei"/>
-               <param name="height" type="GLsizei"/>
-               <param name="border" type="GLint"/>
-       </proto>
-</template>
-
-<template name="CopyTexSubImage2D">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="level" type="GLint"/>
-               <param name="xoffset" type="GLint"/>
-               <param name="yoffset" type="GLint"/>
-               <param name="x" type="GLint"/>
-               <param name="y" type="GLint"/>
-               <param name="width" type="GLsizei"/>
-               <param name="height" type="GLsizei"/>
-       </proto>
-</template>
-
-<template name="TexSubImage2D">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="level" type="GLint"/>
-               <param name="xoffset" type="GLint"/>
-               <param name="yoffset" type="GLint"/>
-               <param name="width" type="GLsizei"/>
-               <param name="height" type="GLsizei"/>
-               <param name="format" type="GLenum"/>
-               <param name="type" type="GLenum"/>
-               <param name="pixels" type="const GLvoid *"/>
-       </proto>
-</template>
-
-<template name="BindTexture">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="texture" type="GLuint"/>
-       </proto>
-</template>
-
-<template name="DeleteTextures">
-       <proto>
-               <return type="void"/>
-               <param name="n" type="GLsizei"/>
-               <param name="textures" type="const GLuint *"/>
-       </proto>
-</template>
-
-<template name="GenTextures" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="n" type="GLsizei"/>
-               <param name="textures" type="GLuint *"/>
-       </proto>
-</template>
-
-<template name="IsTexture" direction="get">
-       <proto>
-               <return type="GLboolean"/>
-               <param name="texture" type="GLuint"/>
-       </proto>
-</template>
-
-<template name="BlendColor">
-       <proto>
-               <return type="void"/>
-               <param name="red" type="GLtype"/>
-               <param name="green" type="GLtype"/>
-               <param name="blue" type="GLtype"/>
-               <param name="alpha" type="GLtype"/>
-       </proto>
-</template>
-
-<template name="BlendEquation">
-       <proto>
-               <return type="void"/>
-               <param name="mode" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="BlendEquationSeparate">
-       <proto>
-               <return type="void"/>
-               <param name="modeRGB" type="GLenum"/>
-               <param name="modeAlpha" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="TexImage3D">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="level" type="GLint"/>
-               <param name="internalFormat" type="GLenum"/>
-               <param name="width" type="GLsizei"/>
-               <param name="height" type="GLsizei"/>
-               <param name="depth" type="GLsizei"/>
-               <param name="border" type="GLint"/>
-               <param name="format" type="GLenum"/>
-               <param name="type" type="GLenum"/>
-               <param name="pixels" type="const GLvoid *"/>
-       </proto>
-
-</template>
-
-<template name="TexSubImage3D">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="level" type="GLint"/>
-               <param name="xoffset" type="GLint"/>
-               <param name="yoffset" type="GLint"/>
-               <param name="zoffset" type="GLint"/>
-               <param name="width" type="GLsizei"/>
-               <param name="height" type="GLsizei"/>
-               <param name="depth" type="GLsizei"/>
-               <param name="format" type="GLenum"/>
-               <param name="type" type="GLenum"/>
-               <param name="pixels" type="const GLvoid *"/>
-       </proto>
-</template>
-
-<template name="CopyTexSubImage3D">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="level" type="GLint"/>
-               <param name="xoffset" type="GLint"/>
-               <param name="yoffset" type="GLint"/>
-               <param name="zoffset" type="GLint"/>
-               <param name="x" type="GLint"/>
-               <param name="y" type="GLint"/>
-               <param name="width" type="GLsizei"/>
-               <param name="height" type="GLsizei"/>
-       </proto>
-</template>
-
-<template name="MultiTexCoord">
-       <proto>
-               <return type="void"/>
-               <param name="texture" type="GLenum"/>
-               <vector name="v" type="const GLtype *" size="dynamic">
-                       <param name="s" type="GLtype"/>
-                       <param name="t" type="GLtype"/>
-                       <param name="r" type="GLtype"/>
-                       <param name="q" type="GLtype"/>
-               </vector>
-       </proto>
-</template>
-
-<template name="CompressedTexImage3D">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="level" type="GLint"/>
-               <param name="internalFormat" type="GLenum"/>
-               <param name="width" type="GLsizei"/>
-               <param name="height" type="GLsizei"/>
-               <param name="depth" type="GLsizei"/>
-               <param name="border" type="GLint"/>
-               <param name="imagesize" type="GLsizei"/>
-               <param name="data" type="const GLvoid *"/>
-       </proto>
-</template>
-
-<template name="CompressedTexSubImage3D">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="level" type="GLint"/>
-               <param name="xoffset" type="GLint"/>
-               <param name="yoffset" type="GLint"/>
-               <param name="zoffset" type="GLint"/>
-               <param name="width" type="GLsizei"/>
-               <param name="height" type="GLsizei"/>
-               <param name="depth" type="GLsizei"/>
-               <param name="format" type="GLenum"/>
-               <param name="imagesize" type="GLsizei"/>
-               <param name="data" type="const GLvoid *"/>
-       </proto>
-</template>
-
-<template name="ActiveTexture">
-       <proto>
-               <return type="void"/>
-               <param name="texture" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="ClientActiveTexture">
-       <proto>
-               <return type="void"/>
-               <param name="texture" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="SampleCoverage">
-       <proto>
-               <return type="void"/>
-               <param name="value" type="GLtype"/>
-               <param name="invert" type="GLboolean"/>
-       </proto>
-</template>
-
-<template name="CompressedTexImage2D">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="level" type="GLint"/>
-               <param name="internalFormat" type="GLenum"/>
-               <param name="width" type="GLsizei"/>
-               <param name="height" type="GLsizei"/>
-               <param name="border" type="GLint"/>
-               <param name="imageSize" type="GLsizei"/>
-               <param name="data" type="const GLvoid *"/>
-       </proto>
-</template>
-
-<template name="CompressedTexSubImage2D">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="level" type="GLint"/>
-               <param name="xoffset" type="GLint"/>
-               <param name="yoffset" type="GLint"/>
-               <param name="width" type="GLsizei"/>
-               <param name="height" type="GLsizei"/>
-               <param name="format" type="GLenum"/>
-               <param name="imageSize" type="GLsizei"/>
-               <param name="data" type="const GLvoid *"/>
-       </proto>
-</template>
-
-<template name="BlendFuncSeparate">
-       <proto>
-               <return type="void"/>
-               <param name="srcRGB" type="GLenum"/>
-               <param name="dstRGB" type="GLenum"/>
-               <param name="srcAlpha" type="GLenum"/>
-               <param name="dstAlpha" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="PointParameter">
-       <proto>
-               <return type="void"/>
-               <param name="pname" type="GLenum"/>
-               <vector name="params" type="const GLtype *" size="dynamic">
-                       <param name="param" type="GLtype"/>
-               </vector>
-       </proto>
-</template>
-
-<template name="VertexAttrib">
-       <proto>
-               <return type="void"/>
-               <param name="index" type="GLuint"/>
-               <vector name="v" type="const GLtype *" size="dynamic">
-                       <param name="x" type="GLtype"/>
-                       <param name="y" type="GLtype"/>
-                       <param name="z" type="GLtype"/>
-                       <param name="w" type="GLtype"/>
-               </vector>
-       </proto>
-</template>
-
-<template name="VertexAttribPointer">
-       <proto>
-               <return type="void"/>
-               <param name="index" type="GLuint"/>
-               <param name="size" type="GLint"/>
-               <param name="type" type="GLenum"/>
-               <param name="normalized" type="GLboolean"/>
-               <param name="stride" type="GLsizei"/>
-               <param name="pointer" type="const GLvoid *"/>
-       </proto>
-</template>
-
-<template name="EnableVertexAttribArray">
-       <proto>
-               <return type="void"/>
-               <param name="index" type="GLuint"/>
-       </proto>
-</template>
-
-<template name="DisableVertexAttribArray">
-       <proto>
-               <return type="void"/>
-               <param name="index" type="GLuint"/>
-       </proto>
-</template>
-
-<template name="IsProgram" direction="get">
-       <proto>
-               <return type="GLboolean"/>
-               <param name="program" type="GLuint"/>
-       </proto>
-</template>
-
-<template name="GetProgram" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="program" type="GLuint"/>
-               <param name="pname" type="GLenum"/>
-               <vector name="params" type="GLtype *" size="dynamic"/>
-       </proto>
-</template>
-
-<template name="GetVertexAttrib" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="index" type="GLuint"/>
-               <param name="pname" type="GLenum"/>
-               <vector name="params" type="GLtype *" size="dynamic"/>
-       </proto>
-</template>
-
-<template name="GetVertexAttribPointer" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="index" type="GLuint"/>
-               <param name="pname" type="GLenum"/>
-               <vector name="pointer" type="GLvoid **" size="dynamic"/>
-       </proto>
-</template>
-
-<template name="GetBufferPointer" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="pname" type="GLenum"/>
-               <vector name="params" type="GLvoid **" size="dynamic"/>
-       </proto>
-</template>
-
-<template name="MapBuffer" direction="get">
-       <proto>
-               <return type="void *"/>
-               <param name="target" type="GLenum"/>
-               <param name="access" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="UnmapBuffer" direction="get">
-       <proto>
-               <return type="GLboolean"/>
-               <param name="target" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="BindBuffer">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="buffer" type="GLuint"/>
-       </proto>
-</template>
-
-<template name="BufferData">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="size" type="GLsizeiptr"/>
-               <param name="data" type="const GLvoid *"/>
-               <param name="usage" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="BufferSubData">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="offset" type="GLintptr"/>
-               <param name="size" type="GLsizeiptr"/>
-               <param name="data" type="const GLvoid *"/>
-       </proto>
-</template>
-
-<template name="DeleteBuffers">
-       <proto>
-               <return type="void"/>
-               <param name="n" type="GLsizei"/>
-               <param name="buffer" type="const GLuint *"/>
-       </proto>
-</template>
-
-<template name="GenBuffers" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="n" type="GLsizei"/>
-               <param name="buffer" type="GLuint *"/>
-       </proto>
-</template>
-
-<template name="GetBufferParameter" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="pname" type="GLenum"/>
-               <vector name="params" type="GLtype *" size="dynamic"/>
-       </proto>
-</template>
-
-<template name="IsBuffer" direction="get">
-       <proto>
-               <return type="GLboolean"/>
-               <param name="buffer" type="GLuint"/>
-       </proto>
-</template>
-
-<template name="CreateShader">
-       <proto>
-               <return type="GLuint"/>
-               <param name="type" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="ShaderSource">
-       <proto>
-               <return type="void"/>
-               <param name="shader" type="GLuint"/>
-               <param name="count" type="GLsizei"/>
-               <param name="string" type="const GLchar * const *"/>
-               <param name="length" type="const int *"/>
-       </proto>
-</template>
-
-<template name="CompileShader">
-       <proto>
-               <return type="void"/>
-               <param name="shader" type="GLuint"/>
-       </proto>
-</template>
-
-<template name="ReleaseShaderCompiler">
-       <proto>
-               <return type="void"/>
-       </proto>
-</template>
-
-<template name="DeleteShader">
-       <proto>
-               <return type="void"/>
-               <param name="shader" type="GLuint"/>
-       </proto>
-</template>
-
-<template name="ShaderBinary">
-       <proto>
-               <return type="void"/>
-               <param name="n" type="GLsizei"/>
-               <param name="shaders" type="const GLuint *"/>
-               <param name="binaryformat" type="GLenum"/>
-               <param name="binary" type="const GLvoid *"/>
-               <param name="length" type="GLsizei"/>
-       </proto>
-</template>
-
-<template name="CreateProgram">
-       <proto>
-               <return type="GLuint"/>
-       </proto>
-</template>
-
-<template name="AttachShader">
-       <proto>
-               <return type="void"/>
-               <param name="program" type="GLuint"/>
-               <param name="shader" type="GLuint"/>
-       </proto>
-</template>
-
-<template name="DetachShader">
-       <proto>
-               <return type="void"/>
-               <param name="program" type="GLuint"/>
-               <param name="shader" type="GLuint"/>
-       </proto>
-</template>
-
-<template name="LinkProgram">
-       <proto>
-               <return type="void"/>
-               <param name="program" type="GLuint"/>
-       </proto>
-</template>
-
-<template name="UseProgram">
-       <proto>
-               <return type="void"/>
-               <param name="program" type="GLuint"/>
-       </proto>
-</template>
-
-<template name="DeleteProgram">
-       <proto>
-               <return type="void"/>
-               <param name="program" type="GLuint"/>
-       </proto>
-</template>
-
-<template name="GetActiveAttrib" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="program" type="GLuint"/>
-               <param name="index" type="GLuint"/>
-               <param name="bufSize" type="GLsizei"/>
-               <param name="length" type="GLsizei *"/>
-               <param name="size" type="GLint *"/>
-               <param name="type" type="GLenum *"/>
-               <param name="name" type="GLchar *"/>
-       </proto>
-</template>
-
-<template name="GetAttribLocation" direction="get">
-       <proto>
-               <return type="GLint"/>
-               <param name="program" type="GLuint"/>
-               <param name="name" type="const char *"/>
-       </proto>
-</template>
-
-<template name="BindAttribLocation">
-       <proto>
-               <return type="void"/>
-               <param name="program" type="GLuint"/>
-               <param name="index" type="GLuint"/>
-               <param name="name" type="const char *"/>
-       </proto>
-</template>
-
-<template name="GetUniformLocation" direction="get">
-       <proto>
-               <return type="GLint"/>
-               <param name="program" type="GLuint"/>
-               <param name="name" type="const char *"/>
-       </proto>
-</template>
-
-<template name="GetActiveUniform" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="program" type="GLuint"/>
-               <param name="index" type="GLuint"/>
-               <param name="bufSize" type="GLsizei"/>
-               <param name="length" type="GLsizei *"/>
-               <param name="size" type="GLint *"/>
-               <param name="type" type="GLenum *"/>
-               <param name="name" type="GLchar *"/>
-       </proto>
-</template>
-
-<template name="Uniform">
-       <proto>
-               <return type="void"/>
-               <param name="location" type="GLint"/>
-               <param name="count" type="GLsizei" hide_if_expanded="true"/>
-               <vector name="values" type="const GLtype *" size="dynamic">
-                       <param name="v0" type="GLtype"/>
-                       <param name="v1" type="GLtype"/>
-                       <param name="v2" type="GLtype"/>
-                       <param name="v3" type="GLtype"/>
-               </vector>
-       </proto>
-</template>
-
-<template name="UniformMatrix">
-       <proto>
-               <return type="void"/>
-               <param name="location" type="GLint"/>
-               <param name="count" type="GLsizei"/>
-               <param name="transpose" type="GLboolean"/>
-               <vector name="value" type="const GLtype *" size="dynamic"/>
-       </proto>
-</template>
-
-<template name="ValidateProgram">
-       <proto>
-               <return type="void"/>
-               <param name="program" type="GLuint"/>
-       </proto>
-</template>
-
-<template name="GenerateMipmap">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="BindFramebuffer">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="framebuffer" type="GLuint"/>
-       </proto>
-</template>
-
-<template name="DeleteFramebuffers">
-       <proto>
-               <return type="void"/>
-               <param name="n" type="GLsizei"/>
-               <param name="framebuffers" type="const GLuint *"/>
-       </proto>
-</template>
-
-<template name="GenFramebuffers">
-       <proto>
-               <return type="void"/>
-               <param name="n" type="GLsizei"/>
-               <param name="ids" type="GLuint *"/>
-       </proto>
-</template>
-
-<template name="BindRenderbuffer">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="renderbuffer" type="GLuint"/>
-       </proto>
-</template>
-
-<template name="DeleteRenderbuffers">
-       <proto>
-               <return type="void"/>
-               <param name="n" type="GLsizei"/>
-               <param name="renderbuffers" type="const GLuint *"/>
-       </proto>
-</template>
-
-<template name="GenRenderbuffers">
-       <proto>
-               <return type="void"/>
-               <param name="n" type="GLsizei"/>
-               <param name="renderbuffers" type="GLuint *"/>
-       </proto>
-</template>
-
-<template name="RenderbufferStorage">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="internalFormat" type="GLenum"/>
-               <param name="width" type="GLsizei"/>
-               <param name="height" type="GLsizei"/>
-       </proto>
-</template>
-
-<template name="FramebufferRenderbuffer">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="attachment" type="GLenum"/>
-               <param name="renderbuffertarget" type="GLenum"/>
-               <param name="renderbuffer" type="GLuint"/>
-       </proto>
-</template>
-
-<template name="FramebufferTexture2D">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="attachment" type="GLenum"/>
-               <param name="textarget" type="GLenum"/>
-               <param name="texture" type="GLuint"/>
-               <param name="level" type="GLint"/>
-       </proto>
-       <!-- According to the base specification, "level" must be 0.  But
-            extension GL_OES_fbo_render_mipmap lifts that restriction,
-            so no restriction is placed here. -->
-</template>
-
-<template name="FramebufferTexture3D">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="attachment" type="GLenum"/>
-               <param name="textarget" type="GLenum"/>
-               <param name="texture" type="GLuint"/>
-               <param name="level" type="GLint"/>
-               <param name="zoffset" type="GLint"/>
-       </proto>
-</template>
-
-<template name="CheckFramebufferStatus" direction="get">
-       <proto>
-               <return type="GLenum"/>
-               <param name="target" type="GLenum"/>
-       </proto>
-</template>
-
-<template name="GetFramebufferAttachmentParameter" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="attachment" type="GLenum"/>
-               <param name="pname" type="GLenum"/>
-               <vector name="params" type="GLtype *" size="dynamic"/>
-       </proto>
-</template>
-
-<template name="GetRenderbufferParameter" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="pname" type="GLenum"/>
-               <vector name="params" type="GLtype *" size="dynamic"/>
-       </proto>
-</template>
-
-<template name="IsRenderbuffer" direction="get">
-       <proto>
-               <return type="GLboolean"/>
-               <param name="renderbuffer" type="GLuint"/>
-       </proto>
-</template>
-
-<template name="IsFramebuffer" direction="get">
-       <proto>
-               <return type="GLboolean"/>
-               <param name="framebuffer" type="GLuint"/>
-       </proto>
-</template>
-
-<template name="IsShader" direction="get">
-       <proto>
-               <return type="GLboolean"/>
-               <param name="shader" type="GLuint"/>
-       </proto>
-</template>
-
-<template name="GetShader" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="shader" type="GLuint"/>
-               <param name="pname" type="GLenum"/>
-               <vector name="params" type="GLtype *" size="dynamic"/>
-       </proto>
-</template>
-
-<template name="GetAttachedShaders" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="program" type="GLuint"/>
-               <param name="maxCount" type="GLsizei"/>
-               <param name="count" type="GLsizei *"/>
-               <param name="shaders" type="GLuint *"/>
-       </proto>
-</template>
-
-<template name="GetShaderInfoLog" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="shader" type="GLuint"/>
-               <param name="bufSize" type="GLsizei"/>
-               <param name="length" type="GLsizei *"/>
-               <param name="infoLog" type="GLchar *"/>
-       </proto>
-</template>
-
-<template name="GetProgramInfoLog" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="program" type="GLuint"/>
-               <param name="bufSize" type="GLsizei"/>
-               <param name="length" type="GLsizei *"/>
-               <param name="infoLog" type="GLchar *"/>
-       </proto>
-</template>
-
-<template name="GetShaderSource" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="shader" type="GLuint"/>
-               <param name="bufSize" type="GLsizei"/>
-               <param name="length" type="GLsizei *"/>
-               <param name="source" type="GLchar *"/>
-       </proto>
-</template>
-
-<template name="GetShaderPrecisionFormat" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="shadertype" type="GLenum"/>
-               <param name="precisiontype" type="GLenum"/>
-               <param name="range" type="GLint *"/>
-               <param name="precision" type="GLint *"/>
-       </proto>
-</template>
-
-<template name="GetUniform" direction="get">
-       <proto>
-               <return type="void"/>
-               <param name="program" type="GLuint"/>
-               <param name="location" type="GLint"/>
-               <vector name="params" type="GLtype *" size="dynamic"/>
-       </proto>
-</template>
-
-<template name="QueryMatrix" direction="get">
-       <proto>
-               <return type="GLbitfield"/>
-               <vector name="mantissa" type="GLtype *" size="16"/>
-               <vector name="exponent" type="GLint *" size="16"/>
-       </proto>
-</template>
-
-<template name="DrawTex">
-       <proto>
-               <return type="void"/>
-               <vector name="coords" type="const GLtype *" size="5">
-                       <param name="x" type="GLtype"/>
-                       <param name="y" type="GLtype"/>
-                       <param name="z" type="GLtype"/>
-                       <param name="w" type="GLtype"/>
-                       <param name="h" type="GLtype"/>
-               </vector>
-       </proto>
-</template>
-
-<template name="MultiDrawArrays">
-       <proto>
-               <return type="void"/>
-               <param name="mode" type="GLenum"/>
-               <param name="first" type="const GLint *"/>
-               <param name="count" type="const GLsizei *"/>
-               <param name="primcount" type="GLsizei"/>
-       </proto>
-</template>
-
-<template name="MultiDrawElements">
-       <proto>
-               <return type="void"/>
-               <param name="mode" type="GLenum"/>
-               <param name="count" type="const GLsizei *"/>
-               <param name="type" type="GLenum"/>
-               <param name="indices" type="const GLvoid **"/>
-               <param name="primcount" type="GLsizei"/>
-       </proto>
-</template>
-
-<template name="EGLImageTargetTexture2D">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="image" type="GLeglImageOES"/>
-       </proto>
-</template>
-
-<template name="EGLImageTargetRenderbufferStorage">
-       <proto>
-               <return type="void"/>
-               <param name="target" type="GLenum"/>
-               <param name="image" type="GLeglImageOES"/>
-       </proto>
-</template>
-
-<template name="DrawBuffers">
-       <proto>
-               <return type="void"/>
-               <param name="n" type="GLsizei"/>
-               <param name="bufs" type="const GLenum *"/>
-       </proto>
-</template>
-
-<template name="ReadBuffer">
-       <proto>
-               <return type="void"/>
-               <param name="mode" type="GLenum"/>
-       </proto>
-</template>
-
-<api name="mesa" implementation="true">
-       <category name="MESA"/>
-
-       <function name="Color4f"  default_prefix="_es_" template="Color" gltype="GLfloat" vector_size="4" expand_vector="true"/>
-       <function name="ClipPlane" template="ClipPlane" gltype="GLdouble"/>
-       <function name="CullFace" template="CullFace"/>
-
-       <function name="Fogf" template="Fog" gltype="GLfloat" expand_vector="true"/>
-       <function name="Fogfv" template="Fog" gltype="GLfloat"/>
-
-       <function name="FrontFace" template="FrontFace"/>
-       <function name="Hint" template="Hint"/>
-
-       <function name="Lightf" template="Light" gltype="GLfloat" expand_vector="true"/>
-       <function name="Lightfv" template="Light" gltype="GLfloat"/>
-
-       <function name="LightModelf" template="LightModel" gltype="GLfloat" expand_vector="true"/>
-       <function name="LightModelfv" template="LightModel" gltype="GLfloat"/>
-
-       <function name="LineWidth" template="LineWidth" gltype="GLfloat"/>
-
-       <function name="Materialf" default_prefix="_es_" template="Material" gltype="GLfloat" expand_vector="true"/>
-       <function name="Materialfv" default_prefix="_es_" template="Material" gltype="GLfloat"/>
-
-       <function name="PointSize" template="PointSize" gltype="GLfloat"/>
-       <function name="PointSizePointer" template="PointSizePointer"/>
-
-       <function name="Scissor" template="Scissor"/>
-       <function name="ShadeModel" template="ShadeModel"/>
-
-       <function name="TexParameterf" template="TexParameter" gltype="GLfloat" expand_vector="true"/>
-       <function name="TexParameterfv" template="TexParameter" gltype="GLfloat"/>
-       <function name="TexParameteri" template="TexParameter" gltype="GLint" expand_vector="true"/>
-       <function name="TexParameteriv" template="TexParameter" gltype="GLint"/>
-
-       <function name="TexImage2D" template="TexImage2D"/>
-
-       <function name="TexEnvf" template="TexEnv" gltype="GLfloat" expand_vector="true"/>
-       <function name="TexEnvi" template="TexEnv" gltype="GLint" expand_vector="true"/>
-       <function name="TexEnvfv" template="TexEnv" gltype="GLfloat"/>
-       <function name="TexEnviv" template="TexEnv" gltype="GLint"/>
-
-       <function name="TexGenf" template="TexGen" gltype="GLfloat" expand_vector="true"/>
-       <function name="TexGenfv" template="TexGen" gltype="GLfloat"/>
-
-       <function name="Clear" template="Clear"/>
-       <function name="ClearColor" template="ClearColor" gltype="GLclampf"/>
-       <function name="ClearStencil" template="ClearStencil"/>
-       <function name="ClearDepth" template="ClearDepth" gltype="GLclampd"/>
-       <function name="ClearDepthf" template="ClearDepth" gltype="GLclampf"/>
-
-       <function name="StencilMask" template="StencilMask"/>
-       <function name="StencilMaskSeparate" template="StencilMaskSeparate"/>
-       <function name="ColorMask" template="ColorMask"/>
-       <function name="DepthMask" template="DepthMask"/>
-       <function name="Disable" template="Disable"/>
-       <function name="Enable" template="Enable"/>
-       <function name="Finish" template="Finish"/>
-       <function name="Flush" template="Flush"/>
-
-       <function name="AlphaFunc" template="AlphaFunc" gltype="GLclampf"/>
-
-       <function name="BlendFunc" template="BlendFunc"/>
-       <function name="LogicOp" template="LogicOp"/>
-       <function name="StencilFunc" template="StencilFunc"/>
-       <function name="StencilFuncSeparate" template="StencilFuncSeparate"/>
-       <function name="StencilOp" template="StencilOp"/>
-       <function name="StencilOpSeparate" template="StencilOpSeparate"/>
-       <function name="DepthFunc" template="DepthFunc"/>
-       <function name="PixelStorei" template="PixelStore" gltype="GLint"/>
-
-       <function name="ReadPixels" template="ReadPixels"/>
-       <function name="GetBooleanv" template="GetState" gltype="GLboolean"/>
-       <function name="GetClipPlane" template="GetClipPlane" gltype="GLdouble"/>
-       <function name="GetError" template="GetError"/>
-       <function name="GetFloatv" template="GetState" gltype="GLfloat"/>
-       <function name="GetFixedv" template="GetState" gltype="GLfixed"/>
-       <function name="GetIntegerv" template="GetState" gltype="GLint"/>
-
-       <function name="GetLightfv" template="GetLight" gltype="GLfloat"/>
-       <function name="GetMaterialfv" template="GetMaterial" gltype="GLfloat"/>
-       <function name="GetMaterialiv" template="GetMaterial" gltype="GLint"/>
-
-       <function name="GetString" template="GetString"/>
-
-       <function name="GetTexEnvfv" template="GetTexEnv" gltype="GLfloat"/>
-       <function name="GetTexEnviv" template="GetTexEnv" gltype="GLint"/>
-       <function name="GetTexGenfv" template="GetTexGen" gltype="GLfloat"/>
-       <function name="GetTexParameterfv" template="GetTexParameter" gltype="GLfloat"/>
-       <function name="GetTexParameteriv" template="GetTexParameter" gltype="GLint"/>
-
-       <function name="IsEnabled" template="IsEnabled"/>
-
-       <function name="DepthRange" template="DepthRange" gltype="GLclampd"/>
-       <function name="DepthRangef" template="DepthRange" gltype="GLclampf"/>
-       <function name="Frustum" template="Frustum" gltype="GLdouble"/>
-
-       <function name="LoadIdentity" template="LoadIdentity"/>
-       <function name="LoadMatrixf" template="LoadMatrix" gltype="GLfloat"/>
-       <function name="MatrixMode" template="MatrixMode"/>
-
-       <function name="MultMatrixf" template="MultMatrix" gltype="GLfloat"/>
-       <function name="Ortho" template="Ortho" gltype="GLdouble"/>
-       <function name="PopMatrix" template="PopMatrix"/>
-       <function name="PushMatrix" template="PushMatrix"/>
-
-       <function name="Rotatef" template="Rotate" gltype="GLfloat"/>
-       <function name="Scalef" template="Scale" gltype="GLfloat"/>
-       <function name="Translatef" template="Translate" gltype="GLfloat"/>
-
-       <function name="Viewport" template="Viewport"/>
-
-       <function name="ColorPointer" template="ColorPointer"/>
-       <function name="DisableClientState" template="DisableClientState"/>
-       <function name="DrawArrays" template="DrawArrays"/>
-       <function name="DrawElements" template="DrawElements"/>
-       <function name="EnableClientState" template="EnableClientState"/>
-
-       <function name="GetPointerv" template="GetPointer"/>
-       <function name="Normal3f" default_prefix="_es_" template="Normal" gltype="GLfloat" expand_vector="true"/>
-       <function name="NormalPointer" template="NormalPointer"/>
-       <function name="TexCoordPointer" template="TexCoordPointer"/>
-       <function name="VertexPointer" template="VertexPointer"/>
-
-       <function name="PolygonOffset" template="PolygonOffset" gltype="GLfloat"/>
-       <function name="CopyTexImage2D" template="CopyTexImage2D"/>
-       <function name="CopyTexSubImage2D" template="CopyTexSubImage2D"/>
-       <function name="TexSubImage2D" template="TexSubImage2D"/>
-
-       <function name="BindTexture" template="BindTexture"/>
-       <function name="DeleteTextures" template="DeleteTextures"/>
-       <function name="GenTextures" template="GenTextures"/>
-       <function name="IsTexture" template="IsTexture"/>
-
-       <function name="BlendColor" template="BlendColor" gltype="GLclampf"/>
-       <function name="BlendEquation" template="BlendEquation"/>
-       <function name="BlendEquationSeparateEXT" template="BlendEquationSeparate"/>
-
-       <function name="TexImage3D" template="TexImage3D"/>
-       <function name="TexSubImage3D" template="TexSubImage3D"/>
-       <function name="CopyTexSubImage3D" template="CopyTexSubImage3D"/>
-
-       <function name="CompressedTexImage3DARB" template="CompressedTexImage3D"/>
-       <function name="CompressedTexSubImage3DARB" template="CompressedTexSubImage3D"/>
-
-       <function name="ActiveTextureARB" template="ActiveTexture"/>
-       <function name="ClientActiveTextureARB" template="ClientActiveTexture"/>
-
-       <function name="MultiTexCoord4f" default_prefix="_es_" template="MultiTexCoord" gltype="GLfloat" vector_size="4" expand_vector="true"/>
-
-       <function name="SampleCoverageARB" template="SampleCoverage" gltype="GLclampf"/>
-
-       <function name="CompressedTexImage2DARB" template="CompressedTexImage2D"/>
-       <function name="CompressedTexSubImage2DARB" template="CompressedTexSubImage2D"/>
-
-       <function name="BlendFuncSeparateEXT" template="BlendFuncSeparate"/>
-
-       <function name="PointParameterf" template="PointParameter" gltype="GLfloat" expand_vector="true"/>
-       <function name="PointParameterfv" template="PointParameter" gltype="GLfloat"/>
-
-       <function name="VertexAttrib1f" default_prefix="_es_" template="VertexAttrib" gltype="GLfloat" vector_size="1" expand_vector="true"/>
-       <function name="VertexAttrib2f" default_prefix="_es_" template="VertexAttrib" gltype="GLfloat" vector_size="2" expand_vector="true"/>
-       <function name="VertexAttrib3f" default_prefix="_es_" template="VertexAttrib" gltype="GLfloat" vector_size="3" expand_vector="true"/>
-       <function name="VertexAttrib4f" default_prefix="_es_" template="VertexAttrib" gltype="GLfloat" vector_size="4" expand_vector="true"/>
-       <function name="VertexAttrib1fv" default_prefix="_es_" template="VertexAttrib" gltype="GLfloat" vector_size="1"/>
-       <function name="VertexAttrib2fv" default_prefix="_es_" template="VertexAttrib" gltype="GLfloat" vector_size="2"/>
-       <function name="VertexAttrib3fv" default_prefix="_es_" template="VertexAttrib" gltype="GLfloat" vector_size="3"/>
-       <function name="VertexAttrib4fv" default_prefix="_es_" template="VertexAttrib" gltype="GLfloat" vector_size="4"/>
-
-       <function name="VertexAttribPointerARB" template="VertexAttribPointer"/>
-       <function name="EnableVertexAttribArrayARB" template="EnableVertexAttribArray"/>
-       <function name="DisableVertexAttribArrayARB" template="DisableVertexAttribArray"/>
-
-       <function name="IsProgram" template="IsProgram"/>
-       <function name="GetProgramiv" template="GetProgram" gltype="GLint"/>
-
-       <function name="GetVertexAttribfvARB" template="GetVertexAttrib" gltype="GLfloat"/>
-       <function name="GetVertexAttribivARB" template="GetVertexAttrib" gltype="GLint"/>
-       <function name="GetVertexAttribPointervARB" template="GetVertexAttribPointer"/>
-
-       <function name="GetBufferPointervARB" template="GetBufferPointer"/>
-       <function name="MapBufferARB" template="MapBuffer"/>
-       <function name="UnmapBufferARB" template="UnmapBuffer"/>
-       <function name="BindBufferARB" template="BindBuffer"/>
-       <function name="BufferDataARB" template="BufferData"/>
-       <function name="BufferSubDataARB" template="BufferSubData"/>
-       <function name="DeleteBuffersARB" template="DeleteBuffers"/>
-       <function name="GenBuffersARB" template="GenBuffers"/>
-       <function name="GetBufferParameterivARB" template="GetBufferParameter" gltype="GLint"/>
-       <function name="IsBufferARB" template="IsBuffer"/>
-
-       <function name="CreateShader" template="CreateShader"/>
-       <function name="ShaderSourceARB" template="ShaderSource"/>
-       <function name="CompileShaderARB" template="CompileShader"/>
-       <function name="ReleaseShaderCompiler" template="ReleaseShaderCompiler"/>
-       <function name="DeleteShader" template="DeleteShader"/>
-       <function name="ShaderBinary" template="ShaderBinary"/>
-       <function name="CreateProgram" template="CreateProgram"/>
-       <function name="AttachShader" template="AttachShader"/>
-       <function name="DetachShader" template="DetachShader"/>
-       <function name="LinkProgramARB" template="LinkProgram"/>
-       <function name="UseProgramObjectARB" template="UseProgram"/>
-       <function name="DeleteProgram" template="DeleteProgram"/>
-
-       <function name="GetActiveAttribARB" template="GetActiveAttrib"/>
-       <function name="GetAttribLocationARB" template="GetAttribLocation"/>
-       <function name="BindAttribLocationARB" template="BindAttribLocation"/>
-       <function name="GetUniformLocationARB" template="GetUniformLocation"/>
-       <function name="GetActiveUniformARB" template="GetActiveUniform"/>
-
-       <function name="Uniform1fARB" template="Uniform" gltype="GLfloat" vector_size="1" expand_vector="true"/>
-       <function name="Uniform2fARB" template="Uniform" gltype="GLfloat" vector_size="2" expand_vector="true"/>
-       <function name="Uniform3fARB" template="Uniform" gltype="GLfloat" vector_size="3" expand_vector="true"/>
-       <function name="Uniform4fARB" template="Uniform" gltype="GLfloat" vector_size="4" expand_vector="true"/>
-       <function name="Uniform1iARB" template="Uniform" gltype="GLint" vector_size="1" expand_vector="true"/>
-       <function name="Uniform2iARB" template="Uniform" gltype="GLint" vector_size="2" expand_vector="true"/>
-       <function name="Uniform3iARB" template="Uniform" gltype="GLint" vector_size="3" expand_vector="true"/>
-       <function name="Uniform4iARB" template="Uniform" gltype="GLint" vector_size="4" expand_vector="true"/>
-       <function name="Uniform1fvARB" template="Uniform" gltype="GLfloat" vector_size="1"/>
-       <function name="Uniform2fvARB" template="Uniform" gltype="GLfloat" vector_size="2"/>
-       <function name="Uniform3fvARB" template="Uniform" gltype="GLfloat" vector_size="3"/>
-       <function name="Uniform4fvARB" template="Uniform" gltype="GLfloat" vector_size="4"/>
-       <function name="Uniform1ivARB" template="Uniform" gltype="GLint" vector_size="1"/>
-       <function name="Uniform2ivARB" template="Uniform" gltype="GLint" vector_size="2"/>
-       <function name="Uniform3ivARB" template="Uniform" gltype="GLint" vector_size="3"/>
-       <function name="Uniform4ivARB" template="Uniform" gltype="GLint" vector_size="4"/>
-
-       <function name="UniformMatrix2fvARB" template="UniformMatrix" gltype="GLfloat" vector_size="2"/>
-       <function name="UniformMatrix3fvARB" template="UniformMatrix" gltype="GLfloat" vector_size="3"/>
-       <function name="UniformMatrix4fvARB" template="UniformMatrix" gltype="GLfloat" vector_size="4"/>
-
-       <function name="ValidateProgramARB" template="ValidateProgram"/>
-
-       <function name="GenerateMipmapEXT" template="GenerateMipmap"/>
-       <function name="BindFramebufferEXT" template="BindFramebuffer"/>
-       <function name="DeleteFramebuffersEXT" template="DeleteFramebuffers"/>
-       <function name="GenFramebuffersEXT" template="GenFramebuffers"/>
-       <function name="BindRenderbufferEXT" template="BindRenderbuffer"/>
-       <function name="DeleteRenderbuffersEXT" template="DeleteRenderbuffers"/>
-       <function name="GenRenderbuffersEXT" template="GenRenderbuffers"/>
-       <function name="RenderbufferStorageEXT" template="RenderbufferStorage"/>
-       <function name="FramebufferRenderbufferEXT" template="FramebufferRenderbuffer"/>
-       <function name="FramebufferTexture2DEXT" template="FramebufferTexture2D"/>
-       <function name="FramebufferTexture3DEXT" template="FramebufferTexture3D"/>
-       <function name="CheckFramebufferStatusEXT" template="CheckFramebufferStatus"/>
-       <function name="GetFramebufferAttachmentParameterivEXT" template="GetFramebufferAttachmentParameter" gltype="GLint"/>
-       <function name="GetRenderbufferParameterivEXT" template="GetRenderbufferParameter" gltype="GLint"/>
-       <function name="IsRenderbufferEXT" template="IsRenderbuffer"/>
-       <function name="IsFramebufferEXT" template="IsFramebuffer"/>
-
-       <function name="IsShader" template="IsShader"/>
-       <function name="GetShaderiv" template="GetShader" gltype="GLint"/>
-       <function name="GetAttachedShaders" template="GetAttachedShaders"/>
-       <function name="GetShaderInfoLog" template="GetShaderInfoLog"/>
-       <function name="GetProgramInfoLog" template="GetProgramInfoLog"/>
-       <function name="GetShaderSourceARB" template="GetShaderSource"/>
-       <function name="GetShaderPrecisionFormat" template="GetShaderPrecisionFormat"/>
-       <function name="GetUniformfvARB" template="GetUniform" gltype="GLfloat"/>
-       <function name="GetUniformivARB" template="GetUniform" gltype="GLint"/>
-
-       <function name="DrawTexf" template="DrawTex" gltype="GLfloat" expand_vector="true"/>
-       <function name="DrawTexfv" template="DrawTex" gltype="GLfloat"/>
-       <function name="DrawTexi" template="DrawTex" gltype="GLint" expand_vector="true"/>
-       <function name="DrawTexiv" template="DrawTex" gltype="GLint"/>
-       <function name="DrawTexs" template="DrawTex" gltype="GLshort" expand_vector="true"/>
-       <function name="DrawTexsv" template="DrawTex" gltype="GLshort"/>
-
-        <!-- EXT_multi_draw_arrays -->
-        <function name="MultiDrawArraysEXT" template="MultiDrawArrays"/>
-        <function name="MultiDrawElementsEXT" template="MultiDrawElements"/>
-
-        <!-- OES_EGL_image -->
-        <function name="EGLImageTargetTexture2DOES" template="EGLImageTargetTexture2D"/>
-        <function name="EGLImageTargetRenderbufferStorageOES" template="EGLImageTargetRenderbufferStorage"/>
-
-       <function name="DrawBuffersARB" template="DrawBuffers"/>
-
-       <function name="ReadBuffer" template="ReadBuffer"/>
-
-</api>
-
-<api name="GLES1.1">
-       <category name="GLES1.1"/>
-
-       <category name="OES_byte_coordinates"/>
-       <category name="OES_fixed_point"/>
-       <category name="OES_single_precision"/>
-       <category name="OES_matrix_get"/>
-       <category name="OES_read_format"/>
-       <category name="OES_compressed_paletted_texture"/>
-       <category name="OES_compressed_ETC1_RGB8_texture"/>
-       <category name="OES_point_size_array"/>
-       <category name="OES_point_sprite"/>
-       <category name="OES_query_matrix"/>
-       <category name="OES_draw_texture"/>
-       <category name="OES_blend_equation_separate"/>
-       <category name="OES_blend_func_separate"/>
-       <category name="OES_blend_subtract"/>
-       <category name="OES_stencil_wrap"/>
-       <category name="OES_texture_cube_map"/>
-       <category name="OES_texture_env_crossbar"/>
-       <category name="OES_texture_mirrored_repeat"/>
-       <category name="OES_framebuffer_object"/>
-       <category name="OES_depth24"/>
-       <category name="OES_depth32"/>
-       <category name="OES_fbo_render_mipmap"/>
-       <category name="OES_rgb8_rgba8"/>
-       <category name="OES_stencil1"/>
-       <category name="OES_stencil4"/>
-       <category name="OES_stencil8"/>
-       <category name="OES_element_index_uint"/>
-       <category name="OES_mapbuffer"/>
-       <category name="EXT_texture_filter_anisotropic"/>
-       <category name="EXT_texture_format_BGRA8888"/>
-       <category name="EXT_read_format_bgra"/>
-
-       <category name="ARB_texture_non_power_of_two"/>
-       <!-- disabled due to missing enums
-       <category name="EXT_texture_compression_dxt1"/>
-       -->
-       <category name="EXT_texture_lod_bias"/>
-       <category name="EXT_blend_minmax"/>
-       <category name="EXT_multi_draw_arrays"/>
-       <category name="OES_EGL_image"/>
-       <category name="OES_EGL_image_external"/>
-
-       <category name="OES_matrix_palette"/>
-
-       <function name="Color4f" external="true" template="Color" gltype="GLfloat" vector_size="4" expand_vector="true"/>
-       <function name="Color4ub" template="Color" gltype="GLubyte" vector_size="4" expand_vector="true"/>
-       <function name="Color4x" template="Color" gltype="GLfixed" vector_size="4" expand_vector="true"/>
-
-       <function name="ClipPlanef" template="ClipPlane" gltype="GLfloat"/>
-       <function name="ClipPlanex" template="ClipPlane" gltype="GLfixed"/>
-
-       <function name="CullFace" template="CullFace"/>
-
-       <function name="Fogf" template="Fog" gltype="GLfloat" expand_vector="true"/>
-       <function name="Fogx" template="Fog" gltype="GLfixed" expand_vector="true"/>
-       <function name="Fogfv" template="Fog" gltype="GLfloat"/>
-       <function name="Fogxv" template="Fog" gltype="GLfixed"/>
-
-       <function name="FrontFace" template="FrontFace"/>
-       <function name="Hint" template="Hint"/>
-
-       <function name="Lightf" template="Light" gltype="GLfloat" expand_vector="true"/>
-       <function name="Lightx" template="Light" gltype="GLfixed" expand_vector="true"/>
-       <function name="Lightfv" template="Light" gltype="GLfloat"/>
-       <function name="Lightxv" template="Light" gltype="GLfixed"/>
-
-       <function name="LightModelf" template="LightModel" gltype="GLfloat" expand_vector="true"/>
-       <function name="LightModelx" template="LightModel" gltype="GLfixed" expand_vector="true"/>
-       <function name="LightModelfv" template="LightModel" gltype="GLfloat"/>
-       <function name="LightModelxv" template="LightModel" gltype="GLfixed"/>
-
-       <function name="LineWidth" template="LineWidth" gltype="GLfloat"/>
-       <function name="LineWidthx" template="LineWidth" gltype="GLfixed"/>
-
-       <function name="Materialf" external="true" template="Material" gltype="GLfloat" expand_vector="true"/>
-       <function name="Materialfv" external="true" template="Material" gltype="GLfloat"/>
-       <function name="Materialx" template="Material" gltype="GLfixed" expand_vector="true"/>
-       <function name="Materialxv" template="Material" gltype="GLfixed"/>
-
-       <function name="PointSize" template="PointSize" gltype="GLfloat"/>
-       <function name="PointSizex" template="PointSize" gltype="GLfixed"/>
-       <function name="PointSizePointerOES" template="PointSizePointer"/>
-
-       <function name="Scissor" template="Scissor"/>
-       <function name="ShadeModel" template="ShadeModel"/>
-
-       <function name="TexParameterf" template="TexParameter" gltype="GLfloat" expand_vector="true"/>
-       <function name="TexParameterfv" template="TexParameter" gltype="GLfloat"/>
-       <function name="TexParameteri" template="TexParameter" gltype="GLint" expand_vector="true"/>
-       <function name="TexParameteriv" template="TexParameter" gltype="GLint"/>
-       <function name="TexParameterx" template="TexParameter" gltype="GLfixed" expand_vector="true"/>
-       <function name="TexParameterxv" template="TexParameter" gltype="GLfixed"/>
-
-       <function name="TexImage2D" template="TexImage2D"/>
-
-       <function name="TexEnvf" template="TexEnv" gltype="GLfloat" expand_vector="true"/>
-       <function name="TexEnvfv" template="TexEnv" gltype="GLfloat"/>
-       <function name="TexEnvi" template="TexEnv" gltype="GLint" expand_vector="true"/>
-       <function name="TexEnviv" template="TexEnv" gltype="GLint"/>
-       <function name="TexEnvx" template="TexEnv" gltype="GLfixed" expand_vector="true"/>
-       <function name="TexEnvxv" template="TexEnv" gltype="GLfixed"/>
-
-       <function name="TexGenfOES" external="true" template="TexGen" gltype="GLfloat" expand_vector="true"/>
-       <function name="TexGenfvOES" external="true" template="TexGen" gltype="GLfloat"/>
-       <function name="TexGeniOES" external="true" template="TexGen" gltype="GLint" expand_vector="true"/>
-       <function name="TexGenivOES" external="true" template="TexGen" gltype="GLint"/>
-       <function name="TexGenxOES" external="true" template="TexGen" gltype="GLfixed" expand_vector="true"/>
-       <function name="TexGenxvOES" external="true" template="TexGen" gltype="GLfixed"/>
-
-       <function name="Clear" template="Clear"/>
-       <function name="ClearColor" template="ClearColor" gltype="GLclampf"/>
-       <function name="ClearColorx" template="ClearColor" gltype="GLclampx"/>
-
-       <function name="ClearStencil" template="ClearStencil"/>
-       <function name="ClearDepthf" template="ClearDepth" gltype="GLclampf"/>
-       <function name="ClearDepthx" template="ClearDepth" gltype="GLclampx"/>
-
-       <function name="StencilMask" template="StencilMask"/>
-       <function name="ColorMask" template="ColorMask"/>
-       <function name="DepthMask" template="DepthMask"/>
-
-       <function name="Disable" template="Disable"/>
-       <function name="Enable" template="Enable"/>
-       <function name="Finish" template="Finish"/>
-       <function name="Flush" template="Flush"/>
-
-       <function name="AlphaFunc" template="AlphaFunc" gltype="GLclampf"/>
-       <function name="AlphaFuncx" template="AlphaFunc" gltype="GLclampx"/>
-
-       <function name="BlendFunc" template="BlendFunc"/>
-       <function name="LogicOp" template="LogicOp"/>
-       <function name="StencilFunc" template="StencilFunc"/>
-
-       <function name="StencilOp" template="StencilOp"/>
-       <function name="DepthFunc" template="DepthFunc"/>
-
-       <function name="PixelStorei" template="PixelStore" gltype="GLint"/>
-       <function name="ReadPixels" template="ReadPixels"/>
-
-       <function name="GetBooleanv" template="GetState" gltype="GLboolean"/>
-
-       <function name="GetClipPlanef" template="GetClipPlane" gltype="GLfloat"/>
-       <function name="GetClipPlanex" template="GetClipPlane" gltype="GLfixed"/>
-
-       <function name="GetError" template="GetError"/>
-       <function name="GetFloatv" template="GetState" gltype="GLfloat"/>
-       <function name="GetFixedv" template="GetState" gltype="GLfixed"/>
-       <function name="GetIntegerv" template="GetState" gltype="GLint"/>
-
-       <function name="GetLightfv" template="GetLight" gltype="GLfloat"/>
-       <function name="GetLightxv" template="GetLight" gltype="GLfixed"/>
-
-       <function name="GetMaterialfv" template="GetMaterial" gltype="GLfloat"/>
-       <function name="GetMaterialxv" template="GetMaterial" gltype="GLfixed"/>
-
-       <function name="GetString" template="GetString"/>
-
-       <function name="GetTexEnvfv" template="GetTexEnv" gltype="GLfloat"/>
-       <function name="GetTexEnviv" template="GetTexEnv" gltype="GLint"/>
-       <function name="GetTexEnvxv" template="GetTexEnv" gltype="GLfixed"/>
-
-       <function name="GetTexGenfvOES" external="true" template="GetTexGen" gltype="GLfloat"/>
-       <function name="GetTexGenivOES" external="true" template="GetTexGen" gltype="GLint"/>
-       <function name="GetTexGenxvOES" external="true" template="GetTexGen" gltype="GLfixed"/>
-
-       <function name="GetTexParameterfv" template="GetTexParameter" gltype="GLfloat"/>
-       <function name="GetTexParameteriv" template="GetTexParameter" gltype="GLint"/>
-       <function name="GetTexParameterxv" template="GetTexParameter" gltype="GLfixed"/>
-
-       <function name="IsEnabled" template="IsEnabled"/>
-
-       <function name="DepthRangef" template="DepthRange" gltype="GLclampf"/>
-       <function name="DepthRangex" template="DepthRange" gltype="GLclampx"/>
-
-       <function name="Frustumf" template="Frustum" gltype="GLfloat"/>
-       <function name="Frustumx" template="Frustum" gltype="GLfixed"/>
-
-       <function name="LoadIdentity" template="LoadIdentity"/>
-       <function name="LoadMatrixf" template="LoadMatrix" gltype="GLfloat"/>
-       <function name="LoadMatrixx" template="LoadMatrix" gltype="GLfixed"/>
-       <function name="MatrixMode" template="MatrixMode"/>
-
-       <function name="MultMatrixf" template="MultMatrix" gltype="GLfloat"/>
-       <function name="MultMatrixx" template="MultMatrix" gltype="GLfixed"/>
-       <function name="Orthof" template="Ortho" gltype="GLfloat"/>
-       <function name="Orthox" template="Ortho" gltype="GLfixed"/>
-
-       <function name="PopMatrix" template="PopMatrix"/>
-       <function name="PushMatrix" template="PushMatrix"/>
-
-       <function name="Rotatef" template="Rotate" gltype="GLfloat"/>
-       <function name="Rotatex" template="Rotate" gltype="GLfixed"/>
-       <function name="Scalef" template="Scale" gltype="GLfloat"/>
-       <function name="Scalex" template="Scale" gltype="GLfixed"/>
-       <function name="Translatef" template="Translate" gltype="GLfloat"/>
-       <function name="Translatex" template="Translate" gltype="GLfixed"/>
-
-       <function name="Viewport" template="Viewport"/>
-       <function name="ColorPointer" template="ColorPointer"/>
-       <function name="DisableClientState" template="DisableClientState"/>
-       <function name="DrawArrays" template="DrawArrays"/>
-       <function name="DrawElements" template="DrawElements"/>
-       <function name="EnableClientState" template="EnableClientState"/>
-
-       <function name="GetPointerv" template="GetPointer"/>
-
-       <function name="Normal3f" external="true" template="Normal" gltype="GLfloat" expand_vector="true"/>
-       <function name="Normal3x" template="Normal" gltype="GLfixed" expand_vector="true"/>
-       <function name="NormalPointer" template="NormalPointer"/>
-       <function name="TexCoordPointer" template="TexCoordPointer"/>
-       <function name="VertexPointer" template="VertexPointer"/>
-
-       <function name="PolygonOffset" template="PolygonOffset" gltype="GLfloat"/>
-       <function name="PolygonOffsetx" template="PolygonOffset" gltype="GLfixed"/>
-
-       <function name="CopyTexImage2D" template="CopyTexImage2D"/>
-       <function name="CopyTexSubImage2D" template="CopyTexSubImage2D"/>
-
-       <function name="TexSubImage2D" template="TexSubImage2D"/>
-
-       <function name="BindTexture" template="BindTexture"/>
-       <function name="DeleteTextures" template="DeleteTextures"/>
-       <function name="GenTextures" template="GenTextures"/>
-       <function name="IsTexture" template="IsTexture"/>
-
-       <function name="BlendEquationOES" template="BlendEquation"/>
-       <function name="BlendEquationSeparateOES" template="BlendEquationSeparate"/>
-
-       <function name="MultiTexCoord4x" template="MultiTexCoord" gltype="GLfixed" vector_size="4" expand_vector="true"/>
-
-       <function name="ActiveTexture" template="ActiveTexture"/>
-       <function name="ClientActiveTexture" template="ClientActiveTexture"/>
-
-       <function name="MultiTexCoord4f" external="true" template="MultiTexCoord" gltype="GLfloat" vector_size="4" expand_vector="true"/>
-
-       <function name="SampleCoverage" template="SampleCoverage" gltype="GLclampf"/>
-       <function name="SampleCoveragex" template="SampleCoverage" gltype="GLclampx"/>
-
-       <!-- CompressedTexImage2D calls out to two different functions based on
-            whether the image is a paletted image or not -->
-       <function name="CompressedTexImage2D" template="CompressedTexImage2D"/>
-       <function name="CompressedTexSubImage2D" template="CompressedTexSubImage2D"/>
-
-       <function name="BlendFuncSeparateOES" template="BlendFuncSeparate"/>
-
-       <function name="PointParameterf" template="PointParameter" gltype="GLfloat" expand_vector="true"/>
-       <function name="PointParameterfv" template="PointParameter" gltype="GLfloat"/>
-       <function name="PointParameterx" template="PointParameter" gltype="GLfixed" expand_vector="true"/>
-       <function name="PointParameterxv" template="PointParameter" gltype="GLfixed"/>
-
-       <!-- OES_mapbuffer -->
-       <function name="GetBufferPointervOES" template="GetBufferPointer"/>
-       <function name="MapBufferOES" template="MapBuffer"/>
-       <function name="UnmapBufferOES" template="UnmapBuffer"/>
-
-       <function name="BindBuffer" template="BindBuffer"/>
-       <function name="BufferData" template="BufferData"/>
-       <function name="BufferSubData" template="BufferSubData"/>
-       <function name="DeleteBuffers" template="DeleteBuffers"/>
-       <function name="GenBuffers" template="GenBuffers"/>
-       <function name="GetBufferParameteriv" template="GetBufferParameter" gltype="GLint"/>
-       <function name="IsBuffer" template="IsBuffer"/>
-
-       <!-- OES_framebuffer_object -->
-       <function name="GenerateMipmapOES" template="GenerateMipmap"/>
-       <function name="BindFramebufferOES" template="BindFramebuffer"/>
-       <function name="DeleteFramebuffersOES" template="DeleteFramebuffers"/>
-       <function name="GenFramebuffersOES" template="GenFramebuffers"/>
-       <function name="BindRenderbufferOES" template="BindRenderbuffer"/>
-       <function name="DeleteRenderbuffersOES" template="DeleteRenderbuffers"/>
-       <function name="GenRenderbuffersOES" template="GenRenderbuffers"/>
-       <function name="RenderbufferStorageOES" external="true" template="RenderbufferStorage"/>
-       <function name="FramebufferRenderbufferOES" template="FramebufferRenderbuffer"/>
-       <function name="FramebufferTexture2DOES" template="FramebufferTexture2D"/>
-       <function name="CheckFramebufferStatusOES" template="CheckFramebufferStatus"/>
-       <function name="GetFramebufferAttachmentParameterivOES" template="GetFramebufferAttachmentParameter" gltype="GLint"/>
-       <function name="GetRenderbufferParameterivOES" template="GetRenderbufferParameter" gltype="GLint"/>
-       <function name="IsRenderbufferOES" template="IsRenderbuffer"/>
-       <function name="IsFramebufferOES" template="IsFramebuffer"/>
-
-       <!-- OES_query_matrix -->
-       <!-- QueryMatrixx returns values in an unusual, decomposed, fixed-value
-            form; it has its own code for this -->
-       <function name="QueryMatrixxOES" external="true" template="QueryMatrix" gltype="GLfixed"/>
-
-       <!-- OES_draw_texture -->
-       <function name="DrawTexfOES" template="DrawTex" gltype="GLfloat" expand_vector="true"/>
-       <function name="DrawTexiOES" template="DrawTex" gltype="GLint" expand_vector="true"/>
-       <function name="DrawTexsOES" template="DrawTex" gltype="GLshort" expand_vector="true"/>
-       <function name="DrawTexxOES" template="DrawTex" gltype="GLfixed" expand_vector="true"/>
-       <function name="DrawTexfvOES" template="DrawTex" gltype="GLfloat"/>
-       <function name="DrawTexivOES" template="DrawTex" gltype="GLint"/>
-       <function name="DrawTexsvOES" template="DrawTex" gltype="GLshort"/>
-       <function name="DrawTexxvOES" template="DrawTex" gltype="GLfixed"/>
-
-        <!-- EXT_multi_draw_arrays -->
-        <function name="MultiDrawArraysEXT" template="MultiDrawArrays"/>
-        <function name="MultiDrawElementsEXT" template="MultiDrawElements"/>
-
-        <!-- OES_EGL_image -->
-        <function name="EGLImageTargetTexture2DOES" template="EGLImageTargetTexture2D"/>
-        <function name="EGLImageTargetRenderbufferStorageOES" template="EGLImageTargetRenderbufferStorage"/>
-</api>
-
-<api name="GLES2.0">
-       <category name="GLES2.0"/>
-
-       <category name="OES_compressed_paletted_texture"/>
-       <category name="OES_compressed_ETC1_RGB8_texture"/>
-       <category name="OES_depth24"/>
-       <category name="OES_depth32"/>
-       <category name="OES_fbo_render_mipmap"/>
-       <category name="OES_rgb8_rgba8"/>
-       <category name="OES_stencil1"/>
-       <category name="OES_stencil4"/>
-       <category name="OES_element_index_uint"/>
-       <category name="OES_mapbuffer"/>
-       <category name="OES_texture_3D"/>
-       <category name="OES_texture_npot"/>
-       <category name="EXT_texture_filter_anisotropic"/>
-       <category name="EXT_texture_type_2_10_10_10_REV"/>
-       <category name="OES_depth_texture"/>
-       <category name="OES_packed_depth_stencil"/>
-       <category name="OES_standard_derivatives"/>
-       <category name="EXT_texture_format_BGRA8888"/>
-       <category name="EXT_texture_rg"/>
-       <category name="EXT_read_format_bgra"/>
-
-       <category name="EXT_texture_compression_dxt1"/>
-       <category name="EXT_blend_minmax"/>
-       <category name="EXT_multi_draw_arrays"/>
-       <category name="OES_EGL_image"/>
-       <category name="OES_EGL_image_external"/>
-        <category name="EXT_unpack_subimage"/>
-
-       <category name="NV_draw_buffers"/>
-       <category name="NV_read_buffer"/>
-
-       <!-- GL_ANGLE_texture_compression_dxt -->
-       <category name="ANGLE_texture_compression_dxt"/>
-
-       <function name="DrawBuffersNV" template="DrawBuffers"/>
-       <function name="ReadBufferNV" template="ReadBuffer"/> 
-
-       <function name="CullFace" template="CullFace"/>
-
-       <function name="FrontFace" template="FrontFace"/>
-       <function name="Hint" template="Hint"/>
-
-       <function name="LineWidth" template="LineWidth" gltype="GLfloat"/>
-
-       <function name="Scissor" template="Scissor"/>
-
-       <function name="TexParameterf" template="TexParameter" gltype="GLfloat" expand_vector="true"/>
-       <function name="TexParameterfv" template="TexParameter" gltype="GLfloat"/>
-       <function name="TexParameteri" template="TexParameter" gltype="GLint" expand_vector="true"/>
-       <function name="TexParameteriv" template="TexParameter" gltype="GLint"/>
-
-       <function name="TexImage2D" template="TexImage2D"/>
-
-       <function name="Clear" template="Clear"/>
-       <function name="ClearColor" template="ClearColor" gltype="GLclampf"/>
-       <function name="ClearStencil" template="ClearStencil"/>
-       <function name="ClearDepthf" template="ClearDepth" gltype="GLclampf"/>
-
-       <function name="StencilMask" template="StencilMask"/>
-       <function name="StencilMaskSeparate" template="StencilMaskSeparate"/>
-       <function name="ColorMask" template="ColorMask"/>
-       <function name="DepthMask" template="DepthMask"/>
-       <function name="Disable" template="Disable"/>
-       <function name="Enable" template="Enable"/>
-       <function name="Finish" template="Finish"/>
-       <function name="Flush" template="Flush"/>
-
-       <function name="BlendFunc" template="BlendFunc"/>
-
-       <function name="StencilFunc" template="StencilFunc"/>
-       <function name="StencilFuncSeparate" template="StencilFuncSeparate"/>
-       <function name="StencilOp" template="StencilOp"/>
-       <function name="StencilOpSeparate" template="StencilOpSeparate"/>
-
-       <function name="DepthFunc" template="DepthFunc"/>
-
-       <function name="PixelStorei" template="PixelStore" gltype="GLint"/>
-       <function name="ReadPixels" template="ReadPixels"/>
-
-       <function name="GetBooleanv" template="GetState" gltype="GLboolean"/>
-       <function name="GetError" template="GetError"/>
-       <function name="GetFloatv" template="GetState" gltype="GLfloat"/>
-       <function name="GetIntegerv" template="GetState" gltype="GLint"/>
-
-       <function name="GetString" template="GetString"/>
-
-       <function name="GetTexParameterfv" template="GetTexParameter" gltype="GLfloat"/>
-       <function name="GetTexParameteriv" template="GetTexParameter" gltype="GLint"/>
-
-       <function name="IsEnabled" template="IsEnabled"/>
-
-       <function name="DepthRangef" template="DepthRange" gltype="GLclampf"/>
-
-       <function name="Viewport" template="Viewport"/>
-
-       <function name="DrawArrays" template="DrawArrays"/>
-       <function name="DrawElements" template="DrawElements"/>
-
-       <function name="PolygonOffset" template="PolygonOffset" gltype="GLfloat"/>
-       <function name="CopyTexImage2D" template="CopyTexImage2D"/>
-       <function name="CopyTexSubImage2D" template="CopyTexSubImage2D"/>
-       <function name="TexSubImage2D" template="TexSubImage2D"/>
-
-       <function name="BindTexture" template="BindTexture"/>
-       <function name="DeleteTextures" template="DeleteTextures"/>
-       <function name="GenTextures" template="GenTextures"/>
-       <function name="IsTexture" template="IsTexture"/>
-
-       <function name="BlendColor" template="BlendColor" gltype="GLclampf"/>
-       <function name="BlendEquation" template="BlendEquation"/>
-       <function name="BlendEquationSeparate" template="BlendEquationSeparate"/>
-
-       <function name="TexImage3DOES" template="TexImage3D"/>
-       <function name="TexSubImage3DOES" template="TexSubImage3D"/>
-       <function name="CopyTexSubImage3DOES" template="CopyTexSubImage3D"/>
-
-       <function name="CompressedTexImage3DOES" template="CompressedTexImage3D"/>
-       <function name="CompressedTexSubImage3DOES" template="CompressedTexSubImage3D"/>
-
-       <function name="ActiveTexture" template="ActiveTexture"/>
-
-       <function name="SampleCoverage" template="SampleCoverage" gltype="GLclampf"/>
-
-       <function name="CompressedTexImage2D" template="CompressedTexImage2D"/>
-       <function name="CompressedTexSubImage2D" template="CompressedTexSubImage2D"/>
-
-       <function name="BlendFuncSeparate" template="BlendFuncSeparate"/>
-
-       <function name="VertexAttrib1f" external="true" template="VertexAttrib" gltype="GLfloat" vector_size="1" expand_vector="true"/>
-       <function name="VertexAttrib2f" external="true" template="VertexAttrib" gltype="GLfloat" vector_size="2" expand_vector="true"/>
-       <function name="VertexAttrib3f" external="true" template="VertexAttrib" gltype="GLfloat" vector_size="3" expand_vector="true"/>
-       <function name="VertexAttrib4f" external="true" template="VertexAttrib" gltype="GLfloat" vector_size="4" expand_vector="true"/>
-       <function name="VertexAttrib1fv" external="true" template="VertexAttrib" gltype="GLfloat" vector_size="1"/>
-       <function name="VertexAttrib2fv" external="true" template="VertexAttrib" gltype="GLfloat" vector_size="2"/>
-       <function name="VertexAttrib3fv" external="true" template="VertexAttrib" gltype="GLfloat" vector_size="3"/>
-       <function name="VertexAttrib4fv" external="true" template="VertexAttrib" gltype="GLfloat" vector_size="4"/>
-
-       <function name="VertexAttribPointer" template="VertexAttribPointer"/>
-
-       <function name="EnableVertexAttribArray" template="EnableVertexAttribArray"/>
-       <function name="DisableVertexAttribArray" template="DisableVertexAttribArray"/>
-
-       <function name="IsProgram" template="IsProgram"/>
-       <function name="GetProgramiv" template="GetProgram" gltype="GLint"/>
-
-       <function name="GetVertexAttribfv" template="GetVertexAttrib" gltype="GLfloat"/>
-       <function name="GetVertexAttribiv" template="GetVertexAttrib" gltype="GLint"/>
-       <function name="GetVertexAttribPointerv" template="GetVertexAttribPointer"/>
-
-       <function name="GetBufferPointervOES" template="GetBufferPointer"/>
-       <function name="MapBufferOES" template="MapBuffer"/>
-       <function name="UnmapBufferOES" template="UnmapBuffer"/>
-       <function name="BindBuffer" template="BindBuffer"/>
-       <function name="BufferData" template="BufferData"/>
-       <function name="BufferSubData" template="BufferSubData"/>
-       <function name="DeleteBuffers" template="DeleteBuffers"/>
-       <function name="GenBuffers" template="GenBuffers"/>
-       <function name="GetBufferParameteriv" template="GetBufferParameter" gltype="GLint"/>
-       <function name="IsBuffer" template="IsBuffer"/>
-
-       <function name="CreateShader" template="CreateShader"/>
-       <function name="ShaderSource" template="ShaderSource"/>
-       <function name="CompileShader" template="CompileShader"/>
-       <function name="ReleaseShaderCompiler" template="ReleaseShaderCompiler"/>
-       <function name="DeleteShader" template="DeleteShader"/>
-       <function name="ShaderBinary" template="ShaderBinary"/>
-       <function name="CreateProgram" template="CreateProgram"/>
-       <function name="AttachShader" template="AttachShader"/>
-       <function name="DetachShader" template="DetachShader"/>
-       <function name="LinkProgram" template="LinkProgram"/>
-       <function name="UseProgram" template="UseProgram"/>
-       <function name="DeleteProgram" template="DeleteProgram"/>
-
-       <function name="GetActiveAttrib" template="GetActiveAttrib"/>
-       <function name="GetAttribLocation" template="GetAttribLocation"/>
-       <function name="BindAttribLocation" template="BindAttribLocation"/>
-       <function name="GetUniformLocation" template="GetUniformLocation"/>
-       <function name="GetActiveUniform" template="GetActiveUniform"/>
-
-       <function name="Uniform1f" template="Uniform" gltype="GLfloat" vector_size="1" expand_vector="true"/>
-       <function name="Uniform2f" template="Uniform" gltype="GLfloat" vector_size="2" expand_vector="true"/>
-       <function name="Uniform3f" template="Uniform" gltype="GLfloat" vector_size="3" expand_vector="true"/>
-       <function name="Uniform4f" template="Uniform" gltype="GLfloat" vector_size="4" expand_vector="true"/>
-       <function name="Uniform1i" template="Uniform" gltype="GLint" vector_size="1" expand_vector="true"/>
-       <function name="Uniform2i" template="Uniform" gltype="GLint" vector_size="2" expand_vector="true"/>
-       <function name="Uniform3i" template="Uniform" gltype="GLint" vector_size="3" expand_vector="true"/>
-       <function name="Uniform4i" template="Uniform" gltype="GLint" vector_size="4" expand_vector="true"/>
-
-       <function name="Uniform1fv" template="Uniform" gltype="GLfloat" vector_size="1"/>
-       <function name="Uniform2fv" template="Uniform" gltype="GLfloat" vector_size="2"/>
-       <function name="Uniform3fv" template="Uniform" gltype="GLfloat" vector_size="3"/>
-       <function name="Uniform4fv" template="Uniform" gltype="GLfloat" vector_size="4"/>
-       <function name="Uniform1iv" template="Uniform" gltype="GLint" vector_size="1"/>
-       <function name="Uniform2iv" template="Uniform" gltype="GLint" vector_size="2"/>
-       <function name="Uniform3iv" template="Uniform" gltype="GLint" vector_size="3"/>
-       <function name="Uniform4iv" template="Uniform" gltype="GLint" vector_size="4"/>
-
-       <function name="UniformMatrix2fv" template="UniformMatrix" gltype="GLfloat" vector_size="2"/>
-       <function name="UniformMatrix3fv" template="UniformMatrix" gltype="GLfloat" vector_size="3"/>
-       <function name="UniformMatrix4fv" template="UniformMatrix" gltype="GLfloat" vector_size="4"/>
-
-       <function name="ValidateProgram" template="ValidateProgram"/>
-
-       <function name="GenerateMipmap" template="GenerateMipmap"/>
-       <function name="BindFramebuffer" template="BindFramebuffer"/>
-       <function name="DeleteFramebuffers" template="DeleteFramebuffers"/>
-       <function name="GenFramebuffers" template="GenFramebuffers"/>
-       <function name="BindRenderbuffer" template="BindRenderbuffer"/>
-       <function name="DeleteRenderbuffers" template="DeleteRenderbuffers"/>
-       <function name="GenRenderbuffers" template="GenRenderbuffers"/>
-       <function name="RenderbufferStorage" external="true" template="RenderbufferStorage"/>
-       <function name="FramebufferRenderbuffer" template="FramebufferRenderbuffer"/>
-       <function name="FramebufferTexture2D" template="FramebufferTexture2D"/>
-       <function name="FramebufferTexture3DOES" template="FramebufferTexture3D"/>
-       <function name="CheckFramebufferStatus" template="CheckFramebufferStatus"/>
-       <function name="GetFramebufferAttachmentParameteriv" template="GetFramebufferAttachmentParameter" gltype="GLint"/>
-       <function name="GetRenderbufferParameteriv" template="GetRenderbufferParameter" gltype="GLint"/>
-       <function name="IsRenderbuffer" template="IsRenderbuffer"/>
-       <function name="IsFramebuffer" template="IsFramebuffer"/>
-
-       <function name="IsShader" template="IsShader"/>
-       <function name="GetShaderiv" template="GetShader" gltype="GLint"/>
-       <function name="GetAttachedShaders" template="GetAttachedShaders"/>
-       <function name="GetShaderInfoLog" template="GetShaderInfoLog"/>
-       <function name="GetProgramInfoLog" template="GetProgramInfoLog"/>
-       <function name="GetShaderSource" template="GetShaderSource"/>
-       <function name="GetShaderPrecisionFormat" template="GetShaderPrecisionFormat"/>
-       <function name="GetUniformfv" template="GetUniform" gltype="GLfloat"/>
-       <function name="GetUniformiv" template="GetUniform" gltype="GLint"/>
-
-        <!-- EXT_multi_draw_arrays -->
-        <function name="MultiDrawArraysEXT" template="MultiDrawArrays"/>
-        <function name="MultiDrawElementsEXT" template="MultiDrawElements"/>
-
-        <!-- OES_EGL_image -->
-        <function name="EGLImageTargetTexture2DOES" template="EGLImageTargetTexture2D"/>
-        <function name="EGLImageTargetRenderbufferStorageOES" template="EGLImageTargetRenderbufferStorage"/>
-</api>
-
-</apispec>
diff --git a/src/mesa/main/APIspecutil.py b/src/mesa/main/APIspecutil.py
deleted file mode 100644 (file)
index 3c15528..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2009 Chia-I Wu <olv@0xlab.org>
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# on the rights to use, copy, modify, merge, publish, distribute, sub
-# license, and/or sell copies of the Software, and to permit persons to whom
-# the Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
-# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-"""
-Minimal apiutil.py interface for use by es_generator.py.
-"""
-
-import sys
-import libxml2
-
-import APIspec
-
-__spec = {}
-__functions = {}
-__aliases = {}
-
-def _ParseXML(filename, apiname):
-    conversions = {
-        # from           to
-        'GLfloat':  [ 'GLdouble' ],
-        'GLclampf': [ 'GLclampd' ],
-        'GLubyte':  [ 'GLfloat', 'GLdouble' ],
-        'GLint':    [ 'GLfloat', 'GLdouble' ],
-        'GLfixed':  [ 'GLfloat', 'GLdouble' ],
-        'GLclampx': [ 'GLclampf', 'GLclampd' ],
-    }
-
-    doc = libxml2.readFile(filename, None,
-            libxml2.XML_PARSE_DTDLOAD +
-            libxml2.XML_PARSE_DTDVALID +
-            libxml2.XML_PARSE_NOBLANKS)
-    spec = APIspec.Spec(doc)
-    impl = spec.get_impl()
-    api = spec.get_api(apiname)
-    doc.freeDoc()
-
-    __spec["impl"] = impl
-    __spec["api"] = api
-
-    for func in api.functions:
-        alias, need_conv = impl.match(func, conversions)
-        if not alias:
-            # external functions are manually dispatched
-            if not func.is_external:
-                print >>sys.stderr, "Error: unable to dispatch %s" % func.name
-            alias = func
-            need_conv = False
-
-        __functions[func.name] = func
-        __aliases[func.name] = (alias, need_conv)
-
-
-def AllSpecials(notused=None):
-    """Return a list of all external functions in the API."""
-    api = __spec["api"]
-
-    specials = []
-    for func in api.functions:
-        if func.is_external:
-            specials.append(func.name)
-
-    return specials
-
-
-def GetAllFunctions(filename, api):
-    """Return sorted list of all functions in the API."""
-    if not __spec:
-        _ParseXML(filename, api)
-
-    api = __spec["api"]
-    names = []
-    for func in api.functions:
-        names.append(func.name)
-    names.sort()
-    return names
-
-
-def ReturnType(funcname):
-    """Return the C return type of named function."""
-    func = __functions[funcname]
-    return func.return_type
-
-
-def Properties(funcname):
-    """Return list of properties of the named GL function."""
-    func = __functions[funcname]
-    return [func.direction]
-
-
-def _ValidValues(func, param):
-    """Return the valid values of a parameter."""
-    valid_values = []
-    switch = func.checker.switches.get(param.name, [])
-    for desc in switch:
-        # no dependent vector
-        if not desc.checker.switches:
-            for val in desc.values:
-                valid_values.append((val, None, None, [], desc.error, None))
-            continue
-
-        items = desc.checker.switches.items()
-        if len(items) > 1:
-            print >>sys.stderr, "%s: more than one parameter depend on %s" % \
-                    (func.name, desc.name)
-        dep_name, dep_switch = items[0]
-
-        for dep_desc in dep_switch:
-            if dep_desc.index >= 0 and dep_desc.index != 0:
-                print >>sys.stderr, "%s: not first element of a vector" % func.name
-            if dep_desc.checker.switches:
-                print >>sys.stderr, "%s: deep nested dependence" % func.name
-
-            convert = None if dep_desc.convert else "noconvert"
-            for val in desc.values:
-                valid_values.append((val, dep_desc.size_str, dep_desc.name,
-                                     dep_desc.values, dep_desc.error, convert))
-    return valid_values
-
-
-def _Conversion(func, src_param):
-    """Return the destination type of the conversion, or None."""
-    alias, need_conv = __aliases[func.name]
-    if need_conv:
-        dst_param = alias.get_param(src_param.name)
-        if src_param.type == dst_param.type:
-            need_conv = False
-    if not need_conv:
-        return (None, "none")
-
-    converts = { True: 0, False: 0 }
-
-    # In Fogx, for example,  pname may be GL_FOG_DENSITY/GL_FOG_START/GL_FOG_END
-    # or GL_FOG_MODE.  In the former three cases, param is not checked and the
-    # default is to convert.
-    if not func.checker.always_check(src_param.name):
-        converts[True] += 1
-
-    for desc in func.checker.flatten(src_param.name):
-        converts[desc.convert] += 1
-        if converts[True] and converts[False]:
-            break
-
-    # it should be "never", "sometimes", and "always"...
-    if converts[False]:
-        if converts[True]:
-            conversion = "some"
-        else:
-            conversion = "none"
-    else:
-        conversion = "all"
-
-    return (dst_param.base_type(), conversion)
-
-
-def _MaxVecSize(func, param):
-    """Return the largest possible size of a vector."""
-    if not param.is_vector:
-        return 0
-    if param.size:
-        return param.size
-
-    # need to look at all descriptions
-    size = 0
-    for desc in func.checker.flatten(param.name):
-        if desc.size_str and desc.size_str.isdigit():
-            s = int(desc.size_str)
-            if s > size:
-                size = s
-    if not size:
-        need_conv = __aliases[func.name][1]
-        if need_conv:
-            print >>sys.stderr, \
-                    "Error: unable to decide the max size of %s in %s" % \
-                    (param.name, func.name)
-    return size
-
-
-def _ParameterTuple(func, param):
-    """Return a parameter tuple.
-
-    [0] -- parameter name
-    [1] -- parameter type
-    [2] -- max vector size or 0
-    [3] -- dest type the parameter converts to, or None
-    [4] -- valid values
-    [5] -- how often does the conversion happen
-
-    """
-    vec_size = _MaxVecSize(func, param)
-    dst_type, conversion = _Conversion(func, param)
-    valid_values = _ValidValues(func, param)
-
-    return (param.name, param.type, vec_size, dst_type, valid_values, conversion)
-
-
-def Parameters(funcname):
-    """Return list of tuples of function parameters."""
-    func = __functions[funcname]
-    params = []
-    for param in func.params:
-        params.append(_ParameterTuple(func, param))
-
-    return params
-
-
-def FunctionPrefix(funcname):
-    """Return function specific prefix."""
-    func = __functions[funcname]
-
-    return func.prefix
-
-
-def FindParamIndex(params, paramname):
-    """Find the index of a named parameter."""
-    for i in xrange(len(params)):
-        if params[i][0] == paramname:
-            return i
-    return None
-
-
-def MakeDeclarationString(params):
-    """Return a C-style parameter declaration string."""
-    string = []
-    for p in params:
-        sep = "" if p[1].endswith("*") else " "
-        string.append("%s%s%s" % (p[1], sep, p[0]))
-    if not string:
-        return "void"
-    return ", ".join(string)
-
-
-def AliasPrefix(funcname):
-    """Return the prefix of the function the named function is an alias of."""
-    alias = __aliases[funcname][0]
-    return alias.prefix
-
-
-def Alias(funcname):
-    """Return the name of the function the named function is an alias of."""
-    alias, need_conv = __aliases[funcname]
-    return alias.name if not need_conv else None
-
-
-def ConversionFunction(funcname):
-    """Return the name of the function the named function converts to."""
-    alias, need_conv = __aliases[funcname]
-    return alias.name if need_conv else None
-
-
-def Categories(funcname):
-    """Return all the categories of the named GL function."""
-    api = __spec["api"]
-    return [api.name]
index 100e97273020c045a4adf2b2910a232649d8dc7e..7d37ff754bee24860e277c38c34219d7dda97fe7 100644 (file)
@@ -36,11 +36,5 @@ _mesa_alloc_dispatch_table(int size);
 extern struct _glapi_table *
 _mesa_create_exec_table(struct gl_context *ctx);
 
-extern struct _glapi_table *
-_mesa_create_exec_table_es1(void);
-
-extern struct _glapi_table *
-_mesa_create_exec_table_es2(void);
-
 
 #endif
diff --git a/src/mesa/main/es_generator.py b/src/mesa/main/es_generator.py
deleted file mode 100644 (file)
index b074e9d..0000000
+++ /dev/null
@@ -1,765 +0,0 @@
-#*************************************************************************
-# Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
-# All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish, distribute, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
-# TUNGSTEN GRAPHICS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
-# OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-#*************************************************************************
-
-
-import sys, os
-import APIspecutil as apiutil
-
-# These dictionary entries are used for automatic conversion.
-# The string will be used as a format string with the conversion
-# variable.
-Converters = {
-    'GLfloat': {
-        'GLdouble': "(GLdouble) (%s)",
-        'GLfixed' : "(GLint) (%s * 65536)",
-    },
-    'GLfixed': {
-        'GLfloat': "(GLfloat) (%s / 65536.0f)",
-        'GLdouble': "(GLdouble) (%s / 65536.0)",
-    },
-    'GLdouble': {
-        'GLfloat': "(GLfloat) (%s)",
-        'GLfixed': "(GLfixed) (%s * 65536)",
-    },
-    'GLclampf': {
-        'GLclampd': "(GLclampd) (%s)",
-        'GLclampx': "(GLclampx) (%s * 65536)",
-    },
-    'GLclampx': {
-        'GLclampf': "(GLclampf) (%s / 65536.0f)",
-        'GLclampd': "(GLclampd) (%s / 65536.0)",
-    },
-    'GLubyte': {
-        'GLfloat': "(GLfloat) (%s / 255.0f)",
-    },
-}
-
-def GetBaseType(type):
-    typeTokens = type.split(' ')
-    baseType = None
-    typeModifiers = []
-    for t in typeTokens:
-        if t in ['const', '*']:
-            typeModifiers.append(t)
-        else:
-            baseType = t
-    return (baseType, typeModifiers)
-
-def ConvertValue(value, fromType, toType):
-    """Returns a string that represents the given parameter string, 
-    type-converted if necessary."""
-
-    if not Converters.has_key(fromType):
-        print >> sys.stderr, "No base converter for type '%s' found.  Ignoring." % fromType
-        return value
-
-    if not Converters[fromType].has_key(toType):
-        print >> sys.stderr, "No converter found for type '%s' to type '%s'.  Ignoring." % (fromType, toType)
-        return value
-
-    # This part is simple.  Return the proper conversion.
-    conversionString = Converters[fromType][toType]
-    return conversionString % value
-
-FormatStrings = {
-    'GLenum' : '0x%x',
-    'GLfloat' : '%f',
-    'GLint' : '%d',
-    'GLbitfield' : '0x%x',
-}
-def GetFormatString(type):
-    if FormatStrings.has_key(type):
-        return FormatStrings[type]
-    else:
-        return None
-
-
-######################################################################
-# Version-specific values to be used in the main script
-# header: which header file to include
-# api: what text specifies an API-level function
-VersionSpecificValues = {
-    'GLES1.1' : {
-        'description' : 'GLES1.1 functions',
-        'header' : 'GLES/gl.h',
-        'extheader' : 'GLES/glext.h',
-        'shortname' : 'es1'
-    },
-    'GLES2.0': {
-        'description' : 'GLES2.0 functions',
-        'header' : 'GLES2/gl2.h',
-        'extheader' : 'GLES2/gl2ext.h',
-        'shortname' : 'es2'
-    }
-}
-
-
-######################################################################
-# Main code for the script begins here.
-
-# Get the name of the program (without the directory part) for use in
-# error messages.
-program = os.path.basename(sys.argv[0])
-
-# Set default values
-verbose = 0
-functionList = "APIspec.xml"
-version = "GLES1.1"
-
-# Allow for command-line switches
-import getopt, time
-options = "hvV:S:"
-try:
-    optlist, args = getopt.getopt(sys.argv[1:], options)
-except getopt.GetoptError, message:
-    sys.stderr.write("%s: %s.  Use -h for help.\n" % (program, message))
-    sys.exit(1)
-
-for option, optarg in optlist:
-    if option == "-h":
-        sys.stderr.write("Usage: %s [-%s]\n" % (program, options))
-        sys.stderr.write("Parse an API specification file and generate wrapper functions for a given GLES version\n")
-        sys.stderr.write("-h gives help\n")
-        sys.stderr.write("-v is verbose\n")
-        sys.stderr.write("-V specifies GLES version to generate [%s]:\n" % version)
-        for key in VersionSpecificValues.keys():
-            sys.stderr.write("    %s - %s\n" % (key, VersionSpecificValues[key]['description']))
-        sys.stderr.write("-S specifies API specification file to use [%s]\n" % functionList)
-        sys.exit(1)
-    elif option == "-v":
-        verbose += 1
-    elif option == "-V":
-        version = optarg
-    elif option == "-S":
-        functionList = optarg
-
-# Beyond switches, we support no further command-line arguments
-if len(args) >  0:
-    sys.stderr.write("%s: only switch arguments are supported - use -h for help\n" % program)
-    sys.exit(1)
-
-# If we don't have a valid version, abort.
-if not VersionSpecificValues.has_key(version):
-    sys.stderr.write("%s: version '%s' is not valid - use -h for help\n" % (program, version))
-    sys.exit(1)
-
-# Grab the version-specific items we need to use
-versionHeader = VersionSpecificValues[version]['header']
-versionExtHeader = VersionSpecificValues[version]['extheader']
-shortname = VersionSpecificValues[version]['shortname']
-
-# If we get to here, we're good to go.  The "version" parameter
-# directs GetDispatchedFunctions to only allow functions from
-# that "category" (version in our parlance).  This allows 
-# functions with different declarations in different categories
-# to exist (glTexImage2D, for example, is different between
-# GLES1 and GLES2).
-keys = apiutil.GetAllFunctions(functionList, version)
-
-allSpecials = apiutil.AllSpecials()
-
-print """/* DO NOT EDIT *************************************************
- * THIS FILE AUTOMATICALLY GENERATED BY THE %s SCRIPT
- * API specification file:   %s
- * GLES version:             %s
- * date:                     %s
- */
-""" % (program, functionList, version, time.strftime("%Y-%m-%d %H:%M:%S"))
-
-# The headers we choose are version-specific.
-print """
-#include "%s"
-#include "%s"
-#include "main/mfeatures.h"
-#include "main/compiler.h"
-#include "main/api_exec.h"
-
-#if FEATURE_%s
-
-#ifndef GLAPIENTRYP
-#define GLAPIENTRYP GL_APIENTRYP
-#endif
-""" % (versionHeader, versionExtHeader, shortname.upper())
-
-if version == "GLES1.1":
-    print '#include "main/es1_conversion.h"'
-    print
-
-# Everyone needs these types.
-print """
-/* These types are needed for the Mesa veneer, but are not defined in
- * the standard GLES headers.
- */
-typedef double GLdouble;
-typedef double GLclampd;
-
-/* Mesa error handling requires these */
-extern void *_mesa_get_current_context(void);
-extern void _mesa_error(void *ctx, GLenum error, const char *fmtString, ... );
-"""
-
-# Finally we get to the all-important functions
-print """/*************************************************************
- * Generated functions begin here
- */
-"""
-for funcName in keys:
-    if verbose > 0: sys.stderr.write("%s: processing function %s\n" % (program, funcName))
-
-    # start figuring out what this function will look like.
-    returnType = apiutil.ReturnType(funcName)
-    props = apiutil.Properties(funcName)
-    params = apiutil.Parameters(funcName)
-    declarationString = apiutil.MakeDeclarationString(params)
-
-    # In case of error, a function may have to return.  Make
-    # sure we have valid return values in this case.
-    if returnType == "void":
-        errorReturn = "return"
-    elif returnType == "GLboolean":
-        errorReturn = "return GL_FALSE"
-    else:
-        errorReturn = "return (%s) 0" % returnType
-
-    # These are the output of this large calculation block.
-    # passthroughDeclarationString: a typed set of parameters that
-    # will be used to create the "extern" reference for the
-    # underlying Mesa or support function.  Note that as generated
-    # these have an extra ", " at the beginning, which will be
-    # removed before use.
-    # 
-    # passthroughDeclarationString: an untyped list of parameters
-    # that will be used to call the underlying Mesa or support
-    # function (including references to converted parameters).
-    # This will also be generated with an extra ", " at the
-    # beginning, which will be removed before use.
-    #
-    # variables: C code to create any local variables determined to
-    # be necessary.
-    # conversionCodeOutgoing: C code to convert application parameters
-    # to a necessary type before calling the underlying support code.
-    # May be empty if no conversion is required.  
-    # conversionCodeIncoming: C code to do the converse: convert 
-    # values returned by underlying Mesa code to the types needed
-    # by the application.
-    # Note that *either* the conversionCodeIncoming will be used (for
-    # generated query functions), *or* the conversionCodeOutgoing will
-    # be used (for generated non-query functions), never both.
-    passthroughFuncName = ""
-    passthroughDeclarationString = ""
-    passthroughCallString = ""
-    prefixOverride = None
-    variables = []
-    conversionCodeOutgoing = []
-    conversionCodeIncoming = []
-    switchCode = []
-
-    # Calculate the name of the underlying support function to call.
-    # By default, the passthrough function is named _mesa_<funcName>.
-    # We're allowed to override the prefix and/or the function name
-    # for each function record, though.  The "ConversionFunction"
-    # utility is poorly named, BTW...
-    if funcName in allSpecials:
-        # perform checks and pass through
-        funcPrefix = "_check_"
-        aliasprefix = "_es_"
-    else:
-        funcPrefix = "_es_"
-        aliasprefix = apiutil.AliasPrefix(funcName)
-    alias = apiutil.ConversionFunction(funcName)
-    prefixOverride = apiutil.FunctionPrefix(funcName)
-    if prefixOverride != "_mesa_":
-        aliasprefix = apiutil.FunctionPrefix(funcName)
-    if not alias:
-        # There may still be a Mesa alias for the function
-        if apiutil.Alias(funcName):
-            passthroughFuncName = "%s%s" % (aliasprefix, apiutil.Alias(funcName))
-        else:
-            passthroughFuncName = "%s%s" % (aliasprefix, funcName)
-    else: # a specific alias is provided
-        passthroughFuncName = "%s%s" % (aliasprefix, alias)
-
-    # Look at every parameter: each one may have only specific
-    # allowed values, or dependent parameters to check, or 
-    # variant-sized vector arrays to calculate
-    for (paramName, paramType, paramMaxVecSize, paramConvertToType, paramValidValues, paramValueConversion) in params:
-        # We'll need this below if we're doing conversions
-        (paramBaseType, paramTypeModifiers) = GetBaseType(paramType)
-
-        # Conversion management.
-        # We'll handle three cases, easiest to hardest: a parameter
-        # that doesn't require conversion, a scalar parameter that
-        # requires conversion, and a vector parameter that requires
-        # conversion.
-        if paramConvertToType == None:
-            # Unconverted parameters are easy, whether they're vector
-            # or scalar - just add them to the call list.  No conversions
-            # or anything to worry about.
-            passthroughDeclarationString += ", %s %s" % (paramType, paramName)
-            passthroughCallString += ", %s" % paramName
-
-        elif paramMaxVecSize == 0: # a scalar parameter that needs conversion
-            # A scalar to hold a converted parameter
-            variables.append("    %s converted_%s;" % (paramConvertToType, paramName))
-
-            # Outgoing conversion depends on whether we have to conditionally
-            # perform value conversion.
-            if paramValueConversion == "none":
-                conversionCodeOutgoing.append("    converted_%s = (%s) %s;" % (paramName, paramConvertToType, paramName))
-            elif paramValueConversion == "some":
-                # We'll need a conditional variable to keep track of
-                # whether we're converting values or not.
-                if ("    int convert_%s_value = 1;" % paramName) not in variables:
-                    variables.append("    int convert_%s_value = 1;" % paramName)
-
-                # Write code based on that conditional.
-                conversionCodeOutgoing.append("    if (convert_%s_value) {" % paramName)
-                conversionCodeOutgoing.append("        converted_%s = %s;" % (paramName, ConvertValue(paramName, paramBaseType, paramConvertToType))) 
-                conversionCodeOutgoing.append("    } else {")
-                conversionCodeOutgoing.append("        converted_%s = (%s) %s;" % (paramName, paramConvertToType, paramName))
-                conversionCodeOutgoing.append("    }")
-            else: # paramValueConversion == "all"
-                conversionCodeOutgoing.append("    converted_%s = %s;" % (paramName, ConvertValue(paramName, paramBaseType, paramConvertToType)))
-
-            # Note that there can be no incoming conversion for a
-            # scalar parameter; changing the scalar will only change
-            # the local value, and won't ultimately change anything
-            # that passes back to the application.
-
-            # Call strings.  The unusual " ".join() call will join the
-            # array of parameter modifiers with spaces as separators.
-            passthroughDeclarationString += ", %s %s %s" % (paramConvertToType, " ".join(paramTypeModifiers), paramName)
-            passthroughCallString += ", converted_%s" % paramName
-
-        else: # a vector parameter that needs conversion
-            # We'll need an index variable for conversions
-            if "    register unsigned int i;" not in variables:
-                variables.append("    register unsigned int i;")
-
-            # This variable will hold the (possibly variant) size of
-            # this array needing conversion.  By default, we'll set
-            # it to the maximal size (which is correct for functions
-            # with a constant-sized vector parameter); for true
-            # variant arrays, we'll modify it with other code.
-            variables.append("    unsigned int n_%s = %d;" % (paramName, paramMaxVecSize))
-
-            # This array will hold the actual converted values.
-            variables.append("    %s converted_%s[%d];" % (paramConvertToType, paramName, paramMaxVecSize))
-
-            # Again, we choose the conversion code based on whether we
-            # have to always convert values, never convert values, or 
-            # conditionally convert values.
-            if paramValueConversion == "none":
-                conversionCodeOutgoing.append("    for (i = 0; i < n_%s; i++) {" % paramName)
-                conversionCodeOutgoing.append("        converted_%s[i] = (%s) %s[i];" % (paramName, paramConvertToType, paramName))
-                conversionCodeOutgoing.append("    }")
-            elif paramValueConversion == "some":
-                # We'll need a conditional variable to keep track of
-                # whether we're converting values or not.
-                if ("    int convert_%s_value = 1;" % paramName) not in variables:
-                    variables.append("    int convert_%s_value = 1;" % paramName)
-                # Write code based on that conditional.
-                conversionCodeOutgoing.append("    if (convert_%s_value) {" % paramName)
-                conversionCodeOutgoing.append("        for (i = 0; i < n_%s; i++) {" % paramName)
-                conversionCodeOutgoing.append("            converted_%s[i] = %s;" % (paramName, ConvertValue("%s[i]" % paramName, paramBaseType, paramConvertToType))) 
-                conversionCodeOutgoing.append("        }")
-                conversionCodeOutgoing.append("    } else {")
-                conversionCodeOutgoing.append("        for (i = 0; i < n_%s; i++) {" % paramName)
-                conversionCodeOutgoing.append("            converted_%s[i] = (%s) %s[i];" % (paramName, paramConvertToType, paramName))
-                conversionCodeOutgoing.append("        }")
-                conversionCodeOutgoing.append("    }")
-            else: # paramValueConversion == "all"
-                conversionCodeOutgoing.append("    for (i = 0; i < n_%s; i++) {" % paramName)
-                conversionCodeOutgoing.append("        converted_%s[i] = %s;" % (paramName, ConvertValue("%s[i]" % paramName, paramBaseType, paramConvertToType)))
-
-                conversionCodeOutgoing.append("    }")
-
-            # If instead we need an incoming conversion (i.e. results
-            # from Mesa have to be converted before handing back
-            # to the application), this is it.  Fortunately, we don't
-            # have to worry about conditional value conversion - the
-            # functions that do (e.g. glGetFixedv()) are handled
-            # specially, outside this code generation.
-            #
-            # Whether we use incoming conversion or outgoing conversion
-            # is determined later - we only ever use one or the other.
-
-            if paramValueConversion == "none":
-                conversionCodeIncoming.append("    for (i = 0; i < n_%s; i++) {" % paramName)
-                conversionCodeIncoming.append("        %s[i] = (%s) converted_%s[i];" % (paramName, paramConvertToType, paramName))
-                conversionCodeIncoming.append("    }")
-            elif paramValueConversion == "some":
-                # We'll need a conditional variable to keep track of
-                # whether we're converting values or not.
-                if ("    int convert_%s_value = 1;" % paramName) not in variables:
-                    variables.append("    int convert_%s_value = 1;" % paramName)
-
-                # Write code based on that conditional.
-                conversionCodeIncoming.append("    if (convert_%s_value) {" % paramName)
-                conversionCodeIncoming.append("        for (i = 0; i < n_%s; i++) {" % paramName)
-                conversionCodeIncoming.append("            %s[i] = %s;" % (paramName, ConvertValue("converted_%s[i]" % paramName, paramConvertToType, paramBaseType))) 
-                conversionCodeIncoming.append("        }")
-                conversionCodeIncoming.append("    } else {")
-                conversionCodeIncoming.append("        for (i = 0; i < n_%s; i++) {" % paramName)
-                conversionCodeIncoming.append("            %s[i] = (%s) converted_%s[i];" % (paramName, paramBaseType, paramName))
-                conversionCodeIncoming.append("        }")
-                conversionCodeIncoming.append("    }")
-            else: # paramValueConversion == "all"
-                conversionCodeIncoming.append("    for (i = 0; i < n_%s; i++) {" % paramName)
-                conversionCodeIncoming.append("        %s[i] = %s;" % (paramName, ConvertValue("converted_%s[i]" % paramName, paramConvertToType, paramBaseType)))
-                conversionCodeIncoming.append("    }")
-
-            # Call strings.  The unusual " ".join() call will join the
-            # array of parameter modifiers with spaces as separators.
-            passthroughDeclarationString += ", %s %s %s" % (paramConvertToType, " ".join(paramTypeModifiers), paramName)
-            passthroughCallString += ", converted_%s" % paramName
-
-        # endif conversion management
-
-        # Parameter checking.  If the parameter has a specific list of
-        # valid values, we have to make sure that the passed-in values
-        # match these, or we make an error.
-        if len(paramValidValues) > 0:
-            # We're about to make a big switch statement with an
-            # error at the end.  By default, the error is GL_INVALID_ENUM,
-            # unless we find a "case" statement in the middle with a
-            # non-GLenum value.
-            errorDefaultCase = "GL_INVALID_ENUM"
-
-            # This parameter has specific valid values.  Make a big
-            # switch statement to handle it.  Note that the original
-            # parameters are always what is checked, not the
-            # converted parameters.
-            switchCode.append("    switch(%s) {" % paramName)
-
-            for valueIndex in range(len(paramValidValues)):
-                (paramValue, dependentVecSize, dependentParamName, dependentValidValues, errorCode, valueConvert) = paramValidValues[valueIndex]
-
-                # We're going to need information on the dependent param
-                # as well.
-                if dependentParamName:
-                    depParamIndex = apiutil.FindParamIndex(params, dependentParamName)
-                    if depParamIndex == None:
-                        sys.stderr.write("%s: can't find dependent param '%s' for function '%s'\n" % (program, dependentParamName, funcName))
-
-                    (depParamName, depParamType, depParamMaxVecSize, depParamConvertToType, depParamValidValues, depParamValueConversion) = params[depParamIndex]
-                else:
-                    (depParamName, depParamType, depParamMaxVecSize, depParamConvertToType, depParamValidValues, depParamValueConversion) = (None, None, None, None, [], None)
-
-                # This is a sneaky trick.  It's valid syntax for a parameter
-                # that is *not* going to be converted to be declared
-                # with a dependent vector size; but in this case, the
-                # dependent vector size is unused and unnecessary.
-                # So check for this and ignore the dependent vector size
-                # if the parameter is not going to be converted.
-                if depParamConvertToType:
-                    usedDependentVecSize = dependentVecSize
-                else:
-                    usedDependentVecSize = None
-
-                # We'll peek ahead at the next parameter, to see whether
-                # we can combine cases
-                if valueIndex + 1 < len(paramValidValues) :
-                    (nextParamValue, nextDependentVecSize, nextDependentParamName, nextDependentValidValues, nextErrorCode, nextValueConvert) = paramValidValues[valueIndex + 1]
-                    if depParamConvertToType:
-                        usedNextDependentVecSize = nextDependentVecSize
-                    else:
-                        usedNextDependentVecSize = None
-
-                # Create a case for this value.  As a mnemonic,
-                # if we have a dependent vector size that we're ignoring,
-                # add it as a comment.
-                if usedDependentVecSize == None and dependentVecSize != None:
-                    switchCode.append("        case %s: /* size %s */" % (paramValue, dependentVecSize))
-                else:
-                    switchCode.append("        case %s:" % paramValue)
-
-                # If this is not a GLenum case, then switch our error
-                # if no value is matched to be GL_INVALID_VALUE instead
-                # of GL_INVALID_ENUM.  (Yes, this does get confused
-                # if there are both values and GLenums in the same
-                # switch statement, which shouldn't happen.)
-                if paramValue[0:3] != "GL_":
-                    errorDefaultCase = "GL_INVALID_VALUE"
-
-                # If all the remaining parameters are identical to the
-                # next set, then we're done - we'll just create the
-                # official code on the next pass through, and the two
-                # cases will share the code.
-                if valueIndex + 1 < len(paramValidValues) and usedDependentVecSize == usedNextDependentVecSize and dependentParamName == nextDependentParamName and dependentValidValues == nextDependentValidValues and errorCode == nextErrorCode and valueConvert == nextValueConvert:
-                    continue
-
-                # Otherwise, we'll have to generate code for this case.
-                # Start off with a check: if there is a dependent parameter,
-                # and a list of valid values for that parameter, we need
-                # to generate an error if something other than one
-                # of those values is passed.
-                if len(dependentValidValues) > 0:
-                    conditional=""
-
-                    # If the parameter being checked is actually an array,
-                    # check only its first element.
-                    if depParamMaxVecSize == 0:
-                        valueToCheck = dependentParamName
-                    else:
-                        valueToCheck = "%s[0]" % dependentParamName
-
-                    for v in dependentValidValues:
-                        conditional += " && %s != %s" % (valueToCheck, v)
-                    switchCode.append("            if (%s) {" % conditional[4:])
-                    if errorCode == None:
-                        errorCode = "GL_INVALID_ENUM"
-                    switchCode.append('                _mesa_error(_mesa_get_current_context(), %s, "gl%s(%s=0x%s)", %s);' % (errorCode, funcName, paramName, "%x", paramName))
-                    switchCode.append("                %s;" % errorReturn)
-                    switchCode.append("            }")
-                # endif there are dependent valid values
-
-                # The dependent parameter may require conditional
-                # value conversion.  If it does, and we don't want
-                # to convert values, we'll have to generate code for that
-                if depParamValueConversion == "some" and valueConvert == "noconvert":
-                    switchCode.append("            convert_%s_value = 0;" % dependentParamName)
-
-                # If there's a dependent vector size for this parameter
-                # that we're actually going to use (i.e. we need conversion),
-                # mark it.
-                if usedDependentVecSize:
-                    switchCode.append("            n_%s = %s;" % (dependentParamName, dependentVecSize))
-
-                # In all cases, break out of the switch if any valid
-                # value is found.
-                switchCode.append("            break;")
-
-
-            # Need a default case to catch all the other, invalid
-            # parameter values.  These will all generate errors.
-            switchCode.append("        default:")
-            if errorCode == None:
-                errorCode = "GL_INVALID_ENUM"
-            formatString = GetFormatString(paramType)
-            if formatString == None:
-                switchCode.append('            _mesa_error(_mesa_get_current_context(), %s, "gl%s(%s)");' % (errorCode, funcName, paramName))
-            else:
-                switchCode.append('            _mesa_error(_mesa_get_current_context(), %s, "gl%s(%s=%s)", %s);' % (errorCode, funcName, paramName, formatString, paramName))
-            switchCode.append("            %s;" % errorReturn)
-
-            # End of our switch code.
-            switchCode.append("    }")
-
-        # endfor every recognized parameter value
-
-    # endfor every param
-
-    if conversionCodeOutgoing != [] or conversionCodeIncoming != []:
-        continue
-
-    # Here, the passthroughDeclarationString and passthroughCallString
-    # are complete; remove the extra ", " at the front of each.
-    passthroughDeclarationString = passthroughDeclarationString[2:]
-    passthroughCallString = passthroughCallString[2:]
-    if not passthroughDeclarationString:
-        passthroughDeclarationString = "void"
-
-    # The Mesa functions are scattered across all the Mesa
-    # header files.  The easiest way to manage declarations
-    # is to create them ourselves.
-    if funcName in allSpecials:
-        print "/* this function is special and is defined elsewhere */"
-    print "extern %s GL_APIENTRY %s(%s);" % (returnType, passthroughFuncName, passthroughDeclarationString)
-
-    # A function may be a core function (i.e. it exists in
-    # the core specification), a core addition (extension
-    # functions added officially to the core), a required
-    # extension (usually an extension for an earlier version
-    # that has been officially adopted), or an optional extension.
-    #
-    # Core functions have a simple category (e.g. "GLES1.1");
-    # we generate only a simple callback for them.
-    #
-    # Core additions have two category listings, one simple
-    # and one compound (e.g.  ["GLES1.1", "GLES1.1:OES_fixed_point"]).  
-    # We generate the core function, and also an extension function.
-    #
-    # Required extensions and implemented optional extensions
-    # have a single compound category "GLES1.1:OES_point_size_array".
-    # For these we generate just the extension function.
-    for categorySpec in apiutil.Categories(funcName):
-        compoundCategory = categorySpec.split(":")
-
-        # This category isn't for us, if the base category doesn't match
-        # our version
-        if compoundCategory[0] != version:
-            continue
-
-        # Otherwise, determine if we're writing code for a core
-        # function (no suffix) or an extension function.
-        if len(compoundCategory) == 1:
-            # This is a core function
-            extensionName = None
-            extensionSuffix = ""
-        else:
-            # This is an extension function.  We'll need to append
-            # the extension suffix.
-            extensionName = compoundCategory[1]
-            extensionSuffix = extensionName.split("_")[0]
-        fullFuncName = funcPrefix + funcName + extensionSuffix
-
-        # Now the generated function.  The text used to mark an API-level
-        # function, oddly, is version-specific.
-        if extensionName:
-            print "/* Extension %s */" % extensionName
-
-        if (not variables and
-            not switchCode and
-            not conversionCodeOutgoing and
-            not conversionCodeIncoming):
-            # pass through directly
-            print "#define %s %s" % (fullFuncName, passthroughFuncName)
-            print
-            continue
-
-        print "static %s GL_APIENTRY %s(%s)" % (returnType, fullFuncName, declarationString)
-        print "{"
-
-        # Start printing our code pieces.  Start with any local
-        # variables we need.  This unusual syntax joins the 
-        # lines in the variables[] array with the "\n" separator.
-        if len(variables) > 0:
-            print "\n".join(variables) + "\n"
-
-        # If there's any sort of parameter checking or variable
-        # array sizing, the switch code will contain it.
-        if len(switchCode) > 0:
-            print "\n".join(switchCode) + "\n"
-
-        # In the case of an outgoing conversion (i.e. parameters must
-        # be converted before calling the underlying Mesa function),
-        # use the appropriate code.
-        if "get" not in props and len(conversionCodeOutgoing) > 0:
-            print "\n".join(conversionCodeOutgoing) + "\n"
-
-        # Call the Mesa function.  Note that there are very few functions
-        # that return a value (i.e. returnType is not "void"), and that
-        # none of them require incoming translation; so we're safe
-        # to generate code that directly returns in those cases,
-        # even though it's not completely independent.
-
-        if returnType == "void":
-            print "    %s(%s);" % (passthroughFuncName, passthroughCallString)
-        else:
-            print "    return %s(%s);" % (passthroughFuncName, passthroughCallString)
-
-        # If the function is one that returns values (i.e. "get" in props),
-        # it might return values of a different type than we need, that
-        # require conversion before passing back to the application.
-        if "get" in props and len(conversionCodeIncoming) > 0:
-            print "\n".join(conversionCodeIncoming)
-
-        # All done.
-        print "}"
-        print
-    # end for each category provided for a function
-
-# end for each function
-
-print """
-#include "glapi/glapi.h"
-
-#if FEATURE_remap_table
-
-/* define esLocalRemapTable */
-#include "main/api_exec_%s_dispatch.h"
-
-#define need_MESA_remap_table
-#include "main/api_exec_%s_remap_helper.h"
-
-static void
-init_remap_table(void)
-{
-   _glthread_DECLARE_STATIC_MUTEX(mutex);
-   static GLboolean initialized = GL_FALSE;
-   const struct gl_function_pool_remap *remap = MESA_remap_table_functions;
-   int i;
-
-   _glthread_LOCK_MUTEX(mutex);
-   if (initialized) {
-      _glthread_UNLOCK_MUTEX(mutex);
-      return;
-   }
-
-   for (i = 0; i < esLocalRemapTable_size; i++) {
-      GLint offset;
-      const char *spec;
-
-      /* sanity check */
-      ASSERT(i == remap[i].remap_index);
-      spec = _mesa_function_pool + remap[i].pool_index;
-
-      offset = _mesa_map_function_spec(spec);
-      esLocalRemapTable[i] = offset;
-   }
-   initialized = GL_TRUE;
-   _glthread_UNLOCK_MUTEX(mutex);
-}
-
-#else /* FEATURE_remap_table */
-
-#include "%sapi/main/dispatch.h"
-
-static INLINE void
-init_remap_table(void)
-{
-}
-
-#endif /* FEATURE_remap_table */
-
-struct _glapi_table *
-_mesa_create_exec_table_%s(void)
-{
-   struct _glapi_table *exec;
-
-   exec = _mesa_alloc_dispatch_table(_gloffset_COUNT);
-   if (exec == NULL)
-      return NULL;
-
-   init_remap_table();
-""" % (shortname, shortname, shortname, shortname)
-
-for func in keys:
-    prefix = "_es_" if func not in allSpecials else "_check_"
-    for spec in apiutil.Categories(func):
-        ext = spec.split(":")
-        # version does not match
-        if ext.pop(0) != version:
-            continue
-        entry = func
-        if ext:
-            suffix = ext[0].split("_")[0]
-            entry += suffix
-        print "    SET_%s(exec, %s%s);" % (entry, prefix, entry)
-print ""
-print "   return exec;"
-print "}"
-
-print """
-#endif /* FEATURE_%s */""" % (shortname.upper())
index b14ec13eda85f28b24d47d82dd00ba2301c5b890..b4b58db6dea19eaa8fa060032709b9a4a72f9aef 100644 (file)
@@ -5,7 +5,6 @@
 
 # this is part of MAIN_FILES
 MAIN_ES_FILES = \
-       $(BUILDDIR)main/api_exec_es1.c \
        $(SRCDIR)main/es1_conversion.c
 
 MAIN_FILES = \