[Piglit] [PATCH 1/2] drawoverhead: test more state changes, remove the GL_FRAMEBUFFER_SRGB test

Marek Olšák maraeo at gmail.com
Wed Jun 14 21:37:09 UTC 2017


From: Marek Olšák <marek.olsak at amd.com>

the sRGB test is unrealistic
---
 tests/perf/drawoverhead.c | 63 +++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 61 insertions(+), 2 deletions(-)

diff --git a/tests/perf/drawoverhead.c b/tests/perf/drawoverhead.c
index 76aed20..9afd3d0 100644
--- a/tests/perf/drawoverhead.c
+++ b/tests/perf/drawoverhead.c
@@ -341,20 +341,69 @@ draw_state_change(unsigned count)
 				glEnable(enable_enum);
 			else
 				glDisable(enable_enum);
 			glDrawArrays(GL_TRIANGLES, 0, 3);
 		}
 	}
 	glDisable(enable_enum);
 }
 
 static void
+draw_scissor_change(unsigned count)
+{
+	unsigned i;
+	glEnable(GL_SCISSOR_TEST);
+	if (indexed) {
+		for (i = 0; i < count; i++) {
+			if (i & 1)
+				glScissor(0, 0, piglit_width / 2, piglit_height / 2);
+			else
+				glScissor(0, 0, piglit_width, piglit_height);
+			glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, NULL);
+		}
+	} else {
+		for (i = 0; i < count; i++) {
+			if (i & 1)
+				glScissor(0, 0, piglit_width / 2, piglit_height / 2);
+			else
+				glScissor(0, 0, piglit_width, piglit_height);
+			glDrawArrays(GL_TRIANGLES, 0, 3);
+		}
+	}
+	glDisable(GL_SCISSOR_TEST);
+}
+
+static void
+draw_viewport_change(unsigned count)
+{
+	unsigned i;
+	if (indexed) {
+		for (i = 0; i < count; i++) {
+			if (i & 1)
+				glViewport(0, 0, piglit_width / 2, piglit_height / 2);
+			else
+				glViewport(0, 0, piglit_width, piglit_height);
+			glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, NULL);
+		}
+	} else {
+		for (i = 0; i < count; i++) {
+			if (i & 1)
+				glViewport(0, 0, piglit_width / 2, piglit_height / 2);
+			else
+				glViewport(0, 0, piglit_width, piglit_height);
+			glDrawArrays(GL_TRIANGLES, 0, 3);
+		}
+	}
+	glViewport(0, 0, piglit_width, piglit_height);
+}
+
+static void
 draw_vertex_attrib_change(unsigned count)
 {
 	unsigned i;
 	if (indexed) {
 		for (i = 0; i < count; i++) {
 			if (i & 1)
 				glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE,
 						      3 * sizeof(float), NULL);
 			else
 				glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE,
@@ -384,42 +433,47 @@ static double
 perf_run(const char *call, unsigned num_vbos, unsigned num_ubos,
 	 unsigned num_textures, const char *change, perf_rate_func f,
 	 double base_rate)
 {
 	double rate = perf_measure_rate(f);
 	double ratio = base_rate ? rate / base_rate : 1;
 
 	printf("   %s (%2u VBOs, %u UBOs, %2u Tex) w/ %s change:%*s"
 	       COLOR_CYAN "%s" COLOR_RESET " %s(%.1f%%)" COLOR_RESET "\n",
 	       call, num_vbos, num_ubos, num_textures, change,
-	       MAX2(18 - (int)strlen(change), 0), "",
+	       MAX2(24 - (int)strlen(change), 0), "",
 	       perf_human_float(rate),
 	       base_rate == 0 ? COLOR_RESET :
 				ratio > 0.7 ? COLOR_GREEN :
 				ratio > 0.4 ? COLOR_YELLOW : COLOR_RED,
 	       100 * ratio);
 	return rate;
 }
 
 struct enable_state_t {
 	GLenum enable;
 	const char *name;
 };
 
 static struct enable_state_t enable_states[] = {
+	{GL_PRIMITIVE_RESTART, "primitive restart enable"},
 	{GL_BLEND,	"blend enable"},
 	{GL_DEPTH_TEST, "depth enable"},
+	{GL_DEPTH_CLAMP, "depth clamp enable"},
 	{GL_STENCIL_TEST, "stencil enable"},
 	{GL_SCISSOR_TEST, "scissor enable"},
 	{GL_MULTISAMPLE, "MSAA enable"},
+	{GL_SAMPLE_MASK, "sample mask enable"},
+	{GL_SAMPLE_ALPHA_TO_COVERAGE, "alpha-to-coverage enable"},
+	{GL_SAMPLE_SHADING, "sample shading enable"},
 	{GL_CULL_FACE,	"cull face enable"},
-	{GL_FRAMEBUFFER_SRGB, "FB sRGB enable"},
+	{GL_CLIP_DISTANCE0, "clip distance enable"},
 };
 
 static void
 perf_draw_variant(const char *call, bool is_indexed)
 {
 	double base_rate = 0;
 	unsigned num_vbos, num_ubos, num_textures;
 
 	indexed = is_indexed;
 
@@ -467,20 +521,25 @@ perf_draw_variant(const char *call, bool is_indexed)
 		uniform_loc = glGetUniformLocation(prog[0], "u");
 		perf_run(call, num_vbos, num_ubos, num_textures, "few uniforms / 1",
 			 draw_uniform_change, base_rate);
 
 		glUseProgram(prog[1]);
 		uniform_loc = glGetUniformLocation(prog[1], "u");
 		perf_run(call, num_vbos, num_ubos, num_textures, "many uniforms / 1",
 			 draw_uniform_change, base_rate);
 		glUseProgram(prog[0]);
 
+		perf_run(call, num_vbos, num_ubos, num_textures, "scissor",
+			 draw_scissor_change, base_rate);
+		perf_run(call, num_vbos, num_ubos, num_textures, "viewport",
+			 draw_viewport_change, base_rate);
+
 		for (int state = 0; state < ARRAY_SIZE(enable_states); state++) {
 			enable_enum = enable_states[state].enable;
 			perf_run(call, num_vbos, num_ubos, num_textures,
 				 enable_states[state].name,
 				 draw_state_change, base_rate);
 		}
 	}
 }
 
 /** Called from test harness/main */
-- 
2.7.4



More information about the Piglit mailing list