From 5b2d801e2587a0996b60e26294f6f752330fbec9 Mon Sep 17 00:00:00 2001 From: Topi Pohjolainen Date: Mon, 29 Feb 2016 19:18:32 +0200 Subject: texsubimage: Add option to run against fixed region Signed-off-by: Topi Pohjolainen Reviewed-by: Kenneth Graunke --- tests/texturing/texsubimage.c | 71 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 69 insertions(+), 2 deletions(-) (limited to 'tests/texturing/texsubimage.c') diff --git a/tests/texturing/texsubimage.c b/tests/texturing/texsubimage.c index b695ce55c..a0d811fce 100644 --- a/tests/texturing/texsubimage.c +++ b/tests/texturing/texsubimage.c @@ -111,6 +111,18 @@ struct sub_region { int tx, ty, tz, tw, th, td; }; +/* If set, format and sub-region are given from command line. */ +struct single_test { + bool enabled; + GLenum targets[2]; + GLenum format; + struct sub_region region; +}; + +static struct single_test manual_dispatch = { + .enabled = false, .targets = { GL_NONE, GL_NONE } +}; + static const char fragment_1d_array[] = "#extension GL_EXT_texture_array : require\n" "uniform sampler1DArray tex;\n" @@ -605,6 +617,46 @@ prepare_tex_to_fbo_blit_program(GLenum target) return program; } +static void +print_usage_and_exit(const char *s) +{ + printf("Invalid argument: %s\n", s); + printf("Usage: texsubimage manual " + " "); +} + +static unsigned +read_integer(const char *s) +{ + char *endptr = NULL; + unsigned res = strtol(s, &endptr, 0); + + if (endptr != s + strlen(s)) + print_usage_and_exit(s); + + return res; +} + +static void +init_manual_dispatch(char **argv, unsigned argc) +{ + static const unsigned manual_arg_num = 8; + if (argc < manual_arg_num) + print_usage_and_exit(argv[0]); + + manual_dispatch.targets[0] = piglit_get_gl_enum_from_name(argv[0]); + manual_dispatch.format = piglit_get_gl_enum_from_name(argv[1]); + + manual_dispatch.region.tx = read_integer(argv[2]); + manual_dispatch.region.ty = read_integer(argv[3]); + manual_dispatch.region.tz = read_integer(argv[4]); + manual_dispatch.region.tw = read_integer(argv[5]); + manual_dispatch.region.th = read_integer(argv[6]); + manual_dispatch.region.td = read_integer(argv[7]); + + manual_dispatch.enabled = true; +} + static void adjust_tex_dimensions(GLenum target, unsigned *w, unsigned *h, unsigned *d) { @@ -626,6 +678,9 @@ piglit_display(void) GLboolean pass = GL_TRUE; int i; + if (manual_dispatch.enabled) + test_targets = manual_dispatch.targets; + /* Loop over 1/2/3D texture targets */ for (i = 0; test_targets[i] != GL_NONE; i++) { unsigned w = DEFAULT_TEX_WIDTH; @@ -635,7 +690,15 @@ piglit_display(void) prepare_tex_to_fbo_blit_program(test_targets[i]); adjust_tex_dimensions(test_targets[i], &w, &h, &d); - pass = test_formats(test_targets[i], w, h, d) && pass; + + if (manual_dispatch.enabled) { + pass = test_format(test_targets[i], + manual_dispatch.format, + w, h, d, + &manual_dispatch.region, 1); + } else { + pass = test_formats(test_targets[i], w, h, d) && pass; + } if (program == 0) { glDisable(test_targets[i]); @@ -685,12 +748,16 @@ piglit_init(int argc, char **argv) } else if (!strcmp(argv[i], "pbo")) { piglit_require_extension("GL_ARB_pixel_buffer_object"); use_pbo = GL_TRUE; + } else if (!strcmp(argv[i], "manual")) { + init_manual_dispatch(argv + i + 1, argc - (i + 1)); + break; } else { argv[remaining_argc++] = argv[i]; } } - fbo_formats_init(remaining_argc, argv, 0); + if (!manual_dispatch.enabled) + fbo_formats_init(remaining_argc, argv, 0); (void) fbo_formats_display; piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE); -- cgit v1.2.3