[Piglit] [PATCH] textureSamples: use piglit_draw_rect, remove duplication

Ian Romanick idr at freedesktop.org
Thu Sep 10 21:23:46 PDT 2015


On 09/10/2015 04:20 PM, Ilia Mirkin wrote:
> In response to Ian's review (which happened after I pushed):
>  - use piglit_draw_rect -- it knows how to set up VAO/VBO/etc
>  - no need to set the sampler, it's always 0
>  - avoid duplicating the fs string between VS and GS
> 
> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
> ---
>  tests/texturing/shaders/textureSamples.c | 82 ++++++++++----------------------
>  1 file changed, 25 insertions(+), 57 deletions(-)
> 
> diff --git a/tests/texturing/shaders/textureSamples.c b/tests/texturing/shaders/textureSamples.c
> index 053c34d..11b3b88 100644
> --- a/tests/texturing/shaders/textureSamples.c
> +++ b/tests/texturing/shaders/textureSamples.c
> @@ -65,47 +65,21 @@ PIGLIT_GL_TEST_CONFIG_BEGIN
>  
>  PIGLIT_GL_TEST_CONFIG_END
>  
> -static int vertex_location;
> -
>  enum piglit_result
>  piglit_display()
>  {
>  	bool pass = true;
> -	static const float verts[] = {
> -		-1, -1,
> -		-1,  1,
> -		 1,  1,
> -		 1, -1,
> -	};
> -	GLuint vbo;
>  
>  	glClearColor(0.5, 0.5, 0.5, 1.0);
>  	glClear(GL_COLOR_BUFFER_BIT);
>  
> -	/* For GL core, we need to have a vertex array object bound.
> -	 * Otherwise, we don't particularly have to.  Always use a
> -	 * vertex buffer object, though.
> -	 */
> -	if (piglit_get_gl_version() >= 31) {
> -		GLuint vao;
> -		glGenVertexArrays(1, &vao);
> -		glBindVertexArray(vao);
> -	}
> -	glGenBuffers(1, &vbo);
> -	glBindBuffer(GL_ARRAY_BUFFER, vbo);
> -	glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_STREAM_DRAW);
> -
> -	glVertexAttribPointer(vertex_location, 2, GL_FLOAT, GL_FALSE, 0, 0);
> -	glEnableVertexAttribArray(vertex_location);
> -
>  	float expected_color[4] = {0, 1, 0};
>  	glViewport(0, 0, piglit_width, piglit_height);
> -	glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
> +	piglit_draw_rect(-1, -1, 2, 2);
>  
>  	pass &= piglit_probe_rect_rgb(0, 0, piglit_width, piglit_height,
>  				      expected_color);
>  
> -	glDisableVertexAttribArray(vertex_location);
>  	piglit_present_results();
>  
>  	return pass ? PIGLIT_PASS : PIGLIT_FAIL;
> @@ -155,33 +129,23 @@ generate_GLSL(enum shader_target test_stage)
>  			 "#extension GL_ARB_texture_multisample: enable\n"
>  			 "#extension GL_ARB_shader_texture_image_samples: enable\n"
>  			 "uniform %s tex;\n"
> -			 "in vec4 vertex;\n"
> +			 "in vec4 piglit_vertex;\n"
>  			 "flat out int samples;\n"
>  			 "void main()\n"
>  			 "{\n"
>  			 "    samples = textureSamples(tex);\n"
> -			 "    gl_Position = vertex;\n"
> +			 "    gl_Position = piglit_vertex;\n"
>  			 "}\n",
>  			 shader_version, sampler.name);
> -		asprintf(&fs_code,
> -			 "#version %d\n"
> -			 "flat in int samples;\n"
> -			 "out vec4 color;\n"
> -			 "void main()\n"
> -			 "{\n"
> -			 "  if (samples == %d) color = vec4(0,1,0,1);\n"
> -			 "  else color = vec4(1,0,0,1);\n"
> -			 "}\n",
> -			 shader_version, sample_count);
>  		break;
>  	case GS:
>  		asprintf(&vs_code,
>  			 "#version %d\n"
> -			 "in vec4 vertex;\n"
> +			 "in vec4 piglit_vertex;\n"
>  			 "out vec4 pos_to_gs;\n"
>  			 "void main()\n"
>  			 "{\n"
> -			 "    pos_to_gs = vertex;\n"
> +			 "    pos_to_gs = piglit_vertex;\n"
>  			 "}\n",
>  			 shader_version);
>  		asprintf(&gs_code,
> @@ -202,24 +166,14 @@ generate_GLSL(enum shader_target test_stage)
>  			 "    }\n"
>  			 "}\n",
>  			 shader_version, sampler.name);
> -		asprintf(&fs_code,
> -			 "#version %d\n"
> -			 "flat in int samples;\n"
> -			 "out vec4 color;\n"
> -			 "void main()\n"
> -			 "{\n"
> -			 "  if (samples == %d) color = vec4(0,1,0,1);\n"
> -			 "  else color = vec4(1,0,0,1);\n"
> -			 "}\n",
> -			 shader_version, sample_count);
>  		break;
>  	case FS:
>  		asprintf(&vs_code,
>  			 "#version %d\n"
> -			 "in vec4 vertex;\n"
> +			 "in vec4 piglit_vertex;\n"
>  			 "void main()\n"
>  			 "{\n"
> -			 "    gl_Position = vertex;\n"
> +			 "    gl_Position = piglit_vertex;\n"
>  			 "}\n",
>  			 shader_version);
>  		asprintf(&fs_code,
> @@ -240,6 +194,24 @@ generate_GLSL(enum shader_target test_stage)
>  		break;
>  	}
>  
> +	switch (test_stage) {
> +	case VS:
> +	case GS:
> +		asprintf(&fs_code,
> +			 "#version %d\n"
> +			 "flat in int samples;\n"
> +			 "out vec4 color;\n"
> +			 "void main()\n"
> +			 "{\n"
> +			 "  if (samples == %d) color = vec4(0,1,0,1);\n"
> +			 "  else color = vec4(1,0,0,1);\n"
> +			 "}\n",
> +			 shader_version, sample_count);
> +		break;
> +	default:
> +		break;
> +	}
> +

It occurred to me that you could also do this as

    if (fs_code == NULL) {
        ...
    }

instead of the extra switch.  Either way works for me.

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

>  	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_code);
>  	if (gs_code) {
>  		gs = piglit_compile_shader_text(GL_GEOMETRY_SHADER, gs_code);
> @@ -315,7 +287,6 @@ void
>  piglit_init(int argc, char **argv)
>  {
>  	int prog;
> -	int tex_location;
>  
>  	piglit_require_extension("GL_ARB_shader_texture_image_samples");
>  	require_GL_features(test_stage);
> @@ -350,10 +321,7 @@ piglit_init(int argc, char **argv)
>  	if (!prog)
>  		piglit_report_result(PIGLIT_FAIL);
>  
> -	tex_location = glGetUniformLocation(prog, "tex");
> -	vertex_location = glGetAttribLocation(prog, "vertex");
>  	glUseProgram(prog);
> -	glUniform1i(tex_location, 0);
>  
>  	generate_texture();
>  }
> 



More information about the Piglit mailing list