]> git.cworth.org Git - apitrace/blobdiff - retrace/glretrace.py
Remove the last helper for the old incomplete attrib_list support.
[apitrace] / retrace / glretrace.py
index 6c73e697d9128f3947b50d5be712f30916dbd7bb..44b2f9d941438e5be45f343ef773348a72e726b9 100644 (file)
@@ -84,6 +84,8 @@ class GlRetracer(Retracer):
         "glMultiDrawArrays",
         "glMultiDrawArraysEXT",
         "glMultiModeDrawArraysIBM",
+        'glMultiDrawArraysIndirect',
+        'glMultiDrawArraysIndirectAMD',
     ])
 
     draw_elements_function_names = set([
@@ -103,11 +105,17 @@ class GlRetracer(Retracer):
         "glMultiDrawElementsBaseVertex",
         "glMultiDrawElementsEXT",
         "glMultiModeDrawElementsIBM",
+        'glMultiDrawElementsIndirect',
+        'glMultiDrawElementsIndirectAMD',
     ])
 
     draw_indirect_function_names = set([
         "glDrawArraysIndirect",
         "glDrawElementsIndirect",
+        'glMultiDrawArraysIndirect',
+        'glMultiDrawArraysIndirectAMD',
+        'glMultiDrawElementsIndirect',
+        'glMultiDrawElementsIndirectAMD',
     ])
 
     misc_draw_function_names = set([
@@ -130,6 +138,9 @@ class GlRetracer(Retracer):
     # object.  See also the ARB_pixel_buffer_object specification.
     pack_function_names = set([
         'glGetCompressedTexImage',
+        'glGetCompressedTexImageARB',
+        'glGetCompressedTextureImageEXT',
+        'glGetCompressedMultiTexImageEXT',
         'glGetConvolutionFilter',
         'glGetHistogram',
         'glGetMinmax',
@@ -139,6 +150,8 @@ class GlRetracer(Retracer):
         'glGetPolygonStipple',
         'glGetSeparableFilter',
         'glGetTexImage',
+        'glGetTextureImageEXT',
+        'glGetMultiTexImageEXT',
         'glReadPixels',
         'glGetnCompressedTexImageARB',
         'glGetnConvolutionFilterARB',
@@ -250,7 +263,7 @@ class GlRetracer(Retracer):
             print '    glretrace::insideGlBeginEnd = false;'
 
         if function.name.startswith('gl') and not function.name.startswith('glX'):
-            print r'    if (retrace::debug && !glretrace::currentContext) {'
+            print r'    if (retrace::debug && !glretrace::getCurrentContext()) {'
             print r'        retrace::warning(call) << "no current context\n";'
             print r'    }'
 
@@ -299,8 +312,9 @@ class GlRetracer(Retracer):
         )
 
         if function.name in ('glUseProgram', 'glUseProgramObjectARB'):
-            print r'    if (glretrace::currentContext) {'
-            print r'        glretrace::currentContext->activeProgram = call.arg(0).toUInt();'
+            print r'    glretrace::Context *currentContext = glretrace::getCurrentContext();'
+            print r'    if (currentContext) {'
+            print r'        currentContext->activeProgram = call.arg(0).toUInt();'
             print r'    }'
 
         # Only profile if not inside a list as the queries get inserted into list
@@ -362,7 +376,7 @@ class GlRetracer(Retracer):
         # Error checking
         if function.name.startswith('gl'):
             # glGetError is not allowed inside glBegin/glEnd
-            print '    if (retrace::debug && !glretrace::insideGlBeginEnd) {'
+            print '    if (retrace::debug && !glretrace::insideGlBeginEnd && glretrace::getCurrentContext()) {'
             print '        glretrace::checkGlError(call);'
             if function.name in ('glProgramStringARB', 'glProgramStringNV'):
                 print r'        GLint error_position = -1;'
@@ -477,14 +491,20 @@ class GlRetracer(Retracer):
            and 'program' not in function.argNames():
             # Determine the active program for uniforms swizzling
             print '    GLint program = -1;'
-            print '    GLint pipeline = 0;'
-            print '    if (_pipelineHasBeenBound) {'
-            print '        glGetIntegerv(GL_PROGRAM_PIPELINE_BINDING, &pipeline);'
-            print '    }'
-            print '    if (pipeline) {'
-            print '        glGetProgramPipelineiv(pipeline, GL_ACTIVE_PROGRAM, &program);'
+            print '    if (glretrace::insideList) {'
+            print '        // glUseProgram & glUseProgramObjectARB are display-list-able'
+            print r'    glretrace::Context *currentContext = glretrace::getCurrentContext();'
+            print '        program = _program_map[currentContext->activeProgram];'
             print '    } else {'
-            print '        glGetIntegerv(GL_CURRENT_PROGRAM, &program);'
+            print '        GLint pipeline = 0;'
+            print '        if (_pipelineHasBeenBound) {'
+            print '            glGetIntegerv(GL_PROGRAM_PIPELINE_BINDING, &pipeline);'
+            print '        }'
+            print '        if (pipeline) {'
+            print '            glGetProgramPipelineiv(pipeline, GL_ACTIVE_PROGRAM, &program);'
+            print '        } else {'
+            print '            glGetIntegerv(GL_CURRENT_PROGRAM, &program);'
+            print '        }'
             print '    }'
             print
 
@@ -521,7 +541,8 @@ if __name__ == '__main__':
 
 static bool _pipelineHasBeenBound = false;
 '''
-    api = glapi.glapi
-    api.addApi(glesapi.glesapi)
+    api = stdapi.API()
+    api.addModule(glapi.glapi)
+    api.addModule(glesapi.glesapi)
     retracer = GlRetracer()
     retracer.retraceApi(api)