From: Ian Romanick <[email protected]>

Signed-off-by: Ian Romanick <[email protected]>
---
 .../spec/arb_separate_shader_objects/sso-common.c  | 27 ++++++++++++++++++++++
 .../spec/arb_separate_shader_objects/sso-common.h  |  5 ++++
 2 files changed, 32 insertions(+)

diff --git a/tests/spec/arb_separate_shader_objects/sso-common.c 
b/tests/spec/arb_separate_shader_objects/sso-common.c
index c73c741..29ae23f 100644
--- a/tests/spec/arb_separate_shader_objects/sso-common.c
+++ b/tests/spec/arb_separate_shader_objects/sso-common.c
@@ -75,3 +75,30 @@ configure_transform_feedback_object(GLuint *xfb, GLuint *buf)
        glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, *xfb);
        glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, *buf);
 }
+
+/**
+ * Create a separable vertex shader program with transform feedback output
+ *
+ * A vertex shader must be created using the "traditional" API because
+ * \c glTransformFeedbackVaryings must be called before linking.  There is no
+ * way to do that with \c glCreateShaderProgramv.
+ */
+bool
+CreateShaderProgram_with_xfb(const char *source,
+                            const char **varyings,
+                            unsigned num_varyings,
+                            GLuint *vs_prog)
+{
+       GLuint vs = piglit_compile_shader_text(GL_VERTEX_SHADER, source);
+
+       *vs_prog = glCreateProgram();
+       glAttachShader(*vs_prog, vs);
+
+       glProgramParameteri(*vs_prog, GL_PROGRAM_SEPARABLE, GL_TRUE);
+       glTransformFeedbackVaryings(*vs_prog, num_varyings, varyings,
+                                   GL_INTERLEAVED_ATTRIBS);
+       glLinkProgram(*vs_prog);
+       glDeleteShader(vs);
+
+       return piglit_link_check_status(*vs_prog);
+}
diff --git a/tests/spec/arb_separate_shader_objects/sso-common.h 
b/tests/spec/arb_separate_shader_objects/sso-common.h
index 627df4c..af6e610 100644
--- a/tests/spec/arb_separate_shader_objects/sso-common.h
+++ b/tests/spec/arb_separate_shader_objects/sso-common.h
@@ -28,4 +28,9 @@ unsigned pick_a_glsl_version(void);
 
 void configure_transform_feedback_object(GLuint *xfb, GLuint *buf);
 
+bool CreateShaderProgram_with_xfb(const char *source,
+                                 const char **varyings,
+                                 unsigned num_varyings,
+                                 GLuint *vs_prog);
+
 #endif /* SSO_COMMON_H */
-- 
1.8.1.4

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

Reply via email to