]> git.cworth.org Git - apitrace-tests/commitdiff
Automate gles tests.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Fri, 25 Nov 2011 08:58:42 +0000 (08:58 +0000)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Fri, 25 Nov 2011 08:59:10 +0000 (08:59 +0000)
apps/egl/gl/CMakeLists.txt
apps/egl/gles1/CMakeLists.txt
apps/egl/gles1/clear.c
apps/egl/gles1/clear.ref.txt [new file with mode: 0644]
apps/egl/gles1/tri.c
apps/egl/gles1/tri.ref.txt [new file with mode: 0644]
apps/egl/gles2/CMakeLists.txt
apps/egl/gles2/tri.c
apps/egl/gles2/tri.ref.txt [new file with mode: 0644]
driver.py

index 24eec7598f9318e886a69a3de84929de6a3fb0ac..d93a96772ad84b8fa5280b417dc239d1cfff764b 100644 (file)
@@ -18,8 +18,8 @@ foreach (target ${targets})
     if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${target}.ref.txt)
         add_app_test(
             NAME ${api}_${target}
-           TARGET ${api}_${target}
-           REF ${target}.ref.txt
+            TARGET ${api}_${target}
+            REF ${target}.ref.txt
         )
     endif ()
 endforeach (target)
index 96e300da36fa1debeddf259952f75c5a7f078205..36937ab3177966e40f8751032998d3b92839c9fb 100644 (file)
@@ -15,4 +15,13 @@ foreach (target ${targets})
     add_executable (${api}_${target} ${target}.c)
     set_target_properties (${api}_${target} PROPERTIES OUTPUT_NAME ${target})
     target_link_libraries (${api}_${target} eglut ${GLESV1_LIBRARIES})
+
+    
+    if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${target}.ref.txt)
+        add_app_test(
+            NAME ${api}_${target}
+            TARGET ${api}_${target}
+            REF ${target}.ref.txt
+        )
+    endif ()
 endforeach (target)
index 9fe1b5291e1905fd6fe572063ed707d59ce45a81..ce1ba46f84d278ed089a86ddeca4a6ef7312d5bb 100644 (file)
@@ -43,10 +43,18 @@ typedef void (GL_APIENTRY *type_Clear)(GLbitfield mask);
 static type_ClearColor fn_ClearColor;
 static type_Clear fn_Clear;
 
+static void
+idle(void)
+{
+   exit(0);
+}
+
 static void
 draw(void)
 {
    fn_Clear(GL_COLOR_BUFFER_BIT);
+
+   eglutIdleFunc(idle);
 }
 
 static void *
diff --git a/apps/egl/gles1/clear.ref.txt b/apps/egl/gles1/clear.ref.txt
new file mode 100644 (file)
index 0000000..e69de29
index 01ad9bd37e468cc318a2f04d305558d79ed09e77..8b68c77652374eaf54921010d663f32487f10d4f 100644 (file)
@@ -31,6 +31,7 @@
 #include <assert.h>
 #include <math.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <GLES/gl.h>  /* use OpenGL ES 1.x */
 #include <GLES/glext.h>
 #include <EGL/egl.h>
 static GLfloat view_rotx = 0.0, view_roty = 0.0, view_rotz = 0.0;
 
 
+static void
+idle(void)
+{
+   exit(0);
+}
+
+
 static void
 draw(void)
 {
@@ -109,6 +117,8 @@ draw(void)
    }
 
    glPopMatrix();
+
+   eglutIdleFunc(idle);
 }
 
 
diff --git a/apps/egl/gles1/tri.ref.txt b/apps/egl/gles1/tri.ref.txt
new file mode 100644 (file)
index 0000000..67e90eb
--- /dev/null
@@ -0,0 +1,40 @@
+eglBindAPI(api = EGL_OPENGL_ES_API) = EGL_TRUE
+glClearColor(red = 0.4, green = 0.4, blue = 0.4, alpha = 0)
+glViewport(x = 0, y = 0, width = 300, height = 300)
+glMatrixMode(mode = GL_PROJECTION)
+glLoadIdentity()
+glFrustumf(left = -1, right = 1, bottom = -1, top = 1, zNear = 5, zFar = 60)
+glMatrixMode(mode = GL_MODELVIEW)
+glLoadIdentity()
+glTranslatef(x = 0, y = 0, z = -10)
+glViewport(x = 0, y = 0, width = 300, height = 300)
+glMatrixMode(mode = GL_PROJECTION)
+glLoadIdentity()
+glFrustumf(left = -1, right = 1, bottom = -1, top = 1, zNear = 5, zFar = 60)
+glMatrixMode(mode = GL_MODELVIEW)
+glLoadIdentity()
+glTranslatef(x = 0, y = 0, z = -10)
+glViewport(x = 0, y = 0, width = 300, height = 300)
+glMatrixMode(mode = GL_PROJECTION)
+glLoadIdentity()
+glFrustumf(left = -1, right = 1, bottom = -1, top = 1, zNear = 5, zFar = 60)
+glMatrixMode(mode = GL_MODELVIEW)
+glLoadIdentity()
+glTranslatef(x = 0, y = 0, z = -10)
+glClear(mask = GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT)
+glPushMatrix()
+glRotatef(angle = 0, x = 1, y = 0, z = 0)
+glRotatef(angle = 0, x = 0, y = 1, z = 0)
+glRotatef(angle = 0, x = 0, y = 0, z = 1)
+glEnableClientState(array = GL_VERTEX_ARRAY)
+glEnableClientState(array = GL_COLOR_ARRAY)
+glColorPointer(size = 4, type = GL_FLOAT, stride = 0, pointer = blob(48))
+glVertexPointer(size = 2, type = GL_FLOAT, stride = 0, pointer = blob(24))
+glDrawArrays(mode = GL_TRIANGLES, first = 0, count = 3)
+glPointSizex(size = 1015792)
+glColorPointer(size = 4, type = GL_FLOAT, stride = 0, pointer = blob(48))
+glVertexPointer(size = 2, type = GL_FLOAT, stride = 0, pointer = blob(24))
+glDrawArrays(mode = GL_POINTS, first = 0, count = 3)
+glDisableClientState(array = GL_VERTEX_ARRAY)
+glDisableClientState(array = GL_COLOR_ARRAY)
+glPopMatrix()
index a45efdc2bd37fc3645a8e244a489be3435c92f36..6921d135bb4155f60322f1c21b66e8a7a0bc0062 100644 (file)
@@ -12,8 +12,16 @@ set (targets
 
 if (X11_FOUND)
     foreach (target ${targets})
-       add_executable (${api}_${target} ${target}.c)
-       set_target_properties (${api}_${target} PROPERTIES OUTPUT_NAME ${target})
-       target_link_libraries (${api}_${target} ${EGL_LIBRARIES} ${GLESV2_LIBRARIES})
+        add_executable (${api}_${target} ${target}.c)
+        set_target_properties (${api}_${target} PROPERTIES OUTPUT_NAME ${target})
+        target_link_libraries (${api}_${target} ${EGL_LIBRARIES} ${GLESV2_LIBRARIES})
+
+        if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${target}.ref.txt)
+            add_app_test(
+                NAME ${api}_${target}
+                TARGET ${api}_${target}
+                REF ${target}.ref.txt
+            )
+        endif ()
     endforeach (target)
 endif ()
index 8a2bf3e0ea1c14a669abe1aa40eda84a2c6761cf..d09824ba0515ba4340ddcd25cecdde63b0775891 100644 (file)
@@ -413,6 +413,7 @@ event_loop(Display *dpy, Window win,
       if (redraw) {
          draw();
          eglSwapBuffers(egl_dpy, egl_surf);
+        exit(0);
       }
    }
 }
diff --git a/apps/egl/gles2/tri.ref.txt b/apps/egl/gles2/tri.ref.txt
new file mode 100644 (file)
index 0000000..4894610
--- /dev/null
@@ -0,0 +1,48 @@
+eglBindAPI(api = EGL_OPENGL_ES_API) = EGL_TRUE
+glClearColor(red = 0.4, green = 0.4, blue = 0.4, alpha = 0)
+glCreateShader(type = GL_FRAGMENT_SHADER) = 1
+glShaderSource(shader = 1, count = 1, string = &"varying vec4 v_color;
+void main() {
+   gl_FragColor = v_color;
+}
+", length = NULL)
+glCompileShader(shader = 1)
+glGetShaderiv(shader = 1, pname = GL_COMPILE_STATUS, params = &1)
+glCreateShader(type = GL_VERTEX_SHADER) = 2
+glShaderSource(shader = 2, count = 1, string = &"uniform mat4 modelviewProjection;
+attribute vec4 pos;
+attribute vec4 color;
+varying vec4 v_color;
+void main() {
+   gl_Position = modelviewProjection * pos;
+   v_color = color;
+}
+", length = NULL)
+glCompileShader(shader = 2)
+glGetShaderiv(shader = 2, pname = GL_COMPILE_STATUS, params = &1)
+glCreateProgram() = 3
+glAttachShader(program = 3, shader = 1)
+glAttachShader(program = 3, shader = 2)
+glBindAttribLocation(program = 3, index = 1, name = "pos")
+glBindAttribLocation(program = 3, index = 0, name = "color")
+glLinkProgram(program = 3)
+glGetProgramiv(program = 3, pname = GL_LINK_STATUS, params = &1)
+glUseProgram(program = 3)
+glBindAttribLocation(program = 3, index = 0, name = "pos")
+glBindAttribLocation(program = 3, index = 1, name = "color")
+glBindAttribLocation(program = 3, index = 0, name = "pos")
+glBindAttribLocation(program = 3, index = 1, name = "color")
+glLinkProgram(program = 3)
+glGetUniformLocation(program = 3, name = "modelviewProjection") = 0
+glViewport(x = 0, y = 0, width = 300, height = 300)
+glViewport(x = 0, y = 0, width = 300, height = 300)
+glViewport(x = 0, y = 0, width = 300, height = 300)
+glUniformMatrix4fv(location = 0, count = 1, transpose = false, value = {0.5, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 1})
+glClear(mask = GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT)
+glEnableVertexAttribArray(index = 0)
+glEnableVertexAttribArray(index = 1)
+glVertexAttribPointer(index = 0, size = 2, type = GL_FLOAT, normalized = false, stride = 0, pointer = blob(24))
+glVertexAttribPointer(index = 1, size = 3, type = GL_FLOAT, normalized = false, stride = 0, pointer = blob(36))
+glDrawArrays(mode = GL_TRIANGLES, first = 0, count = 3)
+glDisableVertexAttribArray(index = 0)
+glDisableVertexAttribArray(index = 1)
index 8c7d1268bb61e9e2fc2a1b5fe82d14f1f5209979..c26ea8ad4f2a318493dd1ae9a0081037134c88ca 100755 (executable)
--- a/driver.py
+++ b/driver.py
@@ -87,6 +87,13 @@ class TestCase:
         if p.returncode:
             self.skip('application returned code %i' % p.returncode)
 
+    api_map = {
+        'gl': 'gl',
+        'egl': 'egl',
+        'gles1': 'egl',
+        'gles2': 'egl',
+    }
+
     def trace(self):
         if self.trace_file is None:
             self.trace_file = os.path.abspath(os.path.join(self.results, self.name + '.trace'))
@@ -111,7 +118,7 @@ class TestCase:
             apitrace = _get_build_program('apitrace')
             cmd = [
                 apitrace, 'trace', 
-                '--api', self.api,
+                '--api', self.api_map[self.api],
                 '--output', self.trace_file,
                 '--'
             ] + cmd
@@ -145,8 +152,8 @@ class TestCase:
             ref_line = ref.readline().rstrip()
         for line in p.stdout:
             line = line.rstrip()
+           print line
             mo = self.call_re.match(line)
-            assert mo
             if mo:
                 call_no = int(mo.group(1))
                 function_name = mo.group(2)
@@ -155,13 +162,15 @@ class TestCase:
                 if function_name in ('glFlush', 'glFinish'):
                     flushes += 1
                 src_line = line[mo.start(2):]
-                if ref_line:
-                    if src_line == ref_line:
-                        sys.stdout.write(src_line + '\n')
-                        ref_line = ref.readline().rstrip()
-                        src_lines = []
-                    else:
-                        src_lines.append(src_line)
+            else:
+                src_line = line
+            if ref_line:
+                if src_line == ref_line:
+                    sys.stdout.write(src_line + '\n')
+                    ref_line = ref.readline().rstrip()
+                    src_lines = []
+                else:
+                    src_lines.append(src_line)
 
         p.wait()
         if p.returncode != 0: