diff options
| author | Chia-I Wu <olv@lunarg.com> | 2015-01-04 00:11:17 +0800 |
|---|---|---|
| committer | Courtney Goeltzenleuchter <courtney@LunarG.com> | 2015-02-04 17:58:04 -0700 |
| commit | 0dd22006d18f6f6355a7fc147c6d0a1c5a26b857 (patch) | |
| tree | 925e2fb9759d6c04304c2ff16ba0e5618b4665e4 | |
| parent | 3b24705223ba4762eb12a7138b17f2f6f7534b29 (diff) | |
| download | usermoji-0dd22006d18f6f6355a7fc147c6d0a1c5a26b857.tar.xz | |
xgl-generate.py: add IcdGetProcAddrSubcommand
It can generate xglGetProcAddr() for ICDs.
v2: remove an extraneous semicolon
| -rwxr-xr-x | xgl-generate.py | 35 |
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: |
