]> git.cworth.org Git - apitrace-tests/blobdiff - app_driver.py
Use 'apitrace retrace'
[apitrace-tests] / app_driver.py
index a44badea1566d4248e80ed28374359dd22710fe7..2a935d064af68fb481a70435def33975f76effbc 100755 (executable)
@@ -137,7 +137,7 @@ class TraceChecker:
 
 
 
-class TestCase:
+class AppDriver(Driver):
 
     cmd = None
     cwd = None
@@ -155,6 +155,7 @@ class TestCase:
     threshold_precision = 12.0
 
     def __init__(self):
+        Driver.__init__(self)
         self.stateCache = {}
     
     def runApp(self):
@@ -166,14 +167,34 @@ class TestCase:
 
         p = popen(self.cmd, cwd=self.cwd)
         p.wait()
-        if p.returncode:
+        if p.returncode != 0:
             skip('application returned code %i' % p.returncode)
 
-    api_map = {
+    api_trace_map = {
         'gl': 'gl',
         'egl_gl': 'egl',
         'egl_gles1': 'egl',
         'egl_gles2': 'egl',
+        'd3d7': 'd3d7',
+        'd3d8': 'd3d8',
+        'd3d9': 'd3d9',
+        'd3d10': 'd3d10',
+        'd3d10_1': 'd3d10_1',
+        'd3d11': 'd3d11',
+        'd3d11_1': 'd3d11',
+    }
+
+    api_retrace_map = {
+        'gl': 'glretrace',
+        'egl_gl': 'eglretrace',
+        'egl_gles1': 'eglretrace',
+        'egl_gles2': 'eglretrace',
+        #'d3d8': 'd3dretrace',
+        'd3d9': 'd3dretrace',
+        'd3d10': 'd3dretrace',
+        'd3d10_1': 'd3dretrace',
+        'd3d11': 'd3dretrace',
+        'd3d11_1': 'd3dretrace',
     }
 
     def traceApp(self):
@@ -201,7 +222,7 @@ class TestCase:
         
         cmd = [
             options.apitrace, 'trace', 
-            '--api', self.api_map[self.api],
+            '--api', self.api_trace_map[self.api],
             '--output', self.trace_file,
             '--'
         ] + cmd
@@ -210,6 +231,8 @@ class TestCase:
 
         p = popen(cmd, env=env, cwd=self.cwd)
         p.wait()
+        if p.returncode != 0:
+            fail('`apitrace trace` returned code %i' % p.returncode)
 
         if not os.path.exists(self.trace_file):
             fail('no trace file generated\n')
@@ -226,6 +249,9 @@ class TestCase:
 
         self.doubleBuffer = checker.doubleBuffer
 
+        if self.api not in self.api_retrace_map:
+            return
+
         for callNo, refImageFileName in checker.images:
             self.checkImage(callNo, refImageFileName)
         for callNo, refStateFileName in checker.states:
@@ -292,6 +318,9 @@ class TestCase:
         open(filename, 'wt').write(s)
 
     def retrace(self):
+        if self.api not in self.api_retrace_map:
+            return
+
         p = self._retrace()
         p.wait()
         if p.returncode != 0:
@@ -351,19 +380,9 @@ class TestCase:
         except KeyError:
             return
 
-        # On NVIDIA drivers glGetIntegerv(GL_INDEX_WRITEMASK) returns -1
+        # On NVIDIA drivers glGetIntegerv(GL_INDEX_WRITEMASK) returns 255
         self.replaceState(parameters, 'GL_INDEX_WRITEMASK', 255, -1)
 
-        # On Gallium 
-        if 'Gallium' in parameters['GL_RENDERER'].split():
-            # Gallium drivers have wrong defaults for draw/read buffer state
-            self.replaceState(parameters, 'GL_DRAW_BUFFER', 'GL_BACK_LEFT', 'GL_BACK')
-            self.replaceState(parameters, 'GL_DRAW_BUFFER0', 'GL_BACK_LEFT', 'GL_BACK')
-            self.replaceState(parameters, 'GL_READ_BUFFER', 'GL_BACK_LEFT', 'GL_BACK')
-            self.replaceState(parameters, 'GL_DRAW_BUFFER', 'GL_FRONT_LEFT', 'GL_FRONT')
-            self.replaceState(parameters, 'GL_DRAW_BUFFER0', 'GL_FRONT_LEFT', 'GL_FRONT')
-            self.replaceState(parameters, 'GL_READ_BUFFER', 'GL_FRONT_LEFT', 'GL_FRONT')
-
     def adjustRefState(self, state):
         # Do some adjustments on reference state to eliminate failures from
         # bugs/issues outside of apitrace
@@ -394,8 +413,9 @@ class TestCase:
             pass
 
     def _retrace(self, args = None, stdout=subprocess.PIPE):
-        retrace = self.api_map[self.api] + 'retrace'
-        cmd = [get_build_program(retrace)]
+        retrace = self.api_retrace_map[self.api]
+        #cmd = [get_build_program(retrace)]
+        cmd = [options.apitrace, 'retrace']
         if self.doubleBuffer:
             cmd += ['-db']
         else:
@@ -405,19 +425,8 @@ class TestCase:
         cmd += [self.trace_file]
         return popen(cmd, stdout=stdout)
 
-    def run(self):
-        self.runApp()
-        self.traceApp()
-        self.checkTrace()
-        self.retrace()
-
-        pass_()
-
-
-class AppMain(Main):
-
     def createOptParser(self):
-        optparser = Main.createOptParser(self)
+        optparser = Driver.createOptParser(self)
 
         optparser.add_option(
             '-a', '--api', metavar='API',
@@ -434,7 +443,7 @@ class AppMain(Main):
 
         return optparser
 
-    def main(self):
+    def run(self):
         global options
 
         (options, args) = self.parseOptions()
@@ -442,17 +451,20 @@ class AppMain(Main):
         if not os.path.exists(options.results):
             os.makedirs(options.results)
 
-        test = TestCase()
-        test.verbose = options.verbose
+        self.verbose = options.verbose
 
-        test.cmd = args
-        test.cwd = options.cwd
-        test.api = options.api
-        test.ref_dump = options.ref_dump
-        test.results = options.results
+        self.cmd = args
+        self.cwd = options.cwd
+        self.api = options.api
+        self.ref_dump = options.ref_dump
+        self.results = options.results
 
-        test.run()
+        self.runApp()
+        self.traceApp()
+        self.checkTrace()
+        self.retrace()
 
+        pass_()
 
 if __name__ == '__main__':
-    AppMain().main()
+    AppDriver().run()