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

Submitted by Marek Olšák on June 14, 2017, 9:37 p.m.

Details

Message ID 1497476230-12592-1-git-send-email-maraeo@gmail.com
State New
Headers show
Series "Series without cover letter" ( rev: 1 ) in Piglit

Not browsing as part of any series.

Commit Message

Marek Olšák June 14, 2017, 9:37 p.m.
From: Marek Olšák <marek.olsak@amd.com>

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

Patch hide | download patch | download mbox

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 */

Comments

For both,
Reviewed-by: Brian Paul <brianp@vmware.com>

On 06/14/2017 03:37 PM, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak@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 */
>