I was going to have to copy/paste the same code for varying components.
---
 tests/shaders/shader_runner.c | 51 ++++++++++++++++++++++++-------------------
 1 file changed, 29 insertions(+), 22 deletions(-)

diff --git a/tests/shaders/shader_runner.c b/tests/shaders/shader_runner.c
index 8da0984..4f0bcba 100644
--- a/tests/shaders/shader_runner.c
+++ b/tests/shaders/shader_runner.c
@@ -552,6 +552,23 @@ void
 process_requirement(const char *line)
 {
        char buffer[4096];
+       static const struct {
+               const char *name;
+               int *val;
+               const char *desc;
+       } getint_limits[] = {
+               {
+                       "GL_MAX_FRAGMENT_UNIFORM_COMPONENTS",
+                       &gl_max_fragment_uniform_components,
+                       "fragment uniform components",
+               },
+               {
+                       "GL_MAX_VERTEX_UNIFORM_COMPONENTS",
+                       &gl_max_vertex_uniform_components,
+                       "vertex uniform components",
+               },
+       };
+       unsigned i;
 
        /* There are four types of requirements that a test can currently
         * have:
@@ -566,41 +583,31 @@ process_requirement(const char *line)
         * can also require that a particular extension not be supported by
         * prepending ! to the extension name.
         */
-       if (string_match("GL_MAX_FRAGMENT_UNIFORM_COMPONENTS", line)) {
+       for (i = 0; i < ARRAY_SIZE(getint_limits); i++) {
                enum comparison cmp;
                int maxcomp;
 
-               line = eat_whitespace(line + 34);
-
-               line = process_comparison(line, &cmp);
-
-               maxcomp = atoi(line);
-               if (!compare(maxcomp, gl_max_fragment_uniform_components, cmp)) 
{
-                       printf("Test requires max fragment uniform components 
%s %i.  "
-                              "The driver supports %i.\n",
-                              comparison_string(cmp),
-                              maxcomp,
-                              gl_max_fragment_uniform_components);
-                       piglit_report_result(PIGLIT_SKIP);
-               }
-       } else if (string_match("GL_MAX_VERTEX_UNIFORM_COMPONENTS", line)) {
-               enum comparison cmp;
-               int maxcomp;
+               if (!string_match(getint_limits[i].name, line))
+                       continue;
 
-               line = eat_whitespace(line + 32);
+               line = eat_whitespace(line + strlen(getint_limits[i].name));
 
                line = process_comparison(line, &cmp);
 
                maxcomp = atoi(line);
-               if (!compare(maxcomp, gl_max_vertex_uniform_components, cmp)) {
-                       printf("Test requires max vertex uniform components %s 
%i.  "
+               if (!compare(maxcomp, *getint_limits[i].val, cmp)) {
+                       printf("Test requires %s %s %i.  "
                               "The driver supports %i.\n",
+                              getint_limits[i].desc,
                               comparison_string(cmp),
                               maxcomp,
-                              gl_max_vertex_uniform_components);
+                              *getint_limits[i].val);
                        piglit_report_result(PIGLIT_SKIP);
                }
-       } else if (string_match("GL_", line)) {
+               return;
+       }
+
+       if (string_match("GL_", line)) {
                strcpy_to_space(buffer, line);
                piglit_require_extension(buffer);
        } else if (string_match("!GL_", line)) {
-- 
2.1.3

_______________________________________________
Piglit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to