[Piglit] [PATCH 3/5] Add -samples=n command-line argument forcing MSAA visuals

Marek Olšák maraeo at gmail.com
Sat Jun 1 05:38:40 PDT 2013


---
 tests/util/piglit-framework-gl.c                   |   20 +++++++++++++++-----
 tests/util/piglit-framework-gl.h                   |    1 +
 .../piglit-framework-gl/piglit_fbo_framework.c     |    5 +++++
 .../piglit-framework-gl/piglit_glut_framework.c    |    5 +++++
 .../piglit-framework-gl/piglit_winsys_framework.c  |    7 +++++++
 5 files changed, 33 insertions(+), 5 deletions(-)

diff --git a/tests/util/piglit-framework-gl.c b/tests/util/piglit-framework-gl.c
index 441e271..82197bb 100644
--- a/tests/util/piglit-framework-gl.c
+++ b/tests/util/piglit-framework-gl.c
@@ -60,7 +60,7 @@ delete_arg(char *argv[], int argc, int arg)
  * length is returned in @a argc.
  */
 static void
-process_args(int *argc, char *argv[])
+process_args(int *argc, char *argv[], unsigned *force_samples)
 {
 	int j;
 
@@ -104,6 +104,10 @@ process_args(int *argc, char *argv[])
 			}
 			*argc -= 2;
 			j -= 2;
+		} else if (!strncmp(argv[j], "-samples=", 9)) {
+			*force_samples = atoi(argv[j]+9);
+			delete_arg(argv, *argc, j--);
+			*argc -= 1;
 		}
 	}
 }
@@ -112,12 +116,18 @@ void
 piglit_gl_test_run(int argc, char *argv[],
 		   const struct piglit_gl_test_config *config)
 {
-	process_args(&argc, argv);
+	struct piglit_gl_test_config conf = *config;
+	unsigned force_samples = 0;
+
+	process_args(&argc, argv, &force_samples);
+
+	if (force_samples > 1)
+		conf.window_samples = force_samples;
 
-	piglit_width = config->window_width;
-	piglit_height = config->window_height;
+	piglit_width = conf.window_width;
+	piglit_height = conf.window_height;
 
-	gl_fw = piglit_gl_framework_factory(config);
+	gl_fw = piglit_gl_framework_factory(&conf);
 	if (gl_fw == NULL) {
 		printf("piglit: error: failed to create "
 		       "piglit_gl_framework\n");
diff --git a/tests/util/piglit-framework-gl.h b/tests/util/piglit-framework-gl.h
index 4406c1b..95be1c1 100644
--- a/tests/util/piglit-framework-gl.h
+++ b/tests/util/piglit-framework-gl.h
@@ -140,6 +140,7 @@ struct piglit_gl_test_config {
 
 	int window_width;
 	int window_height;
+	int window_samples;
 
 	/**
 	 * A bitmask of `enum piglit_gl_visual`.
diff --git a/tests/util/piglit-framework-gl/piglit_fbo_framework.c b/tests/util/piglit-framework-gl/piglit_fbo_framework.c
index 1b844bb..1aad5fe 100644
--- a/tests/util/piglit-framework-gl/piglit_fbo_framework.c
+++ b/tests/util/piglit-framework-gl/piglit_fbo_framework.c
@@ -139,6 +139,11 @@ piglit_fbo_framework_create(const struct piglit_gl_test_config *test_config)
 	int32_t platform = piglit_wfl_framework_choose_platform(test_config);
 	bool ok = true;
 
+	if (test_config->window_samples > 1) {
+		puts("The FBO mode doesn't support multisampling\n");
+		piglit_report_result(PIGLIT_SKIP);
+	}
+
 	wfl_fw = calloc(1, sizeof(*wfl_fw));
 	gl_fw = &wfl_fw->gl_fw;
 
diff --git a/tests/util/piglit-framework-gl/piglit_glut_framework.c b/tests/util/piglit-framework-gl/piglit_glut_framework.c
index cfadf77..ff48abb 100644
--- a/tests/util/piglit-framework-gl/piglit_glut_framework.c
+++ b/tests/util/piglit-framework-gl/piglit_glut_framework.c
@@ -180,6 +180,11 @@ piglit_glut_framework_create(const struct piglit_gl_test_config *test_config)
 		piglit_report_result(PIGLIT_SKIP);
 	}
 
+	if (test_config->window_samples > 1) {
+		printf("GLUT doesn't support MSAA visuals.\n");
+		piglit_report_result(PIGLIT_SKIP);
+	}
+
 	ok = piglit_gl_framework_init(&glut_fw.gl_fw, test_config);
 	if (!ok)
 		return NULL;
diff --git a/tests/util/piglit-framework-gl/piglit_winsys_framework.c b/tests/util/piglit-framework-gl/piglit_winsys_framework.c
index 971f183..205ea21 100644
--- a/tests/util/piglit-framework-gl/piglit_winsys_framework.c
+++ b/tests/util/piglit-framework-gl/piglit_winsys_framework.c
@@ -128,6 +128,13 @@ choose_config_attribs(const struct piglit_gl_test_config *test_config)
 		attrib_list[i++] = true;
 	}
 
+	if (test_config->window_samples > 1) {
+		attrib_list[i++] = WAFFLE_SAMPLE_BUFFERS;
+		attrib_list[i++] = 1;
+		attrib_list[i++] = WAFFLE_SAMPLES;
+		attrib_list[i++] = test_config->window_samples;
+	}
+
 	attrib_list[i++] = WAFFLE_NONE;
 
 	return attrib_list;
-- 
1.7.10.4



More information about the Piglit mailing list