]> git.cworth.org Git - apitrace/blobdiff - retrace/glretrace.py
Add a script to analyse profile output per shader.
[apitrace] / retrace / glretrace.py
index 08fc6a054da8bb3bd43ffa7648f30030cb731c8b..fd012d1719a245b5dd99f207e58dbf4d22e62982 100644 (file)
@@ -289,7 +289,29 @@ class GlRetracer(Retracer):
             print r'    if (pipeline) {'
             print r'        _pipelineHasBeenBound = true;'
             print r'    }'
-        
+
+        profileDraw = (
+            function.name in self.draw_array_function_names or
+            function.name in self.draw_elements_function_names or
+            function.name in self.draw_indirect_function_names or
+            function.name in self.misc_draw_function_names
+        )
+
+        if function.name in ('glUseProgram', 'glUseProgramObjectARB'):
+            print r'    glretrace::setActiveProgram((call.arg(0)).toUInt());'
+
+        # Only profile if not inside a list as the queries get inserted into list
+        if function.name == 'glNewList':
+            print r'    glretrace::insideList = true;'
+
+        if function.name == 'glEndList':
+            print r'    glretrace::insideList = false;'
+
+        if profileDraw:
+            print r'    if (!glretrace::insideList && retrace::profiling) {'
+            print r'        glretrace::beginProfile(call);'
+            print r'    }'
+
         if function.name == 'glCreateShaderProgramv':
             # When dumping state, break down glCreateShaderProgramv so that the
             # shader source can be recovered.
@@ -321,6 +343,11 @@ class GlRetracer(Retracer):
         else:
             Retracer.invokeFunction(self, function)
 
+        if profileDraw:
+            print r'    if (!glretrace::insideList && retrace::profiling) {'
+            print r'        glretrace::endProfile(call);'
+            print r'    }'
+
         # Error checking
         if function.name == "glBegin":
             print '    glretrace::insideGlBeginEnd = true;'