[Piglit] [PATCH 1/4] piglit: Switch a bunch of tests over to piglit_build_simple_program.

Ian Romanick idr at freedesktop.org
Wed May 29 14:14:59 PDT 2013


On 05/29/2013 10:59 AM, Eric Anholt wrote:
> Since I was about to clean up some piglit_compile_shader_text calls, I
> was looking at all these anyway.

*ALL*?!?  Dude, I fear you! :)  I found one thing (was that one 
intentional?  lol).  Other than that, this patch is

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

> ---
>   .../execution/fbo-extended-blend-explicit.c            | 12 +-----------
>   .../draw-elements-instanced-base-vertex.c              | 10 ++--------
>   tests/spec/arb_draw_instanced/execution/elements.c     | 13 ++-----------
>   .../arb_es2_compatibility-fixed-type.c                 |  5 ++---
>   .../arb_es2_compatibility-releaseshadercompiler.c      |  9 ++-------
>   tests/spec/arb_framebuffer_srgb/blit.c                 |  8 ++------
>   tests/spec/arb_instanced_arrays/instanced_arrays.c     | 10 ++--------
>   tests/spec/arb_sampler_objects/sampler-incomplete.c    |  5 ++---
>   tests/spec/arb_shader_objects/clear-with-deleted.c     | 10 +---------
>   tests/spec/arb_shader_objects/delete-repeat.c          | 10 +---------
>   .../arb_shader_objects/getactiveuniform-beginend.c     |  7 ++-----
>   tests/spec/arb_shader_objects/getuniform.c             |  8 +-------
>   .../getuniformlocation-array-of-struct-of-array.c      |  4 +---
>   tests/spec/arb_shader_texture_lod/execution/texgrad.c  |  7 ++-----
>   .../arb_shader_texture_lod/execution/texgradcube.c     |  7 ++-----
>   .../arb_texture_buffer_object/fetch-outside-bounds.c   | 11 ++---------
>   tests/spec/arb_texture_buffer_object/formats.c         | 17 ++---------------
>   tests/spec/arb_texture_buffer_object/render-no-bo.c    | 11 ++---------
>   tests/spec/arb_texture_buffer_range/ranges.c           | 17 +----------------
>   tests/spec/arb_texture_cube_map_array/cubemap.c        |  7 ++-----
>   .../arb_texture_cube_map_array/fbo-cubemap-array.c     | 11 ++---------
>   .../sampler-cube-array-shadow.c                        |  6 +-----
>   tests/spec/arb_texture_float/texture-float-formats.c   |  7 ++-----
>   tests/spec/arb_uniform_buffer_object/dlist.c           |  9 ++-------
>   .../getactiveuniformblockiv-uniform-block-data-size.c  | 10 ++--------
>   .../getactiveuniformblockname.c                        | 10 ++--------
>   .../arb_uniform_buffer_object/getactiveuniformname.c   | 10 ++--------
>   .../getactiveuniformsiv-uniform-array-stride.c         |  9 ++-------
>   .../getactiveuniformsiv-uniform-block-index.c          | 18 ++----------------
>   .../getactiveuniformsiv-uniform-matrix-stride.c        |  9 ++-------
>   .../getactiveuniformsiv-uniform-type.c                 | 14 +++-----------
>   tests/spec/arb_uniform_buffer_object/getprogramiv.c    | 17 ++---------------
>   .../arb_uniform_buffer_object/getuniformblockindex.c   | 11 +----------
>   .../spec/arb_uniform_buffer_object/getuniformindices.c | 11 +----------
>   .../arb_uniform_buffer_object/getuniformlocation.c     | 12 +-----------
>   .../layout-std140-base-size-and-alignment.c            | 10 ++--------
>   tests/spec/arb_uniform_buffer_object/layout-std140.c   | 12 +-----------
>   .../negative-getactiveuniformblockiv.c                 |  9 ++-------
>   .../negative-getactiveuniformsiv.c                     |  9 ++-------
>   tests/spec/arb_uniform_buffer_object/row-major.c       | 14 ++------------
>   .../arb_uniform_buffer_object/uniformblockbinding.c    | 10 ++--------
>   .../arb_vertex_buffer_object/mixed-immediate-and-vbo.c |  5 ++---
>   tests/spec/ext_texture_array/maxlayers.c               |  7 ++-----
>   tests/spec/ext_texture_integer/fbo-blending.c          |  8 ++------
>   .../fbo-integer-readpixels-sint-uint.c                 |  8 +++-----
>   .../spec/ext_texture_integer/texture-integer-glsl130.c |  8 ++------
>   .../depth_texture_mode_and_swizzle.c                   | 17 ++---------------
>   tests/spec/ext_timer_query/time-elapsed.c              |  8 +-------
>   tests/spec/gl-2.0/api/getattriblocation-conventional.c |  4 +---
>   tests/spec/gl-2.0/edgeflag.c                           | 13 ++-----------
>   tests/spec/gl-2.0/vertex-program-two-side.c            | 12 +-----------
>   tests/spec/gl-3.0/texture-integer.c                    |  6 ++----
>   tests/spec/gles-2.0/glsl-fs-pointcoord.c               |  5 +----
>   .../gles-3.0/oes_compressed_etc2_texture-miptree.c     |  8 +-------
>   .../execution/clipping/clip-plane-transformation.c     | 11 +----------
>   .../glsl-1.30/execution/clipping/max-clip-distances.c  | 11 +----------
>   tests/spec/glsl-1.30/execution/fs-discard-exit-2.c     |  8 ++------
>   tests/spec/glsl-1.30/execution/fs-execution-ordering.c |  6 +-----
>   tests/spec/glsl-1.30/execution/fs-texelFetch-2D.c      |  6 ++----
>   .../spec/glsl-1.30/execution/fs-texelFetchOffset-2D.c  |  6 ++----
>   tests/spec/glsl-1.30/execution/fs-textureOffset-2D.c   |  6 ++----
>   tests/spec/glsl-1.30/execution/vertexid-beginend.c     |  9 ++-------
>   tests/spec/glsl-1.30/execution/vertexid-drawarrays.c   |  9 ++-------
>   tests/spec/glsl-1.30/execution/vertexid-drawelements.c |  9 ++-------
>   tests/spec/nv_texture_barrier/blending-in-shader.c     |  5 ++---
>   .../oes_compressed_etc1_rgb8_texture-miptree.c         |  8 +-------
>   66 files changed, 114 insertions(+), 505 deletions(-)
>
> diff --git a/tests/spec/arb_blend_func_extended/execution/fbo-extended-blend-explicit.c b/tests/spec/arb_blend_func_extended/execution/fbo-extended-blend-explicit.c
> index ff8414b..1605961 100644
> --- a/tests/spec/arb_blend_func_extended/execution/fbo-extended-blend-explicit.c
> +++ b/tests/spec/arb_blend_func_extended/execution/fbo-extended-blend-explicit.c
> @@ -257,8 +257,6 @@ test(void)
>   	static const GLfloat test_color1[4] = { 0.5, 0.5, 0.5, 0.5 };
>   	GLfloat expected[4];
>   	GLuint prog;
> -	GLuint vs;
> -	GLuint fs;
>   	int i, j, k, o;
>
>   	if (max_ds_buffers > 1) {
> @@ -266,19 +264,11 @@ test(void)
>   		max_ds_buffers = 1;
>   	}
>
> -	prog = glCreateProgram();
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_text);
> -
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_text);
> -	glAttachShader(prog, vs);
> -	glAttachShader(prog, fs);
> -	piglit_check_gl_error(GL_NO_ERROR);
> -
>   	create_fbo();
>
>   	glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
>
> -	glLinkProgram(prog);
> +	prog = piglit_build_simple_program(vs_text, fs_text);
>   	glUseProgram(prog);
>
>   	uniform_src0 = glGetUniformLocation(prog, "src0");
> diff --git a/tests/spec/arb_draw_elements_base_vertex/draw-elements-instanced-base-vertex.c b/tests/spec/arb_draw_elements_base_vertex/draw-elements-instanced-base-vertex.c
> index fdb21fa..e8399a9 100644
> --- a/tests/spec/arb_draw_elements_base_vertex/draw-elements-instanced-base-vertex.c
> +++ b/tests/spec/arb_draw_elements_base_vertex/draw-elements-instanced-base-vertex.c
> @@ -64,7 +64,7 @@ static const char *FragShaderText =
>   	"	gl_FragColor = gl_Color; \n"
>   	"}\n";
>
> -static GLuint VertShader, FragShader, Program;
> +static GLuint Program;
>
>   static uintptr_t ib_offset;
>
> @@ -134,13 +134,7 @@ piglit_init(int argc, char **argv)
>   	glEnableClientState(GL_VERTEX_ARRAY);
>   	glVertexPointer(2, GL_FLOAT, 0, user_va ? vb : NULL);
>
> -	VertShader = piglit_compile_shader_text(GL_VERTEX_SHADER, VertShaderText);
> -	assert(VertShader);
> -
> -	FragShader = piglit_compile_shader_text(GL_FRAGMENT_SHADER, FragShaderText);
> -	assert(FragShader);
> -
> -	Program = piglit_link_simple_program(VertShader, FragShader);
> +	Program = piglit_build_simple_program(VertShaderText, FragShaderText);
>
>   	glUseProgram(Program);
>
> diff --git a/tests/spec/arb_draw_instanced/execution/elements.c b/tests/spec/arb_draw_instanced/execution/elements.c
> index e5998ab..7cb418b 100644
> --- a/tests/spec/arb_draw_instanced/execution/elements.c
> +++ b/tests/spec/arb_draw_instanced/execution/elements.c
> @@ -113,20 +113,11 @@ piglit_display(void)
>   void
>   piglit_init(int argc, char **argv)
>   {
> -	GLuint vs, fs, prog;
> +	GLuint prog;
>
>   	piglit_require_extension("GL_ARB_draw_instanced");
>
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_source);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_source);
> -
> -	prog = piglit_link_simple_program(vs, fs);
> -
> -	if (!vs || !fs || !prog)
> -		piglit_report_result(PIGLIT_FAIL);
> -
> -	glDeleteShader(vs);
> -	glDeleteShader(fs);
> +	prog = piglit_build_simple_program(vs_source, fs_source);
>
>   	glUseProgram(prog);
>   }
> diff --git a/tests/spec/arb_es2_compatibility/arb_es2_compatibility-fixed-type.c b/tests/spec/arb_es2_compatibility/arb_es2_compatibility-fixed-type.c
> index eda5e71..2f59279 100644
> --- a/tests/spec/arb_es2_compatibility/arb_es2_compatibility-fixed-type.c
> +++ b/tests/spec/arb_es2_compatibility/arb_es2_compatibility-fixed-type.c
> @@ -85,7 +85,7 @@ static void expect_error(GLenum expect, const char * where, ...)
>   void
>   piglit_init(int argc, char **argv)
>   {
> -	GLuint vs, prog;
> +	GLuint prog;
>   	int i,j;
>
>   	piglit_require_gl_version(20);
> @@ -95,8 +95,7 @@ piglit_init(int argc, char **argv)
>
>   	glClearColor(0.2, 0.2, 0.2, 0.2);
>
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vertShaderText);
> -	prog = piglit_link_simple_program(vs, 0);
> +	prog = piglit_build_simple_program(vertShaderText, NULL);
>
>   	glUseProgram(prog);
>
> diff --git a/tests/spec/arb_es2_compatibility/arb_es2_compatibility-releaseshadercompiler.c b/tests/spec/arb_es2_compatibility/arb_es2_compatibility-releaseshadercompiler.c
> index d0af980..0550bd6 100644
> --- a/tests/spec/arb_es2_compatibility/arb_es2_compatibility-releaseshadercompiler.c
> +++ b/tests/spec/arb_es2_compatibility/arb_es2_compatibility-releaseshadercompiler.c
> @@ -62,21 +62,16 @@ static const char fs_text[] =
>   void
>   draw(const float *color, float x_offset)
>   {
> -	GLuint vs, fs, prog;
> +	GLuint prog;
>   	GLint color_location;
>   	GLint offset_location;
>
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_text);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_text);
> -	prog = piglit_link_simple_program(vs, fs);
> +	prog = piglit_build_simple_program(vs_text, fs_text);
>
>   	glBindAttribLocation(prog, 0, "vertex");
>   	glLinkProgram(prog);
>   	piglit_link_check_status(prog);
>
> -	glDeleteShader(vs);
> -	glDeleteShader(fs);
> -
>   	glUseProgram(prog);
>   	color_location = glGetUniformLocation(prog, "color");
>   	offset_location = glGetUniformLocation(prog, "offset");
> diff --git a/tests/spec/arb_framebuffer_srgb/blit.c b/tests/spec/arb_framebuffer_srgb/blit.c
> index cd8aecd..6791789 100644
> --- a/tests/spec/arb_framebuffer_srgb/blit.c
> +++ b/tests/spec/arb_framebuffer_srgb/blit.c
> @@ -220,7 +220,7 @@ print_usage_and_exit(char *prog_name)
>   void
>   piglit_init(int argc, char **argv)
>   {
> -	GLint vs, fs, max_samples;
> +	GLint max_samples;
>
>   	if (argc != 5) {
>   		print_usage_and_exit(argv[0]);
> @@ -293,11 +293,7 @@ piglit_init(int argc, char **argv)
>   		piglit_report_result(PIGLIT_SKIP);
>   	}
>
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_text);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_text);
> -	prog = piglit_link_simple_program(vs, fs);
> -	glDeleteShader(vs);
> -	glDeleteShader(fs);
> +	prog = piglit_build_simple_program(vs_text, fs_text);
>
>   	src_fbo = setup_fbo(src_format, src_samples);
>   	dst_fbo = setup_fbo(dst_format, dst_samples);
> diff --git a/tests/spec/arb_instanced_arrays/instanced_arrays.c b/tests/spec/arb_instanced_arrays/instanced_arrays.c
> index d349b22..083ae94 100644
> --- a/tests/spec/arb_instanced_arrays/instanced_arrays.c
> +++ b/tests/spec/arb_instanced_arrays/instanced_arrays.c
> @@ -65,7 +65,7 @@ static const char *FragShaderText =
>      "} \n";
>
>
> -static GLuint VertShader, FragShader, Program;
> +static GLuint Program;
>
>   static GLboolean use_vbo = GL_FALSE;
>
> @@ -199,13 +199,7 @@ piglit_init(int argc, char **argv)
>      piglit_require_GLSL();
>      piglit_require_extension("GL_ARB_instanced_arrays");
>
> -   VertShader = piglit_compile_shader_text(GL_VERTEX_SHADER, VertShaderText);
> -   assert(VertShader);
> -
> -   FragShader = piglit_compile_shader_text(GL_FRAGMENT_SHADER, FragShaderText);
> -   assert(FragShader);
> -
> -   Program = piglit_link_simple_program(VertShader, FragShader);
> +   Program = piglit_build_simple_program(VertShaderText, FragShaderText);
>
>      glUseProgram(Program);
>
> diff --git a/tests/spec/arb_sampler_objects/sampler-incomplete.c b/tests/spec/arb_sampler_objects/sampler-incomplete.c
> index 505887e..7ac930e 100644
> --- a/tests/spec/arb_sampler_objects/sampler-incomplete.c
> +++ b/tests/spec/arb_sampler_objects/sampler-incomplete.c
> @@ -58,13 +58,12 @@ setup(void)
>   		"                + texture2D(tex1, coord);\n"
>   		"}\n";
>   	GLuint samplers[2];
> -	GLuint frag, prog;
> +	GLuint prog;
>   	GLint u;
>   	GLuint tex;
>
>   	/* Create fragment shader that adds the two textures */
> -	frag = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fragShaderText);
> -	prog = piglit_link_simple_program(0, frag);
> +	prog = piglit_build_simple_program(NULL, fragShaderText);
>
>   	glUseProgram(prog);
>   	u = glGetUniformLocation(prog, "tex0");
> diff --git a/tests/spec/arb_shader_objects/clear-with-deleted.c b/tests/spec/arb_shader_objects/clear-with-deleted.c
> index b67d830..fc27023 100644
> --- a/tests/spec/arb_shader_objects/clear-with-deleted.c
> +++ b/tests/spec/arb_shader_objects/clear-with-deleted.c
> @@ -55,7 +55,6 @@ static const char *fs_source =
>   enum piglit_result
>   piglit_display(void)
>   {
> -	GLuint vs, fs;
>   	bool pass = true;
>   	GLuint prog;
>   	float green[] = {0.0, 1.0, 0.0, 0.0};
> @@ -65,15 +64,8 @@ piglit_display(void)
>   	glClearColor(1.0, 0.0, 0.0, 0.0);
>   	glClear(GL_COLOR_BUFFER_BIT);
>
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_source);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_source);
> -	prog = piglit_link_simple_program(vs, fs);
> +	prog = piglit_build_simple_program(vs_source, fs_source);
>
> -	if (!vs || !fs || !prog)
> -		piglit_report_result(PIGLIT_FAIL);
> -
> -	glDeleteShader(vs);
> -	glDeleteShader(fs);
>   	glUseProgram(prog);
>   	glDeleteProgram(prog);
>
> diff --git a/tests/spec/arb_shader_objects/delete-repeat.c b/tests/spec/arb_shader_objects/delete-repeat.c
> index 8977914..c37099e 100644
> --- a/tests/spec/arb_shader_objects/delete-repeat.c
> +++ b/tests/spec/arb_shader_objects/delete-repeat.c
> @@ -52,7 +52,6 @@ static const char *fs_source =
>   enum piglit_result
>   piglit_display(void)
>   {
> -	GLuint vs, fs;
>   	bool pass = true;
>   	GLuint prog;
>   	float green[] = {0.0, 1.0, 0.0, 0.0};
> @@ -62,15 +61,8 @@ piglit_display(void)
>   	glClearColor(1.0, 0.0, 0.0, 0.0);
>   	glClear(GL_COLOR_BUFFER_BIT);
>
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_source);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_source);
> -	prog = piglit_link_simple_program(vs, fs);
> +	prog = piglit_build_simple_program(vs_source, fs_source);
>
> -	if (!vs || !fs || !prog)
> -		piglit_report_result(PIGLIT_FAIL);
> -
> -	glDeleteShader(vs);
> -	glDeleteShader(fs);
>   	glUseProgram(prog);
>   	glDeleteProgram(prog);
>
> diff --git a/tests/spec/arb_shader_objects/getactiveuniform-beginend.c b/tests/spec/arb_shader_objects/getactiveuniform-beginend.c
> index 55ddb68..a8cc7a0 100644
> --- a/tests/spec/arb_shader_objects/getactiveuniform-beginend.c
> +++ b/tests/spec/arb_shader_objects/getactiveuniform-beginend.c
> @@ -57,18 +57,15 @@ const char *vs_source =
>   void
>   piglit_init(int argc, char **argv)
>   {
> -	GLuint vs, prog;
> +	GLuint prog;
>   	char name[4];
>   	GLint size, len;
>   	GLenum type;
>
>   	piglit_require_vertex_shader();
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_source);
>
> -	prog = piglit_link_simple_program(vs, 0);
> +	prog = piglit_build_simple_program(vs_source, NULL);
>   	glUseProgram(prog);
> -	if (!vs || !prog)
> -		piglit_report_result(PIGLIT_FAIL);
>
>   	glGetActiveUniformARB(prog, 0, sizeof(name), &len, &size, &type, name);
>
> diff --git a/tests/spec/arb_shader_objects/getuniform.c b/tests/spec/arb_shader_objects/getuniform.c
> index 19cfb35..b73af8e 100644
> --- a/tests/spec/arb_shader_objects/getuniform.c
> +++ b/tests/spec/arb_shader_objects/getuniform.c
> @@ -304,20 +304,14 @@ static struct {
>   void
>   piglit_init(int argc, char **argv)
>   {
> -	GLuint vs;
>   	int i;
>   	bool pass = true;
>
>   	piglit_require_vertex_shader();
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, source);
> -	assert(vs);
>
> -	prog = piglit_link_simple_program(vs, 0);
> +	prog = piglit_build_simple_program(source, NULL);
>   	glUseProgram(prog);
>
> -	if (!prog)
> -		piglit_report_result(PIGLIT_FAIL);
> -
>   	for (i = 0; i < ARRAY_SIZE(uniforms); i++) {
>   		const char *name = uniforms[i].name;
>   		int loc = glGetUniformLocation(prog, name);
> diff --git a/tests/spec/arb_shader_objects/getuniformlocation-array-of-struct-of-array.c b/tests/spec/arb_shader_objects/getuniformlocation-array-of-struct-of-array.c
> index 8316f72..ccc073f 100644
> --- a/tests/spec/arb_shader_objects/getuniformlocation-array-of-struct-of-array.c
> +++ b/tests/spec/arb_shader_objects/getuniformlocation-array-of-struct-of-array.c
> @@ -54,7 +54,6 @@ piglit_display(void)
>
>   void piglit_init(int argc, char **argv)
>   {
> -	GLint vert;
>   	GLint prog;
>   	GLint loc;
>   	char name[256];
> @@ -63,8 +62,7 @@ void piglit_init(int argc, char **argv)
>   	unsigned j;
>
>   	piglit_require_vertex_shader();
> -	vert = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_code);
> -	prog = piglit_link_simple_program(vert, 0);
> +	prog = piglit_build_simple_program(vs_code, NULL);
>
>   	/* From page 80 of the OpenGL 2.1 spec:
>   	 *
> diff --git a/tests/spec/arb_shader_texture_lod/execution/texgrad.c b/tests/spec/arb_shader_texture_lod/execution/texgrad.c
> index bafefe4..66085e2 100644
> --- a/tests/spec/arb_shader_texture_lod/execution/texgrad.c
> +++ b/tests/spec/arb_shader_texture_lod/execution/texgrad.c
> @@ -79,16 +79,13 @@ void piglit_init(int argc, char **argv)
>   	GLuint tex, fb;
>   	GLenum status;
>   	int i, dim;
> -	static GLuint fs_tex, fs_texgrad;
>
>   	piglit_require_GLSL();
>   	piglit_require_extension("GL_EXT_framebuffer_object");
>   	piglit_require_extension("GL_ARB_shader_texture_lod");
>
> -	fs_tex = piglit_compile_shader_text(GL_FRAGMENT_SHADER, sh_tex);
> -	fs_texgrad = piglit_compile_shader_text(GL_FRAGMENT_SHADER, sh_texgrad);
> -	prog_tex = piglit_link_simple_program(0, fs_tex);
> -	prog_texgrad = piglit_link_simple_program(0, fs_texgrad);
> +	prog_tex = piglit_build_simple_program(NULL, sh_tex);
> +	prog_texgrad = piglit_build_simple_program(NULL, sh_texgrad);
>
>   	glGenTextures(1, &tex);
>   	glBindTexture(GL_TEXTURE_2D, tex);
> diff --git a/tests/spec/arb_shader_texture_lod/execution/texgradcube.c b/tests/spec/arb_shader_texture_lod/execution/texgradcube.c
> index 90f7ddc..5cb7a47 100644
> --- a/tests/spec/arb_shader_texture_lod/execution/texgradcube.c
> +++ b/tests/spec/arb_shader_texture_lod/execution/texgradcube.c
> @@ -78,16 +78,13 @@ void piglit_init(int argc, char **argv)
>   	GLuint tex, fb;
>   	GLenum status;
>   	int i, j, dim;
> -	static GLuint fs_tex, fs_texgrad;
>
>   	piglit_require_GLSL();
>   	piglit_require_extension("GL_EXT_framebuffer_object");
>   	piglit_require_extension("GL_ARB_shader_texture_lod");
>
> -	fs_tex = piglit_compile_shader_text(GL_FRAGMENT_SHADER, sh_tex);
> -	fs_texgrad = piglit_compile_shader_text(GL_FRAGMENT_SHADER, sh_texgrad);
> -	prog_tex = piglit_link_simple_program(0, fs_tex);
> -	prog_texgrad = piglit_link_simple_program(0, fs_texgrad);
> +	prog_tex = piglit_build_simple_program(NULL, sh_tex);
> +	prog_texgrad = piglit_build_simple_program(NULL, sh_texgrad);
>
>   	glGenTextures(1, &tex);
>   	glBindTexture(GL_TEXTURE_CUBE_MAP, tex);
> diff --git a/tests/spec/arb_texture_buffer_object/fetch-outside-bounds.c b/tests/spec/arb_texture_buffer_object/fetch-outside-bounds.c
> index 5860e6a..046d42b 100644
> --- a/tests/spec/arb_texture_buffer_object/fetch-outside-bounds.c
> +++ b/tests/spec/arb_texture_buffer_object/fetch-outside-bounds.c
> @@ -69,16 +69,9 @@ piglit_display(void)
>   		-1,  1
>   	};
>   	int vertex_location;
> -	GLuint fs, vs, prog;
> +	GLuint prog;
>
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_source);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_source);
> -	if (!vs || !fs)
> -		piglit_report_result(PIGLIT_FAIL);
> -
> -	prog = piglit_link_simple_program(vs, fs);
> -	if (!prog)
> -		piglit_report_result(PIGLIT_FAIL);
> +	prog = piglit_build_simple_program(vs_source, fs_source);
>   	glUseProgram(prog);
>
>   	vertex_location = glGetAttribLocation(prog, "vertex");
> diff --git a/tests/spec/arb_texture_buffer_object/formats.c b/tests/spec/arb_texture_buffer_object/formats.c
> index 888a711..4eb395a 100644
> --- a/tests/spec/arb_texture_buffer_object/formats.c
> +++ b/tests/spec/arb_texture_buffer_object/formats.c
> @@ -638,7 +638,7 @@ static void
>   create_program(struct program *program, const char *type)
>   {
>   	char *fs_source, *vs_source;
> -	GLuint vs, fs, prog;
> +	GLuint prog;
>   	char *threshold;
>
>   	if (strcmp(type, "") == 0)
> @@ -656,20 +656,7 @@ create_program(struct program *program, const char *type)
>   			 threshold);
>   	}
>
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_source);
> -	if (!vs) {
> -		printf("VS source:\n%s\n", vs_source);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_source);
> -	if (!fs) {
> -		printf("FS source:\n%s\n", fs_source);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> -
> -	prog = piglit_link_simple_program(vs, fs);
> -	if (!prog)
> -		piglit_report_result(PIGLIT_FAIL);
> +	prog = piglit_build_simple_program(vs_source, fs_source);
>
>   	program->prog = prog;
>           program->pos_location = glGetUniformLocation(prog, "pos");
> diff --git a/tests/spec/arb_texture_buffer_object/render-no-bo.c b/tests/spec/arb_texture_buffer_object/render-no-bo.c
> index 4712624..d2357ce 100644
> --- a/tests/spec/arb_texture_buffer_object/render-no-bo.c
> +++ b/tests/spec/arb_texture_buffer_object/render-no-bo.c
> @@ -65,16 +65,9 @@ piglit_display(void)
>   		-1,  1
>   	};
>   	int vertex_location;
> -	GLuint fs, vs, prog;
> +	GLuint prog;
>
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_source);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_source);
> -	if (!vs || !fs)
> -		piglit_report_result(PIGLIT_FAIL);
> -
> -	prog = piglit_link_simple_program(vs, fs);
> -	if (!prog)
> -		piglit_report_result(PIGLIT_FAIL);
> +	prog = piglit_build_simple_program(vs_source, fs_source);
>   	glUseProgram(prog);
>
>   	vertex_location = glGetAttribLocation(prog, "vertex");
> diff --git a/tests/spec/arb_texture_buffer_range/ranges.c b/tests/spec/arb_texture_buffer_range/ranges.c
> index 62eeb82..ffdad56 100644
> --- a/tests/spec/arb_texture_buffer_range/ranges.c
> +++ b/tests/spec/arb_texture_buffer_range/ranges.c
> @@ -156,22 +156,7 @@ static char *fs_source =
>   static void
>   init_program()
>   {
> -	GLuint vs, fs;
> -
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_source);
> -	if (!vs) {
> -		printf("VS source:\n%s\n", vs_source);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_source);
> -	if (!fs) {
> -		printf("FS source:\n%s\n", fs_source);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> -
> -	prog = piglit_link_simple_program(vs, fs);
> -	if (!prog)
> -		piglit_report_result(PIGLIT_FAIL);
> +	prog = piglit_build_simple_program(vs_source, fs_source);
>
>   	vertex_location = glGetAttribLocation(prog, "vertex");
>   }
> diff --git a/tests/spec/arb_texture_cube_map_array/cubemap.c b/tests/spec/arb_texture_cube_map_array/cubemap.c
> index db381eb..320f6dc 100644
> --- a/tests/spec/arb_texture_cube_map_array/cubemap.c
> +++ b/tests/spec/arb_texture_cube_map_array/cubemap.c
> @@ -84,7 +84,6 @@ static const char *frag_shader =
>    " gl_FragColor = texture(tex, gl_TexCoord[0]);\n"
>     "}\n";
>
> -static GLuint frag_shader_cube_array;
>   static GLuint program_cube_array;
>
>   #if defined(_MSC_VER)
> @@ -351,10 +350,8 @@ piglit_init(int argc, char **argv)
>   		}
>   	}
>
> -	frag_shader_cube_array = piglit_compile_shader_text(GL_FRAGMENT_SHADER, frag_shader);
> -	piglit_check_gl_error(GL_NO_ERROR);
> -	program_cube_array = piglit_link_simple_program(0, frag_shader_cube_array);
> -	piglit_check_gl_error(GL_NO_ERROR);
> +	program_cube_array =
> +		piglit_build_simple_program(NULL, frag_shader);
>
>   	setup_texcoords();
>   }
> diff --git a/tests/spec/arb_texture_cube_map_array/fbo-cubemap-array.c b/tests/spec/arb_texture_cube_map_array/fbo-cubemap-array.c
> index 234b7e0..9371a46 100644
> --- a/tests/spec/arb_texture_cube_map_array/fbo-cubemap-array.c
> +++ b/tests/spec/arb_texture_cube_map_array/fbo-cubemap-array.c
> @@ -88,7 +88,6 @@ static const char *frag_shader_cube_array_text =
>      "   gl_FragColor = texture(tex, gl_TexCoord[0]); \n"
>      "} \n";
>
> -static GLuint frag_shader_cube_array;
>   static GLuint program_cube_array;
>
>   static int
> @@ -248,14 +247,8 @@ void piglit_init(int argc, char **argv)
>   {
>   	piglit_require_extension("GL_ARB_texture_cube_map_array");
>
> -	/* Make shader programs */
> -	frag_shader_cube_array =
> -		piglit_compile_shader_text(GL_FRAGMENT_SHADER,
> -					   frag_shader_cube_array_text);
> -	piglit_check_gl_error(GL_NO_ERROR);
> -
> -	program_cube_array = piglit_link_simple_program(0, frag_shader_cube_array);
> -	piglit_check_gl_error(GL_NO_ERROR);
> +	program_cube_array =
> +		piglit_build_simple_program(NULL, frag_shader_cube_array_text);
>
>   	setup_texcoords();
>   }
> diff --git a/tests/spec/arb_texture_cube_map_array/sampler-cube-array-shadow.c b/tests/spec/arb_texture_cube_map_array/sampler-cube-array-shadow.c
> index 7c80ef6..f22e984 100644
> --- a/tests/spec/arb_texture_cube_map_array/sampler-cube-array-shadow.c
> +++ b/tests/spec/arb_texture_cube_map_array/sampler-cube-array-shadow.c
> @@ -45,8 +45,6 @@ PIGLIT_GL_TEST_CONFIG_END
>
>   static GLuint tex;
>   static GLint prog;
> -static GLint fs;
> -static GLint vs;
>
>   /* grab the coordinates from the main definition, and grab the
>      compvals from here */
> @@ -97,9 +95,7 @@ static const char *fragShaderText =
>   static void
>   shaderSetup(void)
>   {
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vertShaderText);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fragShaderText);
> -	prog = piglit_link_simple_program(vs, fs);
> +	prog = piglit_build_simple_program(vertShaderText, fragShaderText);
>   	glUseProgram(prog);
>   }
>
> diff --git a/tests/spec/arb_texture_float/texture-float-formats.c b/tests/spec/arb_texture_float/texture-float-formats.c
> index 7ea2ed3..0f7c767 100644
> --- a/tests/spec/arb_texture_float/texture-float-formats.c
> +++ b/tests/spec/arb_texture_float/texture-float-formats.c
> @@ -84,7 +84,7 @@ static const char *FragShaderText =
>      "} \n";
>
>
> -static GLuint FragShader, Program;
> +static GLuint Program;
>
>
>
> @@ -370,10 +370,7 @@ piglit_init(int argc, char **argv)
>
>      HaveRG = piglit_is_extension_supported("GL_ARB_texture_rg");
>
> -   FragShader = piglit_compile_shader_text(GL_FRAGMENT_SHADER, FragShaderText);
> -   assert(FragShader);
> -
> -   Program = piglit_link_simple_program(0, FragShader);
> +   Program = piglit_build_simple_program(NULL, FragShaderText);
>
>      glUseProgram(Program);
>
> diff --git a/tests/spec/arb_uniform_buffer_object/dlist.c b/tests/spec/arb_uniform_buffer_object/dlist.c
> index e207e87..2fb9b25 100644
> --- a/tests/spec/arb_uniform_buffer_object/dlist.c
> +++ b/tests/spec/arb_uniform_buffer_object/dlist.c
> @@ -101,19 +101,14 @@ void
>   piglit_init(int argc, char **argv)
>   {
>   	bool pass = true;
> -	GLuint fs, prog;
> +	GLuint prog;
>   	GLuint bo[2];
>   	GLint current_bo;
>   	GLint list;
>
>   	piglit_require_extension("GL_ARB_uniform_buffer_object");
>
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, source);
> -	prog = piglit_link_simple_program(fs, 0);
> -	if (!fs || !prog) {
> -		fprintf(stderr, "Failed to compile shader:\n%s", source);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> +	prog = piglit_build_simple_program(NULL, source);
>
>   	/* Test that glUniformBlockBinding() goes into display lists. */
>   	glUniformBlockBinding(prog, 0, 0);
> diff --git a/tests/spec/arb_uniform_buffer_object/getactiveuniformblockiv-uniform-block-data-size.c b/tests/spec/arb_uniform_buffer_object/getactiveuniformblockiv-uniform-block-data-size.c
> index 0558ec8..397f42a 100644
> --- a/tests/spec/arb_uniform_buffer_object/getactiveuniformblockiv-uniform-block-data-size.c
> +++ b/tests/spec/arb_uniform_buffer_object/getactiveuniformblockiv-uniform-block-data-size.c
> @@ -70,7 +70,7 @@ test_format(const struct uniform_type *type, bool row_major)
>   		"	gl_FragColor = vec4(align_test);\n"
>   		"}\n";
>   	char *fs_source;
> -	GLuint fs, prog;
> +	GLuint prog;
>   	GLint data_size;
>   	int expected;
>   	const struct uniform_type *transposed_type;
> @@ -83,12 +83,7 @@ test_format(const struct uniform_type *type, bool row_major)
>   	asprintf(&fs_source, fs_template,
>   		 row_major ? "layout(row_major) " : "",
>   		 type->type);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_source);
> -	prog = piglit_link_simple_program(0, fs);
> -	if (!fs || !prog) {
> -		fprintf(stderr, "Failed to compile shader:\n%s", fs_source);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> +	prog = piglit_build_simple_program(NULL, fs_source);
>   	free(fs_source);
>
>   	/* There's only one block, so it's uniform block 0. */
> @@ -96,7 +91,6 @@ test_format(const struct uniform_type *type, bool row_major)
>   				  GL_UNIFORM_BLOCK_DATA_SIZE,
>   				  &data_size);
>
> -	glDeleteShader(fs);
>   	glDeleteProgram(prog);
>
>   	/* "align_test" at the start of the UBO is a float, so our
> diff --git a/tests/spec/arb_uniform_buffer_object/getactiveuniformblockname.c b/tests/spec/arb_uniform_buffer_object/getactiveuniformblockname.c
> index 56a9613..c2fe044 100644
> --- a/tests/spec/arb_uniform_buffer_object/getactiveuniformblockname.c
> +++ b/tests/spec/arb_uniform_buffer_object/getactiveuniformblockname.c
> @@ -80,7 +80,7 @@ void
>   piglit_init(int argc, char **argv)
>   {
>   	int i;
> -	GLuint fs, prog;
> +	GLuint prog;
>   	const char *source =
>   		"#extension GL_ARB_uniform_buffer_object : enable\n"
>   		"uniform a { float u1; };\n"
> @@ -98,12 +98,7 @@ piglit_init(int argc, char **argv)
>
>   	piglit_require_extension("GL_ARB_uniform_buffer_object");
>
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, source);
> -	prog = piglit_link_simple_program(fs, 0);
> -	if (!fs || !prog) {
> -		fprintf(stderr, "Failed to compile shader:\n%s", source);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> +	prog = piglit_build_simple_program(NULL, source);
>
>   	glGetProgramiv(prog, GL_ACTIVE_UNIFORM_BLOCKS, &blocks);
>   	assert(blocks == 3);
> @@ -203,7 +198,6 @@ piglit_init(int argc, char **argv)
>   		pass = false;
>
>   	glDeleteProgram(prog);
> -	glDeleteShader(fs);
>
>   	piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
>   }
> diff --git a/tests/spec/arb_uniform_buffer_object/getactiveuniformname.c b/tests/spec/arb_uniform_buffer_object/getactiveuniformname.c
> index 38e209d..79eb015 100644
> --- a/tests/spec/arb_uniform_buffer_object/getactiveuniformname.c
> +++ b/tests/spec/arb_uniform_buffer_object/getactiveuniformname.c
> @@ -80,7 +80,7 @@ void
>   piglit_init(int argc, char **argv)
>   {
>   	unsigned int i;
> -	GLuint fs, prog;
> +	GLuint prog;
>   	const char *source =
>   		"#extension GL_ARB_uniform_buffer_object : enable\n"
>   		"uniform ubo1 { float a; };\n"
> @@ -98,12 +98,7 @@ piglit_init(int argc, char **argv)
>
>   	piglit_require_extension("GL_ARB_uniform_buffer_object");
>
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, source);
> -	prog = piglit_link_simple_program(fs, 0);
> -	if (!fs || !prog) {
> -		fprintf(stderr, "Failed to compile shader:\n%s", source);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> +	prog = piglit_build_simple_program(NULL, source);
>
>   	glGetProgramiv(prog, GL_ACTIVE_UNIFORMS, &uniforms);
>   	assert(uniforms == 4);
> @@ -202,7 +197,6 @@ piglit_init(int argc, char **argv)
>   		pass = false;
>
>   	glDeleteProgram(prog);
> -	glDeleteShader(fs);
>
>   	piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
>   }
> diff --git a/tests/spec/arb_uniform_buffer_object/getactiveuniformsiv-uniform-array-stride.c b/tests/spec/arb_uniform_buffer_object/getactiveuniformsiv-uniform-array-stride.c
> index 61333e0..510f138 100644
> --- a/tests/spec/arb_uniform_buffer_object/getactiveuniformsiv-uniform-array-stride.c
> +++ b/tests/spec/arb_uniform_buffer_object/getactiveuniformsiv-uniform-array-stride.c
> @@ -60,7 +60,7 @@ void
>   piglit_init(int argc, char **argv)
>   {
>   	bool pass = true;
> -	GLuint fs, prog;
> +	GLuint prog;
>   	const char *uniform_names[] = { "a", "b", "c", "d", "e", "f" };
>   	int expected_strides[] = { 0, 16, 16, 64, -1, -1 };
>   	GLint strides[ARRAY_SIZE(uniform_names)];
> @@ -69,12 +69,7 @@ piglit_init(int argc, char **argv)
>
>   	piglit_require_extension("GL_ARB_uniform_buffer_object");
>
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_source);
> -	prog = piglit_link_simple_program(0, fs);
> -	if (!fs || !prog) {
> -		printf("Failed to compile FS:\n%s", fs_source);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> +	prog = piglit_build_simple_program(NULL, fs_source);
>
>   	glGetUniformIndices(prog, ARRAY_SIZE(uniform_names), uniform_names,
>   			    uniform_indices);
> diff --git a/tests/spec/arb_uniform_buffer_object/getactiveuniformsiv-uniform-block-index.c b/tests/spec/arb_uniform_buffer_object/getactiveuniformsiv-uniform-block-index.c
> index cd9ed78..be5778f 100644
> --- a/tests/spec/arb_uniform_buffer_object/getactiveuniformsiv-uniform-block-index.c
> +++ b/tests/spec/arb_uniform_buffer_object/getactiveuniformsiv-uniform-block-index.c
> @@ -65,7 +65,7 @@ void
>   piglit_init(int argc, char **argv)
>   {
>   	bool pass = true;
> -	GLuint fs, vs, prog;
> +	GLuint prog;
>   	const char *uniform_block_names[3] = { "ub_a", "ub_b", "ub_c" };
>   	const char *uniform_names[4] = { "a", "b", "c", "d" };
>   	GLuint block_indices[3];
> @@ -75,21 +75,7 @@ piglit_init(int argc, char **argv)
>
>   	piglit_require_extension("GL_ARB_uniform_buffer_object");
>
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_source);
> -	if (!vs) {
> -		printf("Failed to compile VS:\n%s", vs_source);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> -
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_source);
> -	if (!fs) {
> -		printf("Failed to compile FS:\n%s", fs_source);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> -
> -	prog = piglit_link_simple_program(vs, fs);
> -	if (!prog)
> -		piglit_report_result(PIGLIT_FAIL);
> +	prog = piglit_build_simple_program(vs_source, fs_source);
>
>   	for (i = 0; i < 3; i++) {
>   		block_indices[i] =
> diff --git a/tests/spec/arb_uniform_buffer_object/getactiveuniformsiv-uniform-matrix-stride.c b/tests/spec/arb_uniform_buffer_object/getactiveuniformsiv-uniform-matrix-stride.c
> index 5320d7d..c139c6b 100644
> --- a/tests/spec/arb_uniform_buffer_object/getactiveuniformsiv-uniform-matrix-stride.c
> +++ b/tests/spec/arb_uniform_buffer_object/getactiveuniformsiv-uniform-matrix-stride.c
> @@ -65,7 +65,7 @@ void
>   piglit_init(int argc, char **argv)
>   {
>   	bool pass = true;
> -	GLuint fs, prog;
> +	GLuint prog;
>   	const char *uniform_names[] = {
>   		"v4",
>   		"m4",
> @@ -90,12 +90,7 @@ piglit_init(int argc, char **argv)
>
>   	piglit_require_extension("GL_ARB_uniform_buffer_object");
>
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_source);
> -	prog = piglit_link_simple_program(0, fs);
> -	if (!fs || !prog) {
> -		printf("Failed to compile FS:\n%s", fs_source);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> +	prog = piglit_build_simple_program(NULL, fs_source);
>
>   	glGetUniformIndices(prog, ARRAY_SIZE(uniform_names), uniform_names,
>   			    uniform_indices);
> diff --git a/tests/spec/arb_uniform_buffer_object/getactiveuniformsiv-uniform-type.c b/tests/spec/arb_uniform_buffer_object/getactiveuniformsiv-uniform-type.c
> index 7831cb7..89f25af 100644
> --- a/tests/spec/arb_uniform_buffer_object/getactiveuniformsiv-uniform-type.c
> +++ b/tests/spec/arb_uniform_buffer_object/getactiveuniformsiv-uniform-type.c
> @@ -57,7 +57,7 @@ test_format(const struct uniform_type *type)
>   		"	gl_FragColor = vec4(align_test + float(%s));\n"
>   		"}\n";
>   	char *fs_source;
> -	GLuint fs, prog;
> +	GLuint prog;
>   	const char *uniform_name = "u";
>   	GLuint uniform_index;
>   	GLint uniform_type;
> @@ -72,21 +72,13 @@ test_format(const struct uniform_type *type)
>   	}
>
>   	asprintf(&fs_source, fs_template, type->type, deref);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_source);
> -	prog = piglit_link_simple_program(0, fs);
> -	if (!fs || !prog) {
> -		fprintf(stderr, "Failed to compile shader:\n%s", fs_source);
> -		free(fs_source);
> -		piglit_report_result(PIGLIT_FAIL);
> -	} else {
> -		free(fs_source);
> -	}
> +	prog = piglit_build_simple_program(NULL, fs_source);
> +	free(fs_source);
>
>   	glGetUniformIndices(prog, 1, &uniform_name, &uniform_index);
>   	glGetActiveUniformsiv(prog, 1, &uniform_index,
>   			      GL_UNIFORM_TYPE, &uniform_type);
>
> -	glDeleteShader(fs);
>   	glDeleteProgram(prog);
>
>   	printf("%-20s %20s %20s%s\n",
> diff --git a/tests/spec/arb_uniform_buffer_object/getprogramiv.c b/tests/spec/arb_uniform_buffer_object/getprogramiv.c
> index d635d06..e1ae6a3 100644
> --- a/tests/spec/arb_uniform_buffer_object/getprogramiv.c
> +++ b/tests/spec/arb_uniform_buffer_object/getprogramiv.c
> @@ -90,23 +90,11 @@ struct {
>   static bool
>   test_shader(int test)
>   {
> -	GLuint fs, prog;
> +	GLuint prog;
>   	const char *source = tests[test].source;
>   	int namelen = 9999, blocks = 9999;
>
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, source);
> -	if (!fs) {
> -		fprintf(stderr, "%d: Failed to compile shader:\n%s",
> -			test, source);
> -		return false;
> -	}
> -
> -	prog = piglit_link_simple_program(fs, 0);
> -	if (!prog) {
> -		fprintf(stderr, "%d: Failed to link shader:\n%s", test, source);
> -		glDeleteShader(fs);
> -		return false;
> -	}
> +	prog = piglit_build_simple_program(NULL, source);
>
>   	glGetProgramiv(prog, GL_ACTIVE_UNIFORM_BLOCKS, &blocks);
>   	if (blocks != tests[test].blocks) {
> @@ -127,7 +115,6 @@ test_shader(int test)
>   	}
>
>   	glDeleteProgram(prog);
> -	glDeleteShader(fs);
>
>   	return true;
>   }
> diff --git a/tests/spec/arb_uniform_buffer_object/getuniformblockindex.c b/tests/spec/arb_uniform_buffer_object/getuniformblockindex.c
> index f6f87b3..84a5771 100644
> --- a/tests/spec/arb_uniform_buffer_object/getuniformblockindex.c
> +++ b/tests/spec/arb_uniform_buffer_object/getuniformblockindex.c
> @@ -57,19 +57,10 @@ piglit_init(int argc, char **argv)
>   	bool pass = true;
>   	int expected_ub_b_index;
>   	int index;
> -	GLuint fs;
>
>   	piglit_require_extension("GL_ARB_uniform_buffer_object");
>
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, frag_shader_text);
> -	if (!fs) {
> -		printf("Failed to compile FS:\n%s", frag_shader_text);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> -
> -	prog = piglit_link_simple_program(0, fs);
> -	if (!prog)
> -		piglit_report_result(PIGLIT_FAIL);
> +	prog = piglit_build_simple_program(NULL, frag_shader_text);
>
>   	index = glGetUniformBlockIndex(prog, "ub_a");
>   	printf("Uniform block \"ub_a\" index: 0x%08x\n", index);
> diff --git a/tests/spec/arb_uniform_buffer_object/getuniformindices.c b/tests/spec/arb_uniform_buffer_object/getuniformindices.c
> index 894e0d7..900bad5 100644
> --- a/tests/spec/arb_uniform_buffer_object/getuniformindices.c
> +++ b/tests/spec/arb_uniform_buffer_object/getuniformindices.c
> @@ -54,7 +54,6 @@ void
>   piglit_init(int argc, char **argv)
>   {
>   	bool pass = true;
> -	GLuint fs;
>   	GLuint save_index = 0xaaaaaaaa;
>   	const GLchar *one_uniform = "a";
>   	const GLchar *bad_uniform = "d";
> @@ -65,15 +64,7 @@ piglit_init(int argc, char **argv)
>
>   	piglit_require_extension("GL_ARB_uniform_buffer_object");
>
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, frag_shader_text);
> -	if (!fs) {
> -		printf("Failed to compile FS:\n%s", frag_shader_text);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> -
> -	prog = piglit_link_simple_program(0, fs);
> -	if (!prog)
> -		piglit_report_result(PIGLIT_FAIL);
> +	prog = piglit_build_simple_program(NULL, frag_shader_text);
>
>   	/* From the GL_ARB_uniform_buffer_object spec:
>   	 *
> diff --git a/tests/spec/arb_uniform_buffer_object/getuniformlocation.c b/tests/spec/arb_uniform_buffer_object/getuniformlocation.c
> index e6045d8..af29b21 100644
> --- a/tests/spec/arb_uniform_buffer_object/getuniformlocation.c
> +++ b/tests/spec/arb_uniform_buffer_object/getuniformlocation.c
> @@ -64,21 +64,11 @@ void
>   piglit_init(int argc, char **argv)
>   {
>   	bool pass = true;
> -	GLuint fs;
>   	int location;
>
>   	piglit_require_extension("GL_ARB_uniform_buffer_object");
>
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_source);
> -	if (!fs) {
> -		printf("Failed to compile FS:\n%s", fs_source);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> -
> -	prog = piglit_link_simple_program(0, fs);
> -	if (!prog)
> -		piglit_report_result(PIGLIT_FAIL);
> -
> +	prog = piglit_build_simple_program(NULL, fs_source);
>
>   	location = glGetUniformLocation(prog, "a");
>   	if (location != -1) {
> diff --git a/tests/spec/arb_uniform_buffer_object/layout-std140-base-size-and-alignment.c b/tests/spec/arb_uniform_buffer_object/layout-std140-base-size-and-alignment.c
> index 1a4e8fe..15f38b2 100644
> --- a/tests/spec/arb_uniform_buffer_object/layout-std140-base-size-and-alignment.c
> +++ b/tests/spec/arb_uniform_buffer_object/layout-std140-base-size-and-alignment.c
> @@ -65,7 +65,7 @@ test_format(const struct uniform_type *type, bool row_major)
>   		"	gl_FragColor = vec4(pad) + vec4(%s) + vec4(size_test);\n"
>   		"}\n";
>   	char *fs_source;
> -	GLuint fs, prog;
> +	GLuint prog;
>   	const char *uniform_names[] = { "u", "size_test" };
>   	GLuint uniform_indices[2];
>   	GLint offsets[2];
> @@ -90,19 +90,13 @@ test_format(const struct uniform_type *type, bool row_major)
>   		 row_major && type->size > 16 ? "layout(row_major) " : "",
>   		 type->type,
>   		 deref);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_source);
> -	prog = piglit_link_simple_program(0, fs);
> -	if (!fs || !prog) {
> -		fprintf(stderr, "Failed to compile shader:\n%s", fs_source);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> +	prog = piglit_build_simple_program(NULL, fs_source);
>   	free(fs_source);
>
>   	glGetUniformIndices(prog, 2, uniform_names, uniform_indices);
>   	glGetActiveUniformsiv(prog, 2, uniform_indices,
>   			      GL_UNIFORM_OFFSET, offsets);
>
> -	glDeleteShader(fs);
>   	glDeleteProgram(prog);
>
>   	offset = offsets[0];
> diff --git a/tests/spec/arb_uniform_buffer_object/layout-std140.c b/tests/spec/arb_uniform_buffer_object/layout-std140.c
> index f10b558..43d0336 100644
> --- a/tests/spec/arb_uniform_buffer_object/layout-std140.c
> +++ b/tests/spec/arb_uniform_buffer_object/layout-std140.c
> @@ -103,20 +103,10 @@ static const char frag_shader_text[] =
>   static void
>   init(void)
>   {
> -	GLuint fs;
> -
>   	piglit_require_GLSL_version(130);
>   	piglit_require_extension("GL_ARB_uniform_buffer_object");
>
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, frag_shader_text);
> -	if (!fs) {
> -		printf("Failed to compile FS:\n%s", frag_shader_text);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> -
> -	prog = piglit_link_simple_program(0, fs);
> -	if (!prog)
> -		piglit_report_result(PIGLIT_FAIL);
> +	prog = piglit_build_simple_program(NULL, frag_shader_text);
>
>   	glUseProgram(prog);
>   }
> diff --git a/tests/spec/arb_uniform_buffer_object/negative-getactiveuniformblockiv.c b/tests/spec/arb_uniform_buffer_object/negative-getactiveuniformblockiv.c
> index e4ebfac..68f7fdb 100644
> --- a/tests/spec/arb_uniform_buffer_object/negative-getactiveuniformblockiv.c
> +++ b/tests/spec/arb_uniform_buffer_object/negative-getactiveuniformblockiv.c
> @@ -73,17 +73,12 @@ piglit_init(int argc, char **argv)
>   		"void main() {\n"
>   		"	gl_FragColor = vec4(u);\n"
>   		"}\n";
> -	GLuint fs, prog;
> +	GLuint prog;
>   	GLint junk = 0xd0d0, unwritten_junk = junk;
>
>   	piglit_require_extension("GL_ARB_uniform_buffer_object");
>
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_source);
> -	prog = piglit_link_simple_program(0, fs);
> -	if (!fs || !prog) {
> -		fprintf(stderr, "Failed to compile shader:\n%s", fs_source);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> +	prog = piglit_build_simple_program(NULL, fs_source);
>
>   	/* Test a bad pname (it's one for glActiveUniformsiv). */
>   	glGetActiveUniformBlockiv(prog, 0, GL_UNIFORM_TYPE, &junk);
> diff --git a/tests/spec/arb_uniform_buffer_object/negative-getactiveuniformsiv.c b/tests/spec/arb_uniform_buffer_object/negative-getactiveuniformsiv.c
> index 4da720e..1c4e49f 100644
> --- a/tests/spec/arb_uniform_buffer_object/negative-getactiveuniformsiv.c
> +++ b/tests/spec/arb_uniform_buffer_object/negative-getactiveuniformsiv.c
> @@ -74,19 +74,14 @@ piglit_init(int argc, char **argv)
>   		"void main() {\n"
>   		"	gl_FragColor = vec4(u);\n"
>   		"}\n";
> -	GLuint fs, prog;
> +	GLuint prog;
>   	GLint junk = 0xd0d0;
>   	GLint unwritten_junk = junk;
>   	GLuint good_index = 0, bad_index = 1;
>
>   	piglit_require_extension("GL_ARB_uniform_buffer_object");
>
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_source);
> -	prog = piglit_link_simple_program(0, fs);
> -	if (!fs || !prog) {
> -		fprintf(stderr, "Failed to compile shader:\n%s", fs_source);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> +	prog = piglit_build_simple_program(NULL, fs_source);
>
>   	/* Test a bad pname (it's one for glActiveUniformBlockiv). */
>   	glGetActiveUniformsiv(prog, 1, &good_index,
> diff --git a/tests/spec/arb_uniform_buffer_object/row-major.c b/tests/spec/arb_uniform_buffer_object/row-major.c
> index 50cb48a..9489d2e 100644
> --- a/tests/spec/arb_uniform_buffer_object/row-major.c
> +++ b/tests/spec/arb_uniform_buffer_object/row-major.c
> @@ -193,20 +193,10 @@ piglit_init(int argc, char **argv)
>   {
>   	bool pass = true;
>   	unsigned int i;
> -	GLuint fs, prog;
> +	GLuint prog;
>
>   	piglit_require_extension("GL_ARB_uniform_buffer_object");
> -
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, source);
> -	if (!fs) {
> -		fprintf(stderr, "Failed to compile shader:\n%s", source);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> -	prog = piglit_link_simple_program(fs, 0);
> -	if (!fs || !prog) {
> -		fprintf(stderr, "Failed to compile/link shader:\n%s", source);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> +	prog = piglit_build_simple_program(NULL, source);
>
>   	for (i = 0; i < ARRAY_SIZE(uniforms); i++) {
>   		GLuint index;
> diff --git a/tests/spec/arb_uniform_buffer_object/uniformblockbinding.c b/tests/spec/arb_uniform_buffer_object/uniformblockbinding.c
> index d231bb2..9e426a7 100644
> --- a/tests/spec/arb_uniform_buffer_object/uniformblockbinding.c
> +++ b/tests/spec/arb_uniform_buffer_object/uniformblockbinding.c
> @@ -72,7 +72,7 @@ void
>   piglit_init(int argc, char **argv)
>   {
>   	int i;
> -	GLuint fs, prog;
> +	GLuint prog;
>   	const char *source =
>   		"#extension GL_ARB_uniform_buffer_object : enable\n"
>   		"uniform a { float u1; };\n"
> @@ -86,12 +86,7 @@ piglit_init(int argc, char **argv)
>
>   	piglit_require_extension("GL_ARB_uniform_buffer_object");
>
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, source);
> -	prog = piglit_link_simple_program(fs, 0);
> -	if (!fs || !prog) {
> -		fprintf(stderr, "Failed to compile shader:\n%s", source);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> +	prog = piglit_build_simple_program(NULL, source);
>
>   	glGetProgramiv(prog, GL_ACTIVE_UNIFORM_BLOCKS, &blocks);
>   	assert(blocks == 2);
> @@ -151,7 +146,6 @@ piglit_init(int argc, char **argv)
>   	pass = piglit_check_gl_error(GL_INVALID_VALUE) && pass;
>
>   	glDeleteProgram(prog);
> -	glDeleteShader(fs);
>
>   	piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
>   }
> diff --git a/tests/spec/arb_vertex_buffer_object/mixed-immediate-and-vbo.c b/tests/spec/arb_vertex_buffer_object/mixed-immediate-and-vbo.c
> index 357f05b..aae9e8e 100644
> --- a/tests/spec/arb_vertex_buffer_object/mixed-immediate-and-vbo.c
> +++ b/tests/spec/arb_vertex_buffer_object/mixed-immediate-and-vbo.c
> @@ -70,7 +70,7 @@ piglit_display(void)
>   	};
>   	uint32_t index_data[] = { 0, 1, 2, 3 };
>   	uintptr_t index_offset = sizeof(vertex_data);
> -	GLuint prog, vs;
> +	GLuint prog;
>
>   	glClearColor(1.0, 0.0, 0.0, 0.0);
>   	glClear(GL_COLOR_BUFFER_BIT);
> @@ -79,8 +79,7 @@ piglit_display(void)
>   	 * color data into a uniform in the fixed function vertex
>   	 * shader.
>   	 */
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_source);
> -	prog = piglit_link_simple_program(vs, 0);
> +	prog = piglit_build_simple_program(vs_source, NULL);
>   	glUseProgram(prog);
>
>   	glGenBuffersARB(1, &vbo);
> diff --git a/tests/spec/ext_texture_array/maxlayers.c b/tests/spec/ext_texture_array/maxlayers.c
> index 9236d56..b0d3f30 100644
> --- a/tests/spec/ext_texture_array/maxlayers.c
> +++ b/tests/spec/ext_texture_array/maxlayers.c
> @@ -132,7 +132,7 @@ piglit_display(void)
>   void
>   piglit_init(int argc, char **argv)
>   {
> -	GLuint prog, fs;
> +	GLuint prog;
>
>   	piglit_require_extension("GL_EXT_texture_array");
>
> @@ -144,10 +144,7 @@ piglit_init(int argc, char **argv)
>   	printf("Testing %d texture layers\n", max_layers);
>
>   	/* Make shader programs */
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_source);
> -	prog = piglit_link_simple_program(0, fs);
> -	if (!fs || !prog)
> -		piglit_report_result(PIGLIT_FAIL);
> +	prog = piglit_build_simple_program(NULL, fs_source);
>
>   	glUseProgram(prog);
>   	layer_loc = glGetUniformLocation(prog, "layer");
> diff --git a/tests/spec/ext_texture_integer/fbo-blending.c b/tests/spec/ext_texture_integer/fbo-blending.c
> index ad8e66d..f0c8665 100644
> --- a/tests/spec/ext_texture_integer/fbo-blending.c
> +++ b/tests/spec/ext_texture_integer/fbo-blending.c
> @@ -263,7 +263,7 @@ piglit_init(int argc, char **argv)
>   		"{\n"
>   		"   result = color;\n"
>   		"}\n";
> -	GLuint fs, vs, prog;
> +	GLuint prog;
>   	int f, i;
>   	enum piglit_result result = PIGLIT_SKIP;
>   	const struct format_info *test_formats = formats;
> @@ -287,11 +287,7 @@ piglit_init(int argc, char **argv)
>   	piglit_require_extension("GL_EXT_texture_integer");
>   	piglit_require_GLSL_version(130);
>
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_source);
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_source);
> -	prog = piglit_link_simple_program(vs, fs);
> -	if (!prog || !fs || !vs)
> -		piglit_report_result(PIGLIT_FAIL);
> +	prog = piglit_build_simple_program(vs_source, fs_source);
>   	glUseProgram(prog);
>   	color_loc = glGetUniformLocation(prog, "color");
>   	glUniform4uiv(color_loc, 1, color);
> diff --git a/tests/spec/ext_texture_integer/fbo-integer-readpixels-sint-uint.c b/tests/spec/ext_texture_integer/fbo-integer-readpixels-sint-uint.c
> index a293154..1682253 100644
> --- a/tests/spec/ext_texture_integer/fbo-integer-readpixels-sint-uint.c
> +++ b/tests/spec/ext_texture_integer/fbo-integer-readpixels-sint-uint.c
> @@ -69,7 +69,7 @@ static const char *PassthroughFragShaderText =
>      "   gl_FragColor = gl_Color; \n"
>      "} \n";
>
> -static GLuint PassthroughFragShader, PassthroughProgram;
> +static GLuint PassthroughProgram;
>
>
>   #if 0
> @@ -289,10 +289,8 @@ piglit_init(int argc, char **argv)
>      piglit_require_extension("GL_EXT_texture_integer");
>      piglit_require_GLSL_version(130);
>
> -   PassthroughFragShader = piglit_compile_shader_text(GL_FRAGMENT_SHADER,
> -                                                      PassthroughFragShaderText);
> -   assert(PassthroughFragShader);
> -   PassthroughProgram = piglit_link_simple_program(0, PassthroughFragShader);
> +   PassthroughProgram =
> +	   piglit_build_simple_program(NULL, PassthroughFragShaderText);
>
>      (void) check_error(__FILE__, __LINE__);
>
> diff --git a/tests/spec/ext_texture_integer/texture-integer-glsl130.c b/tests/spec/ext_texture_integer/texture-integer-glsl130.c
> index 228b837..1fefa5a 100644
> --- a/tests/spec/ext_texture_integer/texture-integer-glsl130.c
> +++ b/tests/spec/ext_texture_integer/texture-integer-glsl130.c
> @@ -141,7 +141,7 @@ static const char *FragShaderText =
>   	"   gl_FragColor = t + bias; \n"
>   	"} \n";
>
> -static GLuint FragShader, Program;
> +static GLuint Program;
>
>
>   static int
> @@ -566,11 +566,7 @@ piglit_init(int argc, char **argv)
>   	piglit_require_extension("GL_EXT_texture_integer");
>   	piglit_require_GLSL_version(130);
>
> -	FragShader = piglit_compile_shader_text(GL_FRAGMENT_SHADER,
> -						FragShaderText);
> -	assert(FragShader);
> -
> -	Program = piglit_link_simple_program(0, FragShader);
> +	Program = piglit_build_simple_program(NULL, FragShaderText);
>
>   	glUseProgram(Program);
>
> diff --git a/tests/spec/ext_texture_swizzle/depth_texture_mode_and_swizzle.c b/tests/spec/ext_texture_swizzle/depth_texture_mode_and_swizzle.c
> index d0d0270..2665ba1 100644
> --- a/tests/spec/ext_texture_swizzle/depth_texture_mode_and_swizzle.c
> +++ b/tests/spec/ext_texture_swizzle/depth_texture_mode_and_swizzle.c
> @@ -153,7 +153,7 @@ setup_texture()
>   void
>   setup_shaders()
>   {
> -	GLuint vs, fs, prog, tex_location;
> +	GLuint prog, tex_location;
>
>   	static const char *vs_code =
>   		 "#version 120\n"
> @@ -169,20 +169,7 @@ setup_shaders()
>   		 "   gl_FragColor = texture2D(tex, vec2(0.5, 0.5));\n"
>   		 "}\n";
>
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_code);
> -	if (!vs) {
> -		printf("VS code:\n%s", vs_code);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_code);
> -	if (!fs) {
> -		printf("FS code:\n%s", fs_code);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> -	prog = piglit_link_simple_program(vs, fs);
> -	if (!piglit_link_check_status(prog))
> -		piglit_report_result(PIGLIT_FAIL);
> -
> +	prog = piglit_build_simple_program(vs_code, fs_code);
>   	glUseProgram(prog);
>
>   	tex_location = glGetUniformLocation(prog, "tex");
> diff --git a/tests/spec/ext_timer_query/time-elapsed.c b/tests/spec/ext_timer_query/time-elapsed.c
> index a407b87..e0da672 100644
> --- a/tests/spec/ext_timer_query/time-elapsed.c
> +++ b/tests/spec/ext_timer_query/time-elapsed.c
> @@ -310,15 +310,9 @@ retry:
>   void
>   piglit_init(int argc, char **argv)
>   {
> -	GLint vs, fs;
> -
>   	piglit_require_gl_version(20);
>
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_text);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_text);
> -	prog = piglit_link_simple_program(vs, fs);
> -	glDeleteShader(vs);
> -	glDeleteShader(fs);
> +	prog = piglit_build_simple_program(vs_text, fs_text);
>   	iters_loc = glGetUniformLocation(prog, "iters");
>
>   	piglit_require_extension("GL_EXT_timer_query");
> diff --git a/tests/spec/gl-2.0/api/getattriblocation-conventional.c b/tests/spec/gl-2.0/api/getattriblocation-conventional.c
> index 5396965..d702784 100644
> --- a/tests/spec/gl-2.0/api/getattriblocation-conventional.c
> +++ b/tests/spec/gl-2.0/api/getattriblocation-conventional.c
> @@ -50,13 +50,11 @@ piglit_display(void)
>
>   void piglit_init(int argc, char **argv)
>   {
> -	GLint vert;
>   	GLint prog;
>   	GLint loc;
>
>   	piglit_require_vertex_shader();
> -	vert = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_code);
> -	prog = piglit_link_simple_program(vert, 0);
> +	prog = piglit_build_simple_program(vs_code, NULL);
>
>   	loc = glGetAttribLocation(prog, "gl_Vertex");
>   	printf("Attribute location reported for gl_Vertex is %d.\n", loc);
> diff --git a/tests/spec/gl-2.0/edgeflag.c b/tests/spec/gl-2.0/edgeflag.c
> index 1ffa778..ff46ab1 100644
> --- a/tests/spec/gl-2.0/edgeflag.c
> +++ b/tests/spec/gl-2.0/edgeflag.c
> @@ -112,18 +112,9 @@ const char *fs_source =
>   void
>   piglit_init(int argc, char **argv)
>   {
> -	GLuint vs, fs, prog;
> -
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_source);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_source);
> -	prog = piglit_link_simple_program(vs, fs);
> -
> -	if (!prog || !vs || !fs) {
> -		printf("VS source:\n%s", vs_source);
> -		printf("FS source:\n%s", fs_source);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> +	GLuint prog;
>
> +	prog = piglit_build_simple_program(vs_source, fs_source);
>   	glUseProgram(prog);
>   	color_index = glGetAttribLocation(prog, "in_color");
>   }
> diff --git a/tests/spec/gl-2.0/vertex-program-two-side.c b/tests/spec/gl-2.0/vertex-program-two-side.c
> index a24e10a..3075ffd 100644
> --- a/tests/spec/gl-2.0/vertex-program-two-side.c
> +++ b/tests/spec/gl-2.0/vertex-program-two-side.c
> @@ -147,7 +147,6 @@ setup_output(char **out, const char *name, float *values)
>   void
>   piglit_init(int argc, char **argv)
>   {
> -	GLint vs, fs;
>   	char *vs_outputs[4] = {"", "", "", ""};
>   	char *vs_source;
>   	int i;
> @@ -199,16 +198,7 @@ piglit_init(int argc, char **argv)
>   		 vs_outputs[2],
>   		 vs_outputs[3]);
>
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_source);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_source);
> -	prog = piglit_link_simple_program(vs, fs);
> -
> -	if (!prog || !vs || !fs) {
> -		printf("VS source:\n%s", vs_source);
> -		printf("FS source:\n%s", fs_source);
> -		piglit_report_result(PIGLIT_FAIL);
> -	}
> -
> +	prog = piglit_build_simple_program(vs_source, fs_source);
>   	glUseProgram(prog);
>   	draw_secondary_loc = glGetUniformLocation(prog, "draw_secondary");
>   	assert(draw_secondary_loc != -1);
> diff --git a/tests/spec/gl-3.0/texture-integer.c b/tests/spec/gl-3.0/texture-integer.c
> index bb60168..f2a5692 100644
> --- a/tests/spec/gl-3.0/texture-integer.c
> +++ b/tests/spec/gl-3.0/texture-integer.c
> @@ -374,15 +374,13 @@ piglit_display(void)
>   void
>   piglit_init(int argc, char **argv)
>   {
> -	GLuint fragShader, program;
> +	GLuint program;
>           static GLuint tex;
>
>   	piglit_require_gl_version(30);
>   	piglit_require_GLSL_version(130);
>
> -	fragShader = piglit_compile_shader_text(GL_FRAGMENT_SHADER, FragShaderText);
> -
> -	program = piglit_link_simple_program(0, fragShader);
> +	program = piglit_build_simple_program(NULL, FragShaderText);
>   	glUseProgram(program);
>
>   	BiasUniform = glGetUniformLocation(program, "bias");
> diff --git a/tests/spec/gles-2.0/glsl-fs-pointcoord.c b/tests/spec/gles-2.0/glsl-fs-pointcoord.c
> index 9dacf55..4be7b74 100644
> --- a/tests/spec/gles-2.0/glsl-fs-pointcoord.c
> +++ b/tests/spec/gles-2.0/glsl-fs-pointcoord.c
> @@ -122,7 +122,6 @@ piglit_display(void)
>
>   void piglit_init(int argc, char**argv)
>   {
> -	GLint vs, fs;
>   	GLint point_size_limits[2];
>
>   	glGetIntegerv(GL_ALIASED_POINT_SIZE_RANGE, point_size_limits);
> @@ -133,9 +132,7 @@ void piglit_init(int argc, char**argv)
>   	if (point_size > piglit_height)
>   		point_size = piglit_height;
>
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_source);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_source);
> -	prog = piglit_link_simple_program(vs, fs);
> +	prog = piglit_build_simple_program(vs_source, fs_source);
>
>   	glUseProgram(prog);
>   }
> diff --git a/tests/spec/gles-3.0/oes_compressed_etc2_texture-miptree.c b/tests/spec/gles-3.0/oes_compressed_etc2_texture-miptree.c
> index 33537f4..8881432 100644
> --- a/tests/spec/gles-3.0/oes_compressed_etc2_texture-miptree.c
> +++ b/tests/spec/gles-3.0/oes_compressed_etc2_texture-miptree.c
> @@ -168,9 +168,6 @@ piglit_init(int argc, char **argv)
>   		0, 1,
>   	};
>
> -	GLuint vs;
> -	GLuint fs;
> -
>   	GLint vertex_loc;
>   	GLuint vertex_buf;
>   	GLuint vao;
> @@ -246,10 +243,7 @@ piglit_init(int argc, char **argv)
>   	glClearColor(0.3, 0.5, 1.0, 1.0);
>   	glViewport(0, 0, window_width, window_height);
>
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_source);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_source);
> -	prog = piglit_link_simple_program(vs, fs);
> -	assert(prog != 0);
> +	prog = piglit_build_simple_program(vs_source, fs_source);
>   	glUseProgram(prog);
>
>   	vertex_loc = glGetAttribLocation(prog, "vertex");
> diff --git a/tests/spec/glsl-1.10/execution/clipping/clip-plane-transformation.c b/tests/spec/glsl-1.10/execution/clipping/clip-plane-transformation.c
> index 9844bc3..e8ac2f5 100644
> --- a/tests/spec/glsl-1.10/execution/clipping/clip-plane-transformation.c
> +++ b/tests/spec/glsl-1.10/execution/clipping/clip-plane-transformation.c
> @@ -195,8 +195,6 @@ char *setters;
>   void
>   setup_glsl_programs()
>   {
> -	GLuint vs;
> -	GLuint fs;
>   	GLuint prog;
>
>   	char vert[4096];
> @@ -234,14 +232,7 @@ setup_glsl_programs()
>   		"}",
>   		version_directive);
>
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vert);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, frag);
> -	prog = glCreateProgram();
> -	glAttachShader(prog, vs);
> -	glAttachShader(prog, fs);
> -	glLinkProgram(prog);
> -	glDeleteShader(vs);
> -	glDeleteShader(fs);
> +	prog = piglit_build_simple_program(vert, frag);
>   	glUseProgram(prog);
>   	position_angle_loc = glGetUniformLocation(prog, "position_angle");
>   	if (use_clip_vertex) {
> diff --git a/tests/spec/glsl-1.30/execution/clipping/max-clip-distances.c b/tests/spec/glsl-1.30/execution/clipping/max-clip-distances.c
> index d803096..9e5a3ee 100644
> --- a/tests/spec/glsl-1.30/execution/clipping/max-clip-distances.c
> +++ b/tests/spec/glsl-1.30/execution/clipping/max-clip-distances.c
> @@ -157,18 +157,9 @@ piglit_display(void)
>   void
>   piglit_init(int argc, char **argv)
>   {
> -	GLuint vs;
> -	GLuint fs;
> -
>   	piglit_require_GLSL();
>   	piglit_require_GLSL_version(130);
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vert);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, frag);
> -	prog = glCreateProgram();
> -	glAttachShader(prog, vs);
> -	glAttachShader(prog, fs);
> +	prog = piglit_build_simple_program(vert, frag);
>   	glLinkProgram(prog);

Also delete the glLinkProgram.

> -	glDeleteShader(vs);
> -	glDeleteShader(fs);
>   	glUseProgram(prog);
>   }
> diff --git a/tests/spec/glsl-1.30/execution/fs-discard-exit-2.c b/tests/spec/glsl-1.30/execution/fs-discard-exit-2.c
> index cdd01be..78ab97d 100644
> --- a/tests/spec/glsl-1.30/execution/fs-discard-exit-2.c
> +++ b/tests/spec/glsl-1.30/execution/fs-discard-exit-2.c
> @@ -145,15 +145,11 @@ piglit_display(void)
>   void
>   piglit_init(int argc, char **argv)
>   {
> -	int vs, fs, prog;
> +	int prog;
>
>   	piglit_require_GLSL_version(130);
>
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_source);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_source);
> -	prog = piglit_link_simple_program(vs, fs);
> -	if (!vs || !fs || !prog)
> -		piglit_report_result(PIGLIT_FAIL);
> +	prog = piglit_build_simple_program(vs_source, fs_source);
>
>   	coord1_location = glGetUniformLocation(prog, "coord1");
>   	coord2_location = glGetUniformLocation(prog, "coord2");
> diff --git a/tests/spec/glsl-1.30/execution/fs-execution-ordering.c b/tests/spec/glsl-1.30/execution/fs-execution-ordering.c
> index b7780cd..bf8e66b 100644
> --- a/tests/spec/glsl-1.30/execution/fs-execution-ordering.c
> +++ b/tests/spec/glsl-1.30/execution/fs-execution-ordering.c
> @@ -90,13 +90,9 @@ static const char *fstext =
>   void
>   piglit_init(int argc, char **argv)
>   {
> -	GLuint vs, fs;
> -
>   	piglit_require_GLSL_version(130);
>
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vstext);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fstext);
> -	prog = piglit_link_simple_program(vs, fs);
> +	prog = piglit_build_simple_program(vstext, fstext);
>   	glGenBuffers(1, &vbo_handle);
>
>   	if (!piglit_check_gl_error(GL_NO_ERROR))
> diff --git a/tests/spec/glsl-1.30/execution/fs-texelFetch-2D.c b/tests/spec/glsl-1.30/execution/fs-texelFetch-2D.c
> index 5434477..494cfa4 100644
> --- a/tests/spec/glsl-1.30/execution/fs-texelFetch-2D.c
> +++ b/tests/spec/glsl-1.30/execution/fs-texelFetch-2D.c
> @@ -116,7 +116,7 @@ piglit_display(void)
>   void
>   piglit_init(int argc, char **argv)
>   {
> -	int vs, fs, prog;
> +	int prog;
>   	int tex_location;
>
>   	piglit_require_GLSL_version(130);
> @@ -127,9 +127,7 @@ piglit_init(int argc, char **argv)
>
>   	piglit_ortho_projection(piglit_width, piglit_height, false);
>
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vert);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, frag);
> -	prog = piglit_link_simple_program(vs, fs);
> +	prog = piglit_build_simple_program(vert, frag);
>
>   	tex_location = glGetUniformLocation(prog, "tex");
>   	lod_location = glGetUniformLocation(prog, "lod");
> diff --git a/tests/spec/glsl-1.30/execution/fs-texelFetchOffset-2D.c b/tests/spec/glsl-1.30/execution/fs-texelFetchOffset-2D.c
> index bfbe406..cf5c1ec 100644
> --- a/tests/spec/glsl-1.30/execution/fs-texelFetchOffset-2D.c
> +++ b/tests/spec/glsl-1.30/execution/fs-texelFetchOffset-2D.c
> @@ -137,7 +137,7 @@ piglit_display(void)
>   void
>   piglit_init(int argc, char **argv)
>   {
> -	int vs, fs, prog;
> +	int prog;
>   	int tex_location;
>
>   	piglit_require_GLSL_version(130);
> @@ -148,9 +148,7 @@ piglit_init(int argc, char **argv)
>
>   	piglit_ortho_projection(piglit_width, piglit_height, false);
>
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vert);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, frag);
> -	prog = piglit_link_simple_program(vs, fs);
> +	prog = piglit_build_simple_program(vert, frag);
>
>   	tex_location = glGetUniformLocation(prog, "tex");
>   	lod_location = glGetUniformLocation(prog, "lod");
> diff --git a/tests/spec/glsl-1.30/execution/fs-textureOffset-2D.c b/tests/spec/glsl-1.30/execution/fs-textureOffset-2D.c
> index 4d2f7c5..e796df7 100644
> --- a/tests/spec/glsl-1.30/execution/fs-textureOffset-2D.c
> +++ b/tests/spec/glsl-1.30/execution/fs-textureOffset-2D.c
> @@ -132,7 +132,7 @@ piglit_display(void)
>   void
>   piglit_init(int argc, char **argv)
>   {
> -	int vs, fs, prog;
> +	int prog;
>
>   	piglit_require_GLSL_version(130);
>
> @@ -142,9 +142,7 @@ piglit_init(int argc, char **argv)
>   			    GL_UNSIGNED_NORMALIZED);
>
>   	/* TODO: test other texture instructions */
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vert);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fragtexlodoffset);
> -	prog = piglit_link_simple_program(vs, fs);
> +	prog = piglit_build_simple_program(vert, fragtexlodoffset);
>
>   	lod_location = glGetUniformLocation(prog, "lod");
>   	pos_location = glGetUniformLocation(prog, "pos");
> diff --git a/tests/spec/glsl-1.30/execution/vertexid-beginend.c b/tests/spec/glsl-1.30/execution/vertexid-beginend.c
> index 27cf942..366279c 100644
> --- a/tests/spec/glsl-1.30/execution/vertexid-beginend.c
> +++ b/tests/spec/glsl-1.30/execution/vertexid-beginend.c
> @@ -64,16 +64,11 @@ static const char fs_text[] =
>   void
>   piglit_init(int argc, char **argv)
>   {
> -	GLuint vs, fs, prog;
> +	GLuint prog;
>
>   	piglit_require_GLSL_version(130);
>
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_text);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_text);
> -	prog = piglit_link_simple_program(vs, fs);
> -
> -	if (!vs || !fs || !prog)
> -		piglit_report_result(PIGLIT_FAIL);
> +	prog = piglit_build_simple_program(vs_text, fs_text);
>
>   	glUseProgram(prog);
>   }
> diff --git a/tests/spec/glsl-1.30/execution/vertexid-drawarrays.c b/tests/spec/glsl-1.30/execution/vertexid-drawarrays.c
> index 6a0db8d..26b3df1 100644
> --- a/tests/spec/glsl-1.30/execution/vertexid-drawarrays.c
> +++ b/tests/spec/glsl-1.30/execution/vertexid-drawarrays.c
> @@ -64,16 +64,11 @@ static const char fs_text[] =
>   void
>   piglit_init(int argc, char **argv)
>   {
> -	GLuint vs, fs, prog;
> +	GLuint prog;
>
>   	piglit_require_GLSL_version(130);
>
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_text);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_text);
> -	prog = piglit_link_simple_program(vs, fs);
> -
> -	if (!vs || !fs || !prog)
> -		piglit_report_result(PIGLIT_FAIL);
> +	prog = piglit_build_simple_program(vs_text, fs_text);
>
>   	glUseProgram(prog);
>   }
> diff --git a/tests/spec/glsl-1.30/execution/vertexid-drawelements.c b/tests/spec/glsl-1.30/execution/vertexid-drawelements.c
> index 9a61e64..4193c48 100644
> --- a/tests/spec/glsl-1.30/execution/vertexid-drawelements.c
> +++ b/tests/spec/glsl-1.30/execution/vertexid-drawelements.c
> @@ -64,16 +64,11 @@ static const char fs_text[] =
>   void
>   piglit_init(int argc, char **argv)
>   {
> -	GLuint vs, fs, prog;
> +	GLuint prog;
>
>   	piglit_require_GLSL_version(130);
>
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_text);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_text);
> -	prog = piglit_link_simple_program(vs, fs);
> -
> -	if (!vs || !fs || !prog)
> -		piglit_report_result(PIGLIT_FAIL);
> +	prog = piglit_build_simple_program(vs_text, fs_text);
>
>   	glUseProgram(prog);
>   }
> diff --git a/tests/spec/nv_texture_barrier/blending-in-shader.c b/tests/spec/nv_texture_barrier/blending-in-shader.c
> index 3281899..7bc8a1b 100644
> --- a/tests/spec/nv_texture_barrier/blending-in-shader.c
> +++ b/tests/spec/nv_texture_barrier/blending-in-shader.c
> @@ -85,7 +85,7 @@ enum piglit_result piglit_display(void)
>
>   void piglit_init(int argc, char **argv)
>   {
> -	unsigned int i, j, fs;
> +	unsigned int i, j;
>
>   	piglit_require_extension("GL_EXT_framebuffer_object");
>   	piglit_require_extension("GL_NV_texture_barrier");
> @@ -115,8 +115,7 @@ void piglit_init(int argc, char **argv)
>   	glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex, 0);
>   	assert(glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_COMPLETE_EXT);
>
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fstext);
> -	prog = piglit_link_simple_program(0, fs);
> +	prog = piglit_build_simple_program(NULL, fstext);
>
>   	texloc = glGetUniformLocation(prog, "fb");
>   }
> diff --git a/tests/spec/oes_compressed_etc1_rgb8_texture/oes_compressed_etc1_rgb8_texture-miptree.c b/tests/spec/oes_compressed_etc1_rgb8_texture/oes_compressed_etc1_rgb8_texture-miptree.c
> index 717793c..10590f7 100644
> --- a/tests/spec/oes_compressed_etc1_rgb8_texture/oes_compressed_etc1_rgb8_texture-miptree.c
> +++ b/tests/spec/oes_compressed_etc1_rgb8_texture/oes_compressed_etc1_rgb8_texture-miptree.c
> @@ -157,9 +157,6 @@ piglit_init(int argc, char **argv)
>   		0, 1,
>   	};
>
> -	GLuint vs;
> -	GLuint fs;
> -
>   	GLint vertex_loc;
>   	GLuint vertex_buf;
>
> @@ -171,10 +168,7 @@ piglit_init(int argc, char **argv)
>   	glClearColor(1.0, 0.0, 0.0, 1.0);
>   	glViewport(0, 0, window_width, window_height);
>
> -	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_source);
> -	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_source);
> -	prog = piglit_link_simple_program(vs, fs);
> -	assert(prog != 0);
> +	prog = piglit_build_simple_program(vs_source, fs_source);
>   	glUseProgram(prog);
>
>   	vertex_loc = glGetAttribLocation(prog, "vertex");
>



More information about the Piglit mailing list