[Piglit] [PATCH 1/2] varying-packing: Use logical-OR instead of if statement to set failed.

Mark Janes mark.a.janes at intel.com
Wed Mar 4 11:57:31 PST 2015


series Reviewed-by: Mark Janes <mark.a.janes at intel.com>

Matt Turner <mattst88 at gmail.com> writes:

> By flattening the if statements we cut 288 instructions from the
> fragment shader (806 -> 518, or 35%), and we remove all register
> spilling on i965.
>
> Reduces runtime of "varying-packing-simple int separate" by
> -81.4453% +/- 0.255875% (n=483).
>
> Also consistently print 3 digits in the varying's names, to make
> reading/sorting simpler.
> ---
>  tests/spec/glsl-1.10/execution/varying-packing/simple.c | 17 +++++------------
>  1 file changed, 5 insertions(+), 12 deletions(-)
>
> diff --git a/tests/spec/glsl-1.10/execution/varying-packing/simple.c b/tests/spec/glsl-1.10/execution/varying-packing/simple.c
> index 618f325..e9935c7 100644
> --- a/tests/spec/glsl-1.10/execution/varying-packing/simple.c
> +++ b/tests/spec/glsl-1.10/execution/varying-packing/simple.c
> @@ -258,12 +258,12 @@ get_shader(bool is_vs, unsigned glsl_version, int num_varyings,
>  		if (varyings[i].type->base != BASE_TYPE_FLOAT)
>  			opt_flat_keyword = "flat ";
>  		if (varyings[i].array_elems != 0) {
> -			text += sprintf(text, "%s%s %s var%u[%u];\n",
> +			text += sprintf(text, "%s%s %s var%03u[%u];\n",
>  					opt_flat_keyword, varying_keyword,
>  					varyings[i].type->name, i,
>  					varyings[i].array_elems);
>  		} else {
> -			text += sprintf(text, "%s%s %s var%u;\n",
> +			text += sprintf(text, "%s%s %s var%03u;\n",
>  					opt_flat_keyword, varying_keyword,
>  					varyings[i].type->name, i);
>  		}
> @@ -292,8 +292,8 @@ get_shader(bool is_vs, unsigned glsl_version, int num_varyings,
>  				for (l = 0; l < varyings[i].type->num_rows; ++l) {
>  					text += sprintf(text, "  ");
>  					if (!is_vs)
> -						text += sprintf(text, "if (");
> -					text += sprintf(text, "var%u", i);
> +						text += sprintf(text, "failed = failed || ");
> +					text += sprintf(text, "var%03u", i);
>  					if (varyings[i].array_elems)
>  						text += sprintf(text, "[%u]", j);
>  					if (varyings[i].type->num_cols > 1)
> @@ -304,16 +304,9 @@ get_shader(bool is_vs, unsigned glsl_version, int num_varyings,
>  						text += sprintf(text, " = ");
>  					else
>  						text += sprintf(text, " != ");
> -					text += sprintf(text, "%s(i + %u)",
> +					text += sprintf(text, "%s(i + %u);\n",
>  							base_type_name,
>  							offset++);
> -					if (is_vs) {
> -						text += sprintf(text, ";\n");
> -					} else {
> -						text += sprintf(text,
> -								")\n"
> -								"    failed = true;\n");
> -					}
>  				}
>  			}
>  		}
> -- 
> 2.0.5


More information about the Piglit mailing list