]> git.cworth.org Git - apitrace/blobdiff - retrace/glretrace.py
Allow BlockingIO read of profiling results.
[apitrace] / retrace / glretrace.py
index 440366cb87a85f22eb8fdb53201f46b435664cf0..987798fe6a0c5cab01eb015a93ef62f708a50aea 100644 (file)
@@ -294,19 +294,25 @@ class GlRetracer(Retracer):
             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
+            function.name in self.misc_draw_function_names or
+            function.name == 'glBegin'
         )
 
-        # Only profile if not inside a list as the queries get inserted into lsit
+        if function.name in ('glUseProgram', 'glUseProgramObjectARB'):
+            print r'    if (glretrace::currentContext) {'
+            print r'        glretrace::currentContext->activeProgram = call.arg(0).toUInt();'
+            print r'    }'
+
+        # Only profile if not inside a list as the queries get inserted into list
         if function.name == 'glNewList':
-            print r'    glretrace::insideList = true;';
+            print r'    glretrace::insideList = true;'
 
         if function.name == 'glEndList':
-            print r'    glretrace::insideList = false;';
+            print r'    glretrace::insideList = false;'
 
-        if profileDraw:
-            print r'    if (!glretrace::insideList && retrace::profileGPU) {'
-            print r'        glretrace::beginProfileGPU(call);'
+        if profileDraw and function.name != 'glEnd':
+            print r'    if (!glretrace::insideList && !glretrace::insideGlBeginEnd && retrace::profiling) {'
+            print r'        glretrace::beginProfile(call);'
             print r'    }'
 
         if function.name == 'glCreateShaderProgramv':
@@ -340,15 +346,16 @@ class GlRetracer(Retracer):
         else:
             Retracer.invokeFunction(self, function)
 
-        if profileDraw:
-            print r'    if (!glretrace::insideList && retrace::profileGPU) {'
-            print r'        glretrace::endProfileGPU(call);'
+        if function.name == "glBegin":
+            print '    glretrace::insideGlBeginEnd = true;'
+
+        if profileDraw or function.name == 'glEnd':
+            print r'    if (!glretrace::insideList && !glretrace::insideGlBeginEnd && retrace::profiling) {'
+            print r'        glretrace::endProfile(call);'
             print r'    }'
 
         # Error checking
-        if function.name == "glBegin":
-            print '    glretrace::insideGlBeginEnd = true;'
-        elif function.name.startswith('gl'):
+        if function.name.startswith('gl'):
             # glGetError is not allowed inside glBegin/glEnd
             print '    if (retrace::debug && !glretrace::insideGlBeginEnd) {'
             print '        glretrace::checkGlError(call);'