Signed-off-by: Jordan Justen <jordan.l.jus...@intel.com>
---
 tests/shaders/shader_runner.c | 75 ++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 71 insertions(+), 4 deletions(-)

diff --git a/tests/shaders/shader_runner.c b/tests/shaders/shader_runner.c
index b71a401..5f6722a 100644
--- a/tests/shaders/shader_runner.c
+++ b/tests/shaders/shader_runner.c
@@ -98,6 +98,10 @@ const char *test_start = NULL;
 
 GLuint vertex_shaders[256];
 unsigned num_vertex_shaders = 0;
+GLuint tessellation_control_shaders[256];
+unsigned num_tessellation_control_shaders = 0;
+GLuint tessellation_evaluation_shaders[256];
+unsigned num_tessellation_evaluation_shaders = 0;
 GLuint geometry_shaders[256];
 unsigned num_geometry_shaders = 0;
 GLuint fragment_shaders[256];
@@ -131,6 +135,10 @@ enum states {
        vertex_shader_file,
        vertex_shader_passthrough,
        vertex_program,
+       tessellation_control_shader,
+       tessellation_control_shader_file,
+       tessellation_evaluation_shader,
+       tessellation_evaluation_shader_file,
        geometry_shader,
        geometry_shader_file,
        geometry_layout,
@@ -238,10 +246,14 @@ target_to_short_name(GLenum target)
        switch (target) {
        case GL_VERTEX_SHADER:
                return "VS";
-       case GL_FRAGMENT_SHADER:
-               return "FS";
+       case GL_TESS_CONTROL_SHADER:
+               return "TCS";
+       case GL_TESS_EVALUATION_SHADER:
+               return "TES";
        case GL_GEOMETRY_SHADER:
                return "GS";
+       case GL_FRAGMENT_SHADER:
+               return "FS";
        case GL_COMPUTE_SHADER:
                return "CS";
        default:
@@ -260,13 +272,18 @@ compile_glsl(GLenum target, bool release_text)
        case GL_VERTEX_SHADER:
                piglit_require_vertex_shader();
                break;
-       case GL_FRAGMENT_SHADER:
-               piglit_require_fragment_shader();
+       case GL_TESS_CONTROL_SHADER:
+       case GL_TESS_EVALUATION_SHADER:
+               if (gl_version.num < 40)
+                       piglit_require_extension("GL_ARB_tessellation_shader");
                break;
        case GL_GEOMETRY_SHADER:
                if (gl_version.num < 32)
                        piglit_require_extension("GL_ARB_geometry_shader4");
                break;
+       case GL_FRAGMENT_SHADER:
+               piglit_require_fragment_shader();
+               break;
        case GL_COMPUTE_SHADER:
                if (gl_version.num < 43)
                        piglit_require_extension("GL_ARB_compute_shader");
@@ -334,6 +351,14 @@ compile_glsl(GLenum target, bool release_text)
                vertex_shaders[num_vertex_shaders] = shader;
                num_vertex_shaders++;
                break;
+       case GL_TESS_CONTROL_SHADER:
+               tessellation_control_shaders[num_tessellation_control_shaders] 
= shader;
+               num_tessellation_control_shaders++;
+               break;
+       case GL_TESS_EVALUATION_SHADER:
+               
tessellation_evaluation_shaders[num_tessellation_evaluation_shaders] = shader;
+               num_tessellation_evaluation_shaders++;
+               break;
        case GL_GEOMETRY_SHADER:
                geometry_shaders[num_geometry_shaders] = shader;
                num_geometry_shaders++;
@@ -713,6 +738,24 @@ leave_state(enum states state, const char *line)
                                         line - shader_string);
                break;
 
+       case tessellation_control_shader:
+               shader_string_size = line - shader_string;
+               compile_glsl(GL_TESS_CONTROL_SHADER, false);
+               break;
+
+       case tessellation_control_shader_file:
+               compile_glsl(GL_TESS_CONTROL_SHADER, true);
+               break;
+
+       case tessellation_evaluation_shader:
+               shader_string_size = line - shader_string;
+               compile_glsl(GL_TESS_EVALUATION_SHADER, false);
+               break;
+
+       case tessellation_evaluation_shader_file:
+               compile_glsl(GL_TESS_EVALUATION_SHADER, true);
+               break;
+
        case geometry_shader:
                shader_string_size = line - shader_string;
                compile_glsl(GL_GEOMETRY_SHADER, false);
@@ -781,6 +824,14 @@ link_and_use_shaders(void)
                glAttachShader(prog, vertex_shaders[i]);
        }
 
+       for (i = 0; i < num_tessellation_control_shaders; i++) {
+               glAttachShader(prog, tessellation_control_shaders[i]);
+       }
+
+       for (i = 0; i < num_tessellation_evaluation_shaders; i++) {
+               glAttachShader(prog, tessellation_evaluation_shaders[i]);
+       }
+
        for (i = 0; i < num_geometry_shaders; i++) {
                glAttachShader(prog, geometry_shaders[i]);
        }
@@ -896,6 +947,18 @@ process_test_script(const char *script_name)
                        } else if (string_match("[vertex shader file]", line)) {
                                state = vertex_shader_file;
                                shader_string = NULL;
+                       } else if (string_match("[tessellation control 
shader]", line)) {
+                               state = tessellation_control_shader;
+                               shader_string = NULL;
+                       } else if (string_match("[tessellation control shader 
file]", line)) {
+                               state = tessellation_control_shader_file;
+                               shader_string = NULL;
+                       } else if (string_match("[tessellation evaluation 
shader]", line)) {
+                               state = tessellation_evaluation_shader;
+                               shader_string = NULL;
+                       } else if (string_match("[tessellation evaluation 
shader file]", line)) {
+                               state = tessellation_evaluation_shader_file;
+                               shader_string = NULL;
                        } else if (string_match("[geometry shader]", line)) {
                                state = geometry_shader;
                                shader_string = NULL;
@@ -945,6 +1008,8 @@ process_test_script(const char *script_name)
 
                        case vertex_shader:
                        case vertex_program:
+                       case tessellation_control_shader:
+                       case tessellation_evaluation_shader:
                        case geometry_shader:
                        case fragment_shader:
                        case fragment_program:
@@ -954,6 +1019,8 @@ process_test_script(const char *script_name)
                                break;
 
                        case vertex_shader_file:
+                       case tessellation_control_shader_file:
+                       case tessellation_evaluation_shader_file:
                        case geometry_shader_file:
                        case fragment_shader_file:
                        case compute_shader_file:
-- 
2.0.0.rc4

_______________________________________________
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to