From ce8d26ecebe771ab246075f5782dd440c56dcea8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Fri, 25 Nov 2011 08:58:42 +0000 Subject: [PATCH] Automate gles tests. --- apps/egl/gl/CMakeLists.txt | 4 +-- apps/egl/gles1/CMakeLists.txt | 9 +++++++ apps/egl/gles1/clear.c | 8 ++++++ apps/egl/gles1/clear.ref.txt | 0 apps/egl/gles1/tri.c | 10 ++++++++ apps/egl/gles1/tri.ref.txt | 40 +++++++++++++++++++++++++++++ apps/egl/gles2/CMakeLists.txt | 14 +++++++--- apps/egl/gles2/tri.c | 1 + apps/egl/gles2/tri.ref.txt | 48 +++++++++++++++++++++++++++++++++++ driver.py | 27 +++++++++++++------- 10 files changed, 147 insertions(+), 14 deletions(-) create mode 100644 apps/egl/gles1/clear.ref.txt create mode 100644 apps/egl/gles1/tri.ref.txt create mode 100644 apps/egl/gles2/tri.ref.txt diff --git a/apps/egl/gl/CMakeLists.txt b/apps/egl/gl/CMakeLists.txt index 24eec75..d93a967 100644 --- a/apps/egl/gl/CMakeLists.txt +++ b/apps/egl/gl/CMakeLists.txt @@ -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) diff --git a/apps/egl/gles1/CMakeLists.txt b/apps/egl/gles1/CMakeLists.txt index 96e300d..36937ab 100644 --- a/apps/egl/gles1/CMakeLists.txt +++ b/apps/egl/gles1/CMakeLists.txt @@ -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) diff --git a/apps/egl/gles1/clear.c b/apps/egl/gles1/clear.c index 9fe1b52..ce1ba46 100644 --- a/apps/egl/gles1/clear.c +++ b/apps/egl/gles1/clear.c @@ -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 index 0000000..e69de29 diff --git a/apps/egl/gles1/tri.c b/apps/egl/gles1/tri.c index 01ad9bd..8b68c77 100644 --- a/apps/egl/gles1/tri.c +++ b/apps/egl/gles1/tri.c @@ -31,6 +31,7 @@ #include #include #include +#include #include /* use OpenGL ES 1.x */ #include #include @@ -45,6 +46,13 @@ 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 index 0000000..67e90eb --- /dev/null +++ b/apps/egl/gles1/tri.ref.txt @@ -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() diff --git a/apps/egl/gles2/CMakeLists.txt b/apps/egl/gles2/CMakeLists.txt index a45efdc..6921d13 100644 --- a/apps/egl/gles2/CMakeLists.txt +++ b/apps/egl/gles2/CMakeLists.txt @@ -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 () diff --git a/apps/egl/gles2/tri.c b/apps/egl/gles2/tri.c index 8a2bf3e..d09824b 100644 --- a/apps/egl/gles2/tri.c +++ b/apps/egl/gles2/tri.c @@ -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 index 0000000..4894610 --- /dev/null +++ b/apps/egl/gles2/tri.ref.txt @@ -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) diff --git a/driver.py b/driver.py index 8c7d126..c26ea8a 100755 --- 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: -- 2.43.0