X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=wrappers%2Fegltrace.py;h=0c7ebb6b1937acedfd657d0bdabdc29e857b5947;hb=48c661ea6c0f2bd9b76a3385cd946b7d07bc9b5f;hp=4858e2fbabff88e45d46a4f46dca210ed7395a12;hpb=632a78d5c90941c896fa3c7156131f27c5a58b24;p=apitrace diff --git a/wrappers/egltrace.py b/wrappers/egltrace.py index 4858e2f..0c7ebb6 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,21 +52,62 @@ 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 ' // update the profile' - print ' if (ctx != EGL_NO_CONTEXT) {' - print ' EGLint api = EGL_OPENGL_ES_API, version = 1;' - print ' gltrace::Context *tr = gltrace::getContext();' - print ' _eglQueryContext(dpy, ctx, EGL_CONTEXT_CLIENT_TYPE, &api);' - print ' _eglQueryContext(dpy, ctx, EGL_CONTEXT_CLIENT_VERSION, &version);' - print ' if (api == EGL_OPENGL_API)' - print ' tr->profile = gltrace::PROFILE_COMPAT;' - print ' else if (version == 1)' - print ' tr->profile = gltrace::PROFILE_ES1;' - print ' else' - print ' tr->profile = gltrace::PROFILE_ES2;' + 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);' + print ' if (api == EGL_OPENGL_API)' + print ' tr->profile = gltrace::PROFILE_COMPAT;' + print ' else if (version == 1)' + 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 ' }' + def emitFakeTexture2D(self): + function = glapi.getFunctionByName('glTexImage2D') + instances = function.argNames() + print ' unsigned _fake_call = trace::localWriter.beginEnter(&_%s_sig);' % (function.name,) + for arg in function.args: + assert not arg.output + self.serializeArg(function, arg) + print ' trace::localWriter.endEnter();' + print ' trace::localWriter.beginLeave(_fake_call);' + print ' trace::localWriter.endLeave();' + + if __name__ == '__main__': print '#include ' @@ -81,12 +122,15 @@ if __name__ == '__main__': print 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) @@ -175,5 +219,65 @@ void * dlopen(const char *filename, int flag) #endif /* !ANDROID */ +#if defined(ANDROID) + +/* + * Undocumented Android extensions used by Dalvik which have bound information + * passed to it, but is currently ignored, so probably unreliable. + * + * See: + * https://github.com/android/platform_frameworks_base/blob/master/opengl/libs/GLES_CM/gl.cpp + */ + +extern "C" PUBLIC +void APIENTRY glColorPointerBounds(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer, GLsizei count) { + (void)count; + glColorPointer(size, type, stride, pointer); +} + +extern "C" PUBLIC +void APIENTRY glNormalPointerBounds(GLenum type, GLsizei stride, const GLvoid * pointer, GLsizei count) { + (void)count; + glNormalPointer(type, stride, pointer); +} + +extern "C" PUBLIC +void APIENTRY glTexCoordPointerBounds(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer, GLsizei count) { + (void)count; + glTexCoordPointer(size, type, stride, pointer); +} + +extern "C" PUBLIC +void APIENTRY glVertexPointerBounds(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer, GLsizei count) { + (void)count; + glVertexPointer(size, type, stride, pointer); +} + +extern "C" PUBLIC +void GL_APIENTRY glPointSizePointerOESBounds(GLenum type, GLsizei stride, const GLvoid *pointer, GLsizei count) { + (void)count; + glPointSizePointerOES(type, stride, pointer); +} + +extern "C" PUBLIC +void APIENTRY glMatrixIndexPointerOESBounds(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer, GLsizei count) { + (void)count; + glMatrixIndexPointerOES(size, type, stride, pointer); +} + +extern "C" PUBLIC +void APIENTRY glWeightPointerOESBounds(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer, GLsizei count) { + (void)count; + glWeightPointerOES(size, type, stride, pointer); +} + +/* + * There is also a glVertexAttribPointerBounds in + * https://github.com/android/platform_frameworks_base/blob/master/opengl/tools/glgen/stubs/gles11/GLES20cHeader.cpp + * but is it not exported. + */ + +#endif /* ANDROID */ + '''