X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=glxtrace.py;h=e1a5aa59e989b726351d385fa2c36ebf7597d4e1;hb=9bde72eb176831d6d4b185ec7880ec35e61147f8;hp=1b9aeac76ea670c5f5245c130bca00b37ccfd95f;hpb=6fa64d06f3eb475017d292b96535985c59f9778e;p=apitrace diff --git a/glxtrace.py b/glxtrace.py index 1b9aeac..e1a5aa5 100644 --- a/glxtrace.py +++ b/glxtrace.py @@ -1,6 +1,6 @@ ########################################################################## # -# Copyright 2008-2009 VMware, Inc. +# Copyright 2008-2010 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -24,46 +24,24 @@ ##########################################################################/ -from base import * -from glapi import glapi -import trace - +"""GLX tracing generator.""" -glxapi = API("GLX") -PROC = Opaque("__GLXextFuncPtr") - -glxapi.add_functions(glapi.functions) -glxapi.add_functions([ - Function(PROC, "glXGetProcAddressARB", [(Alias("const GLubyte *", String), "procName")]), - Function(PROC, "glXGetProcAddress", [(Alias("const GLubyte *", String), "procName")]), -]) +from stdapi import API +from glapi import glapi +from glxapi import glxapi +from gltrace import GlTracer +from dispatch import function_pointer_type, function_pointer_value -class GlxTracer(trace.Tracer): +class GlxTracer(GlTracer): def get_function_address(self, function): - if function.name.startswith("glXGetProcAddress"): - return 'dlsym(RTLD_NEXT, "%s")' % (function.name,) - else: - print ' if (!pglXGetProcAddress) {' - print ' pglXGetProcAddress = (PglXGetProcAddress)dlsym(RTLD_NEXT, "glXGetProcAddress");' - print ' if (!pglXGetProcAddress)' - print ' Log::Abort();' - print ' }' - return 'pglXGetProcAddress((const GLubyte *)"%s")' % (function.name,) + return '__%s' % (function.name,) def wrap_ret(self, function, instance): - if function.name.startswith("glXGetProcAddress"): - print ' if (%s) {' % instance - for f in glxapi.functions: - ptype = self.function_pointer_type(f) - pvalue = self.function_pointer_value(f) - print ' if(!strcmp("%s", (const char *)procName)) {' % f.name - print ' %s = (%s)%s;' % (pvalue, ptype, instance) - print ' %s = (%s)&%s;' % (instance, function.type, f.name); - print ' }' - print ' }' + if function.name in ("glXGetProcAddress", "glXGetProcAddressARB"): + print ' %s = __unwrap_proc_addr(procName, %s);' % (instance, instance) if __name__ == '__main__': @@ -71,18 +49,35 @@ if __name__ == '__main__': print '#include ' print '#include ' print '#include ' - print '#include ' - print '#include ' - print '#include ' - print '#include ' - print '#include ' print - print '#include "log.hpp"' - print '#include "glhelpers.hpp"' + print '#include "trace_write.hpp"' + print + print '#include "glproc.hpp"' + print '#include "glsize.hpp"' print print 'extern "C" {' print + print 'static __GLXextFuncPtr __unwrap_proc_addr(const GLubyte * procName, __GLXextFuncPtr procPtr);' + print + + api = API() + api.add_api(glxapi) + api.add_api(glapi) tracer = GlxTracer() - tracer.trace_api(glxapi) + tracer.trace_api(api) + + print 'static __GLXextFuncPtr __unwrap_proc_addr(const GLubyte * procName, __GLXextFuncPtr procPtr) {' + print ' if (!procPtr) {' + print ' return procPtr;' + print ' }' + for f in api.functions: + ptype = function_pointer_type(f) + pvalue = function_pointer_value(f) + print ' if(!strcmp("%s", (const char *)procName)) {' % f.name + print ' %s = (%s)procPtr;' % (pvalue, ptype) + print ' return (__GLXextFuncPtr)&%s;' % (f.name,) + print ' }' + print ' return procPtr;' + print '}' print print '} /* extern "C" */'