[Piglit] [PATCH 2/2] util: Add a -png option to dump PNG files on piglit_present_results().

Ben Widawsky ben at bwidawsk.net
Fri May 15 10:03:35 PDT 2015


For both:
Acked-by: Ben Widawsky <ben at bwidawsk.net>
Tested-by: Ben Widawsky <ben at bwidawsk.net> (pre-rebase)

On Thu, May 14, 2015 at 12:25:41PM -0700, Kenneth Graunke wrote:
> This makes it easy to dump images containing the "window contents" of
> any Piglit test, even when running with GBM or ssh'd in to headless
> systems.
> 
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> Cc: ben at bwidawsk.net
> ---
>  tests/util/piglit-framework-gl.c | 40 ++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 40 insertions(+)
> 
> diff --git a/tests/util/piglit-framework-gl.c b/tests/util/piglit-framework-gl.c
> index b9ab2f8..1f489bf 100644
> --- a/tests/util/piglit-framework-gl.c
> +++ b/tests/util/piglit-framework-gl.c
> @@ -21,7 +21,9 @@
>   * IN THE SOFTWARE.
>   */
>  
> +#define _GNU_SOURCE
>  #include <assert.h>
> +#include <ctype.h>
>  #include <string.h>
>  #include <stdio.h>
>  #include <stdlib.h>
> @@ -32,6 +34,8 @@
>  
>  struct piglit_gl_framework *gl_fw;
>  
> +const char *piglit_binary_name;
> +bool piglit_dump_png = false;
>  bool piglit_use_fbo = false;
>  int piglit_automatic = 0;
>  unsigned piglit_winsys_fbo = 0;
> @@ -100,6 +104,8 @@ process_args(int *argc, char *argv[], unsigned *force_samples,
>  {
>  	int j;
>  
> +	piglit_binary_name = argv[0];
> +
>  	piglit_parse_subtest_args(argc, argv, config->subtests,
>  				  &config->selected_subtests,
>  				  &config->num_selected_subtests);
> @@ -115,6 +121,10 @@ process_args(int *argc, char *argv[], unsigned *force_samples,
>  			piglit_use_fbo = true;
>  			delete_arg(argv, *argc, j--);
>  			*argc -= 1;
> +		} else if (!strcmp(argv[j], "-png")) {
> +			piglit_dump_png = true;
> +			delete_arg(argv, *argc, j--);
> +			*argc -= 1;
>  		} else if (!strcmp(argv[j], "-rlimit")) {
>  			char *ptr;
>  			unsigned long lim;
> @@ -207,6 +217,36 @@ piglit_swap_buffers(void)
>  void
>  piglit_present_results(void)
>  {
> +	if (piglit_dump_png) {
> +		static char *fileprefix = NULL;
> +		static int frame = 0;
> +		char *filename;
> +		GLenum base_format = GL_RGBA;
> +		GLubyte *image;
> +		if (fileprefix == NULL) {
> +			int i;
> +			fileprefix = strdup(piglit_binary_name);
> +			fileprefix = basename(fileprefix);
> +			/* Strip potentially bad characters */
> +			for (i = 0; fileprefix[i]; i++) {
> +				if (!isalnum(fileprefix[i]) && fileprefix[i] != '-')
> +					fileprefix[i] = '_';
> +			}
> +		}
> +		image = malloc(4 * piglit_width * piglit_height);
> +		glReadPixels(0, 0, piglit_width, piglit_height,
> +			     base_format, GL_UNSIGNED_BYTE, image);
> +		assert(glGetError() == GL_NO_ERROR);
> +
> +		asprintf(&filename, "%s%03d.png", fileprefix, frame++);
> +
> +		printf("Writing %s...\n", filename);
> +		piglit_write_png(filename, base_format, piglit_width,
> +				 piglit_height, image, true);
> +		free(filename);
> +		free(image);
> +	}
> +
>  	if (!piglit_automatic)
>  		piglit_swap_buffers();
>  }
> -- 
> 2.4.0
> 


More information about the Piglit mailing list