For both:
Acked-by: Ben Widawsky <[email protected]>
Tested-by: Ben Widawsky <[email protected]> (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 <[email protected]>
> Cc: [email protected]
> ---
>  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
> 
_______________________________________________
Piglit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to