aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChia-I Wu <olv@lunarg.com>2015-01-04 00:11:17 +0800
committerCourtney Goeltzenleuchter <courtney@LunarG.com>2015-02-04 17:58:04 -0700
commit0dd22006d18f6f6355a7fc147c6d0a1c5a26b857 (patch)
tree925e2fb9759d6c04304c2ff16ba0e5618b4665e4
parent3b24705223ba4762eb12a7138b17f2f6f7534b29 (diff)
downloadusermoji-0dd22006d18f6f6355a7fc147c6d0a1c5a26b857.tar.xz
xgl-generate.py: add IcdGetProcAddrSubcommand
It can generate xglGetProcAddr() for ICDs. v2: remove an extraneous semicolon
-rwxr-xr-xxgl-generate.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/xgl-generate.py b/xgl-generate.py
index ef199af4..fcd5e47a 100755
--- a/xgl-generate.py
+++ b/xgl-generate.py
@@ -225,10 +225,45 @@ class IcdDummyEntrypointsSubcommand(Subcommand):
def generate_body(self):
return self._generate_stubs()
+class IcdGetProcAddrSubcommand(IcdDummyEntrypointsSubcommand):
+ def generate_header(self):
+ return "\n".join(["#include <string.h>", "#include \"icd.h\""])
+
+ def generate_body(self):
+ for proto in self.protos:
+ if proto.name == "GetProcAddr":
+ gpa_proto = proto
+
+ gpa_decl = self._generate_stub_decl(gpa_proto)
+ gpa_pname = gpa_proto.params[-1].name
+
+ lookups = []
+ for proto in self.protos:
+ lookups.append("if (!strcmp(%s, \"%s\"))" %
+ (gpa_pname, proto.name))
+ lookups.append(" return (%s) %s%s;" %
+ (gpa_proto.ret, self.prefix, proto.name))
+
+ body = []
+ body.append("%s %s" % (self.qual, gpa_decl))
+ body.append("{")
+ body.append(" if (!%s || %s[0] != 'x' || %s[1] != 'g' || %s[2] != 'l')" %
+ (gpa_pname, gpa_pname, gpa_pname, gpa_pname))
+ body.append(" return NULL;")
+ body.append("")
+ body.append(" %s += 3;" % gpa_pname)
+ body.append(" %s" % "\n ".join(lookups))
+ body.append("")
+ body.append(" return NULL;")
+ body.append("}")
+
+ return "\n".join(body)
+
def main():
subcommands = {
"loader": LoaderSubcommand,
"icd-dummy-entrypoints": IcdDummyEntrypointsSubcommand,
+ "icd-get-proc-addr": IcdGetProcAddrSubcommand,
}
if len(sys.argv) < 2 or sys.argv[1] not in subcommands: