These are changes since version 1, again split out for easier review.

 - use glClearDepthf for GL ES instead of glClearDepth, which doesn't
   exist in GLES
 - Never attempt to disable GL_PROGRAM_POINT_SIZE in OpenGL ES (which
   causes failures, and I can't seem to find any evidence of it's
   existence in ES)
 - Don't call glMatrixMode in GLES (which I also can't find references
   to in the spec).
 - disable clip panes based on GL_MAX_CLIP_PLANES, rather than assuming
   the number of planes. This fixes tests on i965/gen4 hardware
 - Fix patching of tessellation shaders for ES 3.2 and with
   OES_tessellation_shader
 - Move check for argc < 2 before OpenGL calls
 - Set num_uniform_blocks to 0 when tearing down UBOs
---

This patch in new in v2

 tests/shaders/shader_runner.c | 66 +++++++++++++++++++++---------------
 1 file changed, 40 insertions(+), 26 deletions(-)

diff --git a/tests/shaders/shader_runner.c b/tests/shaders/shader_runner.c
index 50bda7c..6323c64 100644
--- a/tests/shaders/shader_runner.c
+++ b/tests/shaders/shader_runner.c
@@ -2806,6 +2806,7 @@ teardown_ubos(void)
        glDeleteBuffers(num_uniform_blocks, uniform_block_bos);
        free(uniform_block_bos);
        uniform_block_bos = NULL;
+       num_uniform_blocks = 0;
 }
 
 static enum piglit_result
@@ -3589,6 +3590,10 @@ piglit_init(int argc, char **argv)
        float default_piglit_tolerance[4];
 
        report_subtests = piglit_strip_arg(&argc, argv, "-report-subtests");
+       if (argc < 2) {
+               printf("usage: shader_runner <test.shader_test>\n");
+               exit(1);
+       }
 
        memcpy(default_piglit_tolerance, piglit_tolerance,
               sizeof(piglit_tolerance));
@@ -3621,7 +3626,6 @@ piglit_init(int argc, char **argv)
            piglit_is_extension_supported("GL_EXT_geometry_shader4"))
                glGetIntegerv(GL_MAX_VARYING_COMPONENTS,
                              &gl_max_varying_components);
-       glGetIntegerv(GL_MAX_CLIP_PLANES, &gl_max_clip_planes);
 #else
        glGetIntegerv(GL_MAX_FRAGMENT_UNIFORM_VECTORS,
                      &gl_max_fragment_uniform_components);
@@ -3632,8 +3636,9 @@ piglit_init(int argc, char **argv)
        gl_max_fragment_uniform_components *= 4;
        gl_max_vertex_uniform_components *= 4;
        gl_max_varying_components *= 4;
-       gl_max_clip_planes = 0;
 #endif
+       glGetIntegerv(GL_MAX_CLIP_PLANES, &gl_max_clip_planes);
+
        if (gl_version.num >= 20 ||
            piglit_is_extension_supported("GL_ARB_vertex_shader"))
                glGetIntegerv(GL_MAX_VERTEX_ATTRIBS,
@@ -3641,16 +3646,11 @@ piglit_init(int argc, char **argv)
        else
                gl_max_vertex_attribs = 16;
 
-       if (argc < 2) {
-               printf("usage: shader_runner <test.shader_test>\n");
-               exit(1);
-       }
-
        render_width = piglit_width;
        render_height = piglit_height;
 
        /* Automatic mode can run multiple tests per session. */
-       if (piglit_automatic) {
+       if (report_subtests) {
                char testname[4096], *ext;
                int i, j;
 
@@ -3705,33 +3705,29 @@ piglit_init(int argc, char **argv)
 
                        /* Clear GL states to defaults. */
                        glClearColor(0, 0, 0, 0);
+# if PIGLIT_USE_OPENGL
                        glClearDepth(1);
+# else
+                       glClearDepthf(1.0);
+# endif
                        glBindFramebuffer(GL_FRAMEBUFFER, piglit_winsys_fbo);
                        glActiveTexture(GL_TEXTURE0);
                        glUseProgram(0);
                        glDisable(GL_DEPTH_TEST);
                        glBindBuffer(GL_ARRAY_BUFFER, 0);
-                       glDisable(GL_CLIP_PLANE0);
-                       glDisable(GL_CLIP_PLANE1);
-                       glDisable(GL_CLIP_PLANE2);
-                       glDisable(GL_CLIP_PLANE3);
-                       glDisable(GL_CLIP_PLANE4);
-                       glDisable(GL_CLIP_PLANE5);
-                       if (es || gl_version.num >= 30) {
-                               glDisable(GL_CLIP_PLANE0+6);
-                               glDisable(GL_CLIP_PLANE0+7);
+
+                       for (int k = 0; k < gl_max_clip_planes; k++) {
+                               glDisable(GL_CLIP_PLANE0 + k);
                        }
 
-                       if (es)
-                               glEnable(GL_PROGRAM_POINT_SIZE);
-                       else if (gl_version.num >= 20 ||
-                                
piglit_is_extension_supported("GL_ARB_vertex_program"))
+                       if (!(es) && (gl_version.num >= 20 ||
+                            
piglit_is_extension_supported("GL_ARB_vertex_program")))
                                glDisable(GL_PROGRAM_POINT_SIZE);
 
                        for (int i = 0; i < 16; i++)
                                glDisableVertexAttribArray(i);
 
-                       if (!piglit_is_core_profile) {
+                       if (!piglit_is_core_profile && !es) {
                                glMatrixMode(GL_PROJECTION);
                                glLoadIdentity();
                                glMatrixMode(GL_MODELVIEW);
@@ -3757,15 +3753,33 @@ piglit_init(int argc, char **argv)
                        if 
(piglit_is_extension_supported("GL_EXT_provoking_vertex"))
                                
glProvokingVertexEXT(GL_LAST_VERTEX_CONVENTION_EXT);
 
-                       if (gl_version.num >= (gl_version.es ? 32 : 40) ||
-                           piglit_is_extension_supported(gl_version.es ?
-                                                         
"GL_OES_tessellation_shader" :
-                                                         
"GL_ARB_tessellation_shader")) {
+# if PIGLIT_USE_OPENGL
+                       if (gl_version.num >= 40 ||
+                           
piglit_is_extension_supported("GL_ARB_tessellation_shader")) {
                                static float ones[] = {1, 1, 1, 1};
                                glPatchParameteri(GL_PATCH_VERTICES, 3);
                                
glPatchParameterfv(GL_PATCH_DEFAULT_OUTER_LEVEL, ones);
                                
glPatchParameterfv(GL_PATCH_DEFAULT_INNER_LEVEL, ones);
                        }
+# else
+                       /* Ideally one would use the following code:
+                        *
+                        * if (gl_version.num >= 32) {
+                        *         glPatchParameteri(GL_PATCH_VERTICES, 3);
+                        * }
+                        *
+                        * however, that doesn't work with mesa because those
+                        * symbols apparently need to be exported, but that
+                        * breaks non-gles builds.
+                        *
+                        * It seems rather unlikely that an implementation
+                        * would have GLES 3.2 support but not
+                        * OES_tessellation_shader.
+                        */
+                       if 
(piglit_is_extension_supported("GL_OES_tessellation_shader")) {
+                               glPatchParameteriOES(GL_PATCH_VERTICES_OES, 3);
+                       }
+# endif
 
                        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
-- 
git-series 0.8.10
_______________________________________________
Piglit mailing list
Piglit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to