]> git.cworth.org Git - apitrace/blobdiff - wrappers/egltrace.py
trace: Unwrap all args before serializing them.
[apitrace] / wrappers / egltrace.py
index 505ca797442c4f354847d0394ef47ec7bf4c4a0e..0c7ebb6b1937acedfd657d0bdabdc29e857b5947 100644 (file)
@@ -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
@@ -81,26 +81,33 @@ class EglTracer(GlTracer):
             print '        gltrace::releaseContext((uintptr_t)ctx);'
             print '    }'
 
-        if function.name == 'eglCreateImageKHR':
-            print '    _eglCreateImageKHR_epilog(dpy, ctx, target, buffer,'
-            print '                              attrib_list, _result);'
-
-        if function.name == 'eglDestroyImageKHR':
-            print '    _eglDestroyImageKHR_epilog(image);'
+        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 serializeArgValue(self, function, arg):
-        if function.name == 'glEGLImageTargetTexture2DOES' and \
-          arg.name == 'image':
-            print '    GLsizei blob_size;'
-            print '    GLvoid *blob_ptr;'
-            print '    blob_size = _glEGLImageTargetTexture2DOES_size(target, image);'
-            print '    blob_ptr = _glEGLImageTargetTexture2DOES_get_ptr(target, image);'
-            print '    trace::localWriter.writeBlob(blob_ptr, blob_size);'
-            print '    _glEGLImageTargetTexture2DOES_put_ptr(blob_ptr);'
+    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();'
 
-            return
 
-        GlTracer.serializeArgValue(self, function, arg)
 
 if __name__ == '__main__':
     print '#include <stdlib.h>'
@@ -118,10 +125,12 @@ if __name__ == '__main__':
     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)