Add support for tessellation control and tessellation evaluation shaders.

Signed-off-by: Fabian Bieler <[email protected]>
---
 tests/shaders/shader_runner.c | 77 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 77 insertions(+)

diff --git a/tests/shaders/shader_runner.c b/tests/shaders/shader_runner.c
index dd506e8..7b9ec97 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 tess_ctrl_shaders[256];
+unsigned num_tess_ctrl_shaders = 0;
+GLuint tess_eval_shaders[256];
+unsigned num_tess_eval_shaders = 0;
 GLuint geometry_shaders[256];
 unsigned num_geometry_shaders = 0;
 GLuint fragment_shaders[256];
@@ -128,6 +132,10 @@ enum states {
        vertex_shader_file,
        vertex_shader_passthrough,
        vertex_program,
+       tess_ctrl_shader,
+       tess_ctrl_shader_file,
+       tess_eval_shader,
+       tess_eval_shader_file,
        geometry_shader,
        geometry_shader_file,
        geometry_layout,
@@ -237,6 +245,10 @@ target_to_short_name(GLenum target)
                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_COMPUTE_SHADER:
@@ -260,6 +272,11 @@ compile_glsl(GLenum target, bool release_text)
        case GL_FRAGMENT_SHADER:
                piglit_require_fragment_shader();
                break;
+       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");
@@ -331,6 +348,14 @@ compile_glsl(GLenum target, bool release_text)
                vertex_shaders[num_vertex_shaders] = shader;
                num_vertex_shaders++;
                break;
+       case GL_TESS_CONTROL_SHADER:
+               tess_ctrl_shaders[num_tess_ctrl_shaders] = shader;
+               num_tess_ctrl_shaders++;
+               break;
+       case GL_TESS_EVALUATION_SHADER:
+               tess_eval_shaders[num_tess_eval_shaders] = shader;
+               num_tess_eval_shaders++;
+               break;
        case GL_GEOMETRY_SHADER:
                geometry_shaders[num_geometry_shaders] = shader;
                num_geometry_shaders++;
@@ -710,6 +735,24 @@ leave_state(enum states state, const char *line)
                                         line - shader_string);
                break;
 
+       case tess_ctrl_shader:
+               shader_string_size = line - shader_string;
+               compile_glsl(GL_TESS_CONTROL_SHADER, false);
+               break;
+
+       case tess_ctrl_shader_file:
+               compile_glsl(GL_TESS_CONTROL_SHADER, true);
+               break;
+
+       case tess_eval_shader:
+               shader_string_size = line - shader_string;
+               compile_glsl(GL_TESS_EVALUATION_SHADER, false);
+               break;
+
+       case tess_eval_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);
@@ -768,6 +811,8 @@ link_and_use_shaders(void)
 
        if ((num_vertex_shaders == 0)
            && (num_fragment_shaders == 0)
+           && (num_tess_ctrl_shaders == 0)
+           && (num_tess_eval_shaders == 0)
            && (num_geometry_shaders == 0)
            && (num_compute_shaders == 0))
                return;
@@ -778,6 +823,14 @@ link_and_use_shaders(void)
                glAttachShader(prog, vertex_shaders[i]);
        }
 
+       for (i = 0; i < num_tess_ctrl_shaders; i++) {
+               glAttachShader(prog, tess_ctrl_shaders[i]);
+       }
+
+       for (i = 0; i < num_tess_eval_shaders; i++) {
+               glAttachShader(prog, tess_eval_shaders[i]);
+       }
+
        for (i = 0; i < num_geometry_shaders; i++) {
                glAttachShader(prog, geometry_shaders[i]);
        }
@@ -818,6 +871,14 @@ link_and_use_shaders(void)
                glDeleteShader(vertex_shaders[i]);
        }
 
+       for (i = 0; i < num_tess_ctrl_shaders; i++) {
+               glDeleteShader(tess_ctrl_shaders[i]);
+       }
+
+       for (i = 0; i < num_tess_eval_shaders; i++) {
+               glDeleteShader(tess_eval_shaders[i]);
+       }
+
        for (i = 0; i < num_geometry_shaders; i++) {
                glDeleteShader(geometry_shaders[i]);
        }
@@ -893,6 +954,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 = tess_ctrl_shader;
+                               shader_string = NULL;
+                       } else if (string_match("[tessellation control shader 
file]", line)) {
+                               state = tess_ctrl_shader_file;
+                               shader_string = NULL;
+                       } else if (string_match("[tessellation evaluation 
shader]", line)) {
+                               state = tess_eval_shader;
+                               shader_string = NULL;
+                       } else if (string_match("[tessellation evaluation 
shader file]", line)) {
+                               state = tess_eval_shader_file;
+                               shader_string = NULL;
                        } else if (string_match("[geometry shader]", line)) {
                                state = geometry_shader;
                                shader_string = NULL;
@@ -942,6 +1015,8 @@ process_test_script(const char *script_name)
 
                        case vertex_shader:
                        case vertex_program:
+                       case tess_ctrl_shader:
+                       case tess_eval_shader:
                        case geometry_shader:
                        case fragment_shader:
                        case fragment_program:
@@ -951,6 +1026,8 @@ process_test_script(const char *script_name)
                                break;
 
                        case vertex_shader_file:
+                       case tess_ctrl_shader_file:
+                       case tess_eval_shader_file:
                        case geometry_shader_file:
                        case fragment_shader_file:
                        case compute_shader_file:
-- 
1.8.3.2

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

Reply via email to