X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=wrappers%2Fegltrace.py;h=11d3ad2fba32e6d74bbe94ac2906e279069a3bc6;hb=4dbf7c9e3f4b669ec38600c04ba8a67926d10cc7;hp=f40b8a06a863e2875d8704d6c8f64d4f03d1e82c;hpb=bf1f242397b87c2d501b1ca7a8045f7f3649ca3b;p=apitrace diff --git a/wrappers/egltrace.py b/wrappers/egltrace.py index f40b8a0..11d3ad2 100644 --- a/wrappers/egltrace.py +++ b/wrappers/egltrace.py @@ -33,7 +33,7 @@ from gltrace import GlTracer -from specs.stdapi import API +from specs.stdapi import Module, API from specs.glapi import glapi from specs.eglapi import eglapi from specs.glesapi import glesapi @@ -52,11 +52,16 @@ class EglTracer(GlTracer): def traceFunctionImplBody(self, function): GlTracer.traceFunctionImplBody(self, function) + if function.name == 'eglCreateContext': + print ' if (_result != EGL_NO_CONTEXT)' + print ' gltrace::createContext((uintptr_t)_result);' + if function.name == 'eglMakeCurrent': print ' if (_result) {' print ' // update the profile' print ' if (ctx != EGL_NO_CONTEXT) {' print ' EGLint api = EGL_OPENGL_ES_API, version = 1;' + print ' gltrace::setContext((uintptr_t)ctx);' print ' gltrace::Context *tr = gltrace::getContext();' print ' _eglQueryContext(dpy, ctx, EGL_CONTEXT_CLIENT_TYPE, &api);' print ' _eglQueryContext(dpy, ctx, EGL_CONTEXT_CLIENT_VERSION, &version);' @@ -66,14 +71,35 @@ class EglTracer(GlTracer): print ' tr->profile = gltrace::PROFILE_ES1;' print ' else' print ' tr->profile = gltrace::PROFILE_ES2;' + print ' } else {' + print ' gltrace::clearContext();' print ' }' print ' }' + if function.name == 'eglDestroyContext': + print ' if (_result) {' + print ' gltrace::releaseContext((uintptr_t)ctx);' + print ' }' + + if function.name == 'glEGLImageTargetTexture2DOES': + print ' image_info *info = _EGLImageKHR_get_image_info(target, image);' + print ' if (info) {' + print ' GLint level = 0;' + print ' GLint internalformat = info->internalformat;' + print ' GLsizei width = info->width;' + print ' GLsizei height = info->height;' + print ' GLint border = 0;' + print ' GLenum format = info->format;' + print ' GLenum type = info->type;' + print ' const GLvoid * pixels = info->pixels;' + self.emitFakeTexture2D() + print ' _EGLImageKHR_free_image_info(info);' + print ' }' + if __name__ == '__main__': print '#include ' print '#include ' - print '#include ' print print '#include "trace_writer_local.hpp"' print @@ -81,45 +107,24 @@ if __name__ == '__main__': print '#define GL_GLEXT_PROTOTYPES' print '#define EGL_EGLEXT_PROTOTYPES' print + print '#include "dlopen.hpp"' print '#include "glproc.hpp"' print '#include "glsize.hpp"' + print '#include "eglsize.hpp"' print + module = Module() + module.mergeModule(eglapi) + module.mergeModule(glapi) + module.mergeModule(glesapi) api = API() - api.addApi(eglapi) - api.addApi(glapi) - api.addApi(glesapi) + api.addModule(module) tracer = EglTracer() tracer.traceApi(api) print r''' -/* - * Android does not support LD_PRELOAD. - */ -#if !defined(ANDROID) - - -/* - * Invoke the true dlopen() function. - */ -static void *_dlopen(const char *filename, int flag) -{ - typedef void * (*PFN_DLOPEN)(const char *, int); - static PFN_DLOPEN dlopen_ptr = NULL; - - if (!dlopen_ptr) { - dlopen_ptr = (PFN_DLOPEN)dlsym(RTLD_NEXT, "dlopen"); - if (!dlopen_ptr) { - os::log("apitrace: error: dlsym(RTLD_NEXT, \"dlopen\") failed\n"); - return NULL; - } - } - - return dlopen_ptr(filename, flag); -} - /* * Several applications, such as Quake3, use dlopen("libGL.so.1"), but @@ -132,7 +137,7 @@ void * dlopen(const char *filename, int flag) { bool intercept = false; - if (filename) { + if (filename && trace::isTracingEnabled()) { intercept = strcmp(filename, "libEGL.so") == 0 || strcmp(filename, "libEGL.so.1") == 0 || @@ -174,9 +179,6 @@ void * dlopen(const char *filename, int flag) } -#endif /* !ANDROID */ - - #if defined(ANDROID) /*