]> git.cworth.org Git - apitrace/commitdiff
Basic texture name handling.
authorJosé Fonseca <jfonseca@vmware.com>
Tue, 23 Nov 2010 22:13:14 +0000 (22:13 +0000)
committerJosé Fonseca <jfonseca@vmware.com>
Tue, 23 Nov 2010 22:13:14 +0000 (22:13 +0000)
base.py
glapi.py
glretrace.py
trace.py

diff --git a/base.py b/base.py
index 77409bb4ce3214838afecc61ac1cefc8f52d1c7b..6b49009c4b505f4bc70ec389828fd3c3f70b4764 100644 (file)
--- a/base.py
+++ b/base.py
@@ -67,6 +67,9 @@ class Visitor:
     def visit_pointer(self, pointer, *args, **kwargs):
         raise NotImplementedError
 
+    def visit_handle(self, handle, *args, **kwargs):
+        raise NotImplementedError
+
     def visit_alias(self, alias, *args, **kwargs):
         raise NotImplementedError
 
@@ -126,6 +129,10 @@ class Rebuilder(Visitor):
         type = self.visit(pointer.type)
         return Pointer(type)
 
+    def visit_handle(self, handle):
+        type = self.visit(handle.type)
+        return Handle(handle.name, type)
+
     def visit_alias(self, alias):
         type = self.visit(alias.type)
         return Alias(alias.expr, type)
@@ -229,6 +236,17 @@ class Pointer(Type):
         return visitor.visit_pointer(self, *args, **kwargs)
 
 
+class Handle(Type):
+
+    def __init__(self, name, type):
+        Type.__init__(self, type.expr, 'P' + type.id)
+        self.name = name
+        self.type = type
+
+    def visit(self, visitor, *args, **kwargs):
+        return visitor.visit_handle(self, *args, **kwargs)
+
+
 def ConstPointer(type):
     return Pointer(Const(type))
 
index 837cca603518e03a8ac870c92c2010008da1fa48..dd7368cb9c52ae222c261de19efb1a96dfb03e9a 100644 (file)
--- a/glapi.py
+++ b/glapi.py
@@ -2518,6 +2518,8 @@ GLbitfield_client_attrib = Flags(GLbitfield, [
     "GL_CLIENT_VERTEX_ARRAY_BIT", # 0x00000002
 ])
 
+texture = Handle("texture", GLuint)
+
 
 def GlFunction(*args, **kwargs):
     kwargs.setdefault('call', 'GLAPIENTRY')
@@ -2835,7 +2837,7 @@ def basic_functions(Function):
         F(Void, "glTranslatef", [(GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]),
         F(Void, "glViewport", [(GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height")]),
         F(Void, "glArrayElement", [(GLint, "i")]),
-        F(Void, "glBindTexture", [(GLenum, "target"), (GLuint, "texture")]),
+        F(Void, "glBindTexture", [(GLenum, "target"), (texture, "texture")]),
         F(Void, "glColorPointer", [(GLint, "size"), (GLenum, "type"), (GLsizei, "stride"), (OpaquePointer(Const(GLvoid)), "pointer")]),
         F(Void, "glDisableClientState", [(GLenum, "array")]),
         F(Void, "glDrawArrays", [(GLenum_mode, "mode"), (GLint, "first"), (GLsizei, "count")]),
@@ -2850,16 +2852,16 @@ def basic_functions(Function):
         F(Void, "glPolygonOffset", [(GLfloat, "factor"), (GLfloat, "units")]),
         F(Void, "glTexCoordPointer", [(GLint, "size"), (GLenum, "type"), (GLsizei, "stride"), (OpaquePointer(Const(GLvoid)), "pointer")]),
         F(Void, "glVertexPointer", [(GLint, "size"), (GLenum, "type"), (GLsizei, "stride"), (OpaquePointer(Const(GLvoid)), "pointer")]),
-        F(GLboolean, "glAreTexturesResident", [(GLsizei, "n"), (Array(Const(GLuint), "n"), "textures"), Out(Array(GLboolean, "n"), "residences")]),
+        F(GLboolean, "glAreTexturesResident", [(GLsizei, "n"), (Array(Const(texture), "n"), "textures"), Out(Array(GLboolean, "n"), "residences")]),
         F(Void, "glCopyTexImage1D", [(GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLint, "border")]),
         F(Void, "glCopyTexImage2D", [(GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height"), (GLint, "border")]),
         F(Void, "glCopyTexSubImage1D", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "x"), (GLint, "y"), (GLsizei, "width")]),
         F(Void, "glCopyTexSubImage2D", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height")]),
-        F(Void, "glDeleteTextures", [(GLsizei, "n"), (Array(Const(GLuint), "n"), "textures")]),
-        F(Void, "glGenTextures", [(GLsizei, "n"), Out(Array(GLuint, "n"), "textures")]),
+        F(Void, "glDeleteTextures", [(GLsizei, "n"), (Array(Const(texture), "n"), "textures")]),
+        F(Void, "glGenTextures", [(GLsizei, "n"), Out(Array(texture, "n"), "textures")]),
         F(Void, "glGetPointerv", [(GLenum, "pname"), Out(Pointer(OpaquePointer(GLvoid)), "params")], sideeffects=False),
-        F(GLboolean, "glIsTexture", [(GLuint, "texture")]),
-        F(Void, "glPrioritizeTextures", [(GLsizei, "n"), (Array(Const(GLuint), "n"), "textures"), (Array(Const(GLclampf), "n"), "priorities")]),
+        F(GLboolean, "glIsTexture", [(texture, "texture")]),
+        F(Void, "glPrioritizeTextures", [(GLsizei, "n"), (Array(Const(texture), "n"), "textures"), (Array(Const(GLclampf), "n"), "priorities")]),
         F(Void, "glTexSubImage1D", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLsizei, "width"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "__gl_image_size(format, type, width, 1, 1, 0)"), "pixels")]),
         F(Void, "glTexSubImage2D", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "__gl_image_size(format, type, width, height, 1, 0)"), "pixels")]),
         F(Void, "glPopClientAttrib", []),
@@ -3296,9 +3298,9 @@ def extended_functions(Function):
         F(Void, "glDeleteFramebuffersEXT", [(GLsizei, "n"), (Array(Const(GLuint), "n"), "framebuffers")]),
         F(Void, "glDeleteRenderbuffersEXT", [(GLsizei, "n"), (Array(Const(GLuint), "n"), "renderbuffers")]),
         F(Void, "glFramebufferRenderbufferEXT", [(GLenum, "target"), (GLenum, "attachment"), (GLenum, "renderbuffertarget"), (GLuint, "renderbuffer")]),
-        F(Void, "glFramebufferTexture1DEXT", [(GLenum, "target"), (GLenum, "attachment"), (GLenum, "textarget"), (GLuint, "texture"), (GLint, "level")]),
-        F(Void, "glFramebufferTexture2DEXT", [(GLenum, "target"), (GLenum, "attachment"), (GLenum, "textarget"), (GLuint, "texture"), (GLint, "level")]),
-        F(Void, "glFramebufferTexture3DEXT", [(GLenum, "target"), (GLenum, "attachment"), (GLenum, "textarget"), (GLuint, "texture"), (GLint, "level"), (GLint, "zoffset")]),
+        F(Void, "glFramebufferTexture1DEXT", [(GLenum, "target"), (GLenum, "attachment"), (GLenum, "textarget"), (texture, "texture"), (GLint, "level")]),
+        F(Void, "glFramebufferTexture2DEXT", [(GLenum, "target"), (GLenum, "attachment"), (GLenum, "textarget"), (texture, "texture"), (GLint, "level")]),
+        F(Void, "glFramebufferTexture3DEXT", [(GLenum, "target"), (GLenum, "attachment"), (GLenum, "textarget"), (texture, "texture"), (GLint, "level"), (GLint, "zoffset")]),
         F(Void, "glGenFramebuffersEXT", [(GLsizei, "n"), Out(Array(GLuint, "n"), "framebuffers")]),
         F(Void, "glGenRenderbuffersEXT", [(GLsizei, "n"), Out(Array(GLuint, "n"), "renderbuffers")]),
         F(Void, "glGenerateMipmapEXT", [(GLenum, "target")]),
@@ -3308,7 +3310,7 @@ def extended_functions(Function):
         F(GLboolean, "glIsRenderbufferEXT", [(GLuint, "renderbuffer")]),
         F(Void, "glRenderbufferStorageEXT", [(GLenum, "target"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height")]),
         F(Void, "glBlitFramebufferEXT", [(GLint, "srcX0"), (GLint, "srcY0"), (GLint, "srcX1"), (GLint, "srcY1"), (GLint, "dstX0"), (GLint, "dstY0"), (GLint, "dstX1"), (GLint, "dstY1"), (GLbitfield_attrib, "mask"), (GLenum, "filter")]),
-        F(Void, "glFramebufferTextureLayerEXT", [(GLenum, "target"), (GLenum, "attachment"), (GLuint, "texture"), (GLint, "level"), (GLint, "layer")]),
+        F(Void, "glFramebufferTextureLayerEXT", [(GLenum, "target"), (GLenum, "attachment"), (texture, "texture"), (GLint, "level"), (GLint, "layer")]),
         F(Void, "glStencilFuncSeparateATI", [(GLenum, "frontfunc"), (GLenum, "backfunc"), (GLint, "ref"), (GLuint, "mask")]),
         F(Void, "glProgramEnvParameters4fvEXT", [(GLenum, "target"), (GLuint, "index"), (GLsizei, "count"), (OpaquePointer(Const(GLfloat)), "params")]),
         F(Void, "glProgramLocalParameters4fvEXT", [(GLenum, "target"), (GLuint, "index"), (GLsizei, "count"), (OpaquePointer(Const(GLfloat)), "params")]),
index 8ab6b7564d55026d6bd24884bc6475c8744ea8a6..705f953d0b80610df9dd570b3653b5034f991f45 100644 (file)
@@ -69,7 +69,15 @@ class ValueExtractor(base.Visitor):
             print '    } else {'
             print '        %s = NULL;' % lvalue
             print '    }'
+    
+    def visit_pointer(self, pointer, lvalue, rvalue):
+        # FIXME
+        raise NotImplementedError
 
+    def visit_handle(self, handle, lvalue, rvalue):
+        self.visit(handle.type, lvalue, "__%s_map[%s]" %(handle.name, rvalue));
+        print '    std::cout << "%s " << static_cast<%s>(%s) << " <- " << %s << "\\n";' % (handle.name, handle.type, rvalue, lvalue)
+    
     def visit_blob(self, blob, lvalue, rvalue):
         print '    %s = static_cast<%s>((%s).blob());' % (lvalue, blob, rvalue)
     
@@ -78,6 +86,48 @@ class ValueExtractor(base.Visitor):
 
 
 
+class ValueWrapper(base.Visitor):
+
+    def visit_literal(self, literal, lvalue, rvalue):
+        pass
+
+    def visit_alias(self, alias, lvalue, rvalue):
+        self.visit(alias.type, lvalue, rvalue)
+    
+    def visit_enum(self, enum, lvalue, rvalue):
+        pass
+
+    def visit_bitmask(self, bitmask, lvalue, rvalue):
+        pass
+
+    def visit_array(self, array, lvalue, rvalue):
+        print '    const Trace::Array *__a%s = dynamic_cast<const Trace::Array *>(&%s);' % (array.id, rvalue)
+        print '    if (__a%s) {' % (array.id)
+        length = '__a%s->values.size()' % array.id
+        index = '__i' + array.id
+        print '        for(size_t {i} = 0; {i} < {length}; ++{i}) {{'.format(i = index, length = length)
+        try:
+            self.visit(array.type, '%s[%s]' % (lvalue, index), '*__a%s->values[%s]' % (array.id, index))
+        finally:
+            print '        }'
+            print '    }'
+    
+    def visit_pointer(self, pointer, lvalue, rvalue):
+        # FIXME
+        raise NotImplementedError
+
+    def visit_handle(self, handle, lvalue, rvalue):
+        print "    __%s_map[static_cast<%s>(%s)] = %s;" % (handle.name, handle.type, rvalue, lvalue)
+        print '    std::cout << "%s " << static_cast<%s>(%s) << " -> " << %s << "\\n";' % (handle.name, handle.type, rvalue, lvalue)
+    
+    def visit_blob(self, blob, lvalue, rvalue):
+        pass
+    
+    def visit_string(self, string, lvalue, rvalue):
+        pass
+
+
+
 def retrace_function(function):
     print 'static void retrace_%s(Trace::Call &call) {' % function.name
     success = True
@@ -96,6 +146,15 @@ def retrace_function(function):
         print '    return;'
     arg_names = ", ".join([arg.name for arg in function.args])
     print '    %s(%s);' % (function.name, arg_names)
+    for arg in function.args:
+        if arg.output:
+            arg.type = ConstRemover().visit(arg.type)
+            rvalue = 'call.arg("%s")' % (arg.name,)
+            lvalue = arg.name
+            try:
+                ValueWrapper().visit(arg.type, lvalue, rvalue)
+            except NotImplementedError:
+                print '   // FIXME: %s' % arg.name
     print '}'
     print
 
@@ -136,6 +195,8 @@ if __name__ == '__main__':
     print
     print '#include "trace_parser.hpp"'
     print
+    print 'static std::map<GLuint, GLuint> __texture_map;'
+    print
 
     retrace_functions(glapi.glapi.functions)
 
index 9b5c6b6aff461da03d0673c32207cf96b37ebf1d..a866f2a6c8012393c8510299aa7571bc0d8d47e1 100644 (file)
--- a/trace.py
+++ b/trace.py
@@ -98,6 +98,9 @@ class DumpDeclarator(base.OnceVisitor):
     def visit_pointer(self, pointer):
         self.visit(pointer.type)
 
+    def visit_handle(self, handle):
+        self.visit(handle.type)
+
     def visit_alias(self, alias):
         self.visit(alias.type)
 
@@ -155,6 +158,9 @@ class DumpImplementer(base.Visitor):
         print '    else'
         print '        Log::LiteralNull();'
 
+    def visit_handle(self, handle, instance):
+        self.visit(handle.type, instance)
+
     def visit_alias(self, alias, instance):
         self.visit(alias.type, instance)
 
@@ -204,6 +210,9 @@ class Wrapper(base.Visitor):
     def visit_pointer(self, pointer, instance):
         self.visit(pointer.type, "*" + instance)
 
+    def visit_handle(self, handle, instance):
+        self.visit(handle.type, instance)
+
     def visit_alias(self, alias, instance):
         self.visit(alias.type, instance)