[Mesa-dev] [PATCH] Move all of the var decls to the front of the IR list in reverse order.

Chad Versace chad.versace at linux.intel.com
Tue Jun 11 13:27:25 PDT 2013


On 06/08/2013 01:05 PM, Ian Romanick wrote:
> From: Ian Romanick <ian.d.romanick at intel.com>
>
> This has the (intended!) side effect that vertex shader inputs and
> fragment shader outputs will appear in the IR in the same order that
> they appeared in the shader code.  This results in the locations being
> assigned in the declared order.  Many (arguably buggy) applications
> depend on this behavior, and it matches what nearly all other drivers
> do.
>
> Fixes the (new) piglit test attrib-assignments.
>
> NOTE: This is a candidate for stable release branches.
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> Cc: Chad Versace <chad.versace at linux.intel.com>
> ---
>   src/glsl/ast_to_hir.cpp | 18 ++++++++++++++++++
>   1 file changed, 18 insertions(+)
>
> diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
> index e918ade..886cec5 100644
> --- a/src/glsl/ast_to_hir.cpp
> +++ b/src/glsl/ast_to_hir.cpp
> @@ -94,6 +94,24 @@ _mesa_ast_to_hir(exec_list *instructions, struct _mesa_glsl_parse_state *state)
>      detect_conflicting_assignments(state, instructions);
>
>      state->toplevel_ir = NULL;
> +
> +   /* Move all of the variable declarations to the front of the IR list, and
> +    * reverse the order.  This has the (intended!) side effect that vertex
> +    * shader inputs and fragment shader outputs will appear in the IR in the
> +    * same order that they appeared in the shader code.  This results in the
> +    * locations being assigned in the declared order.  Many (arguably buggy)
> +    * applications depend on this behavior, and it matches what nearly all
> +    * other drivers do.
> +    */
> +   foreach_list_safe(node, instructions) {
> +      ir_variable *const var = ((ir_instruction *) node)->as_variable();
> +
> +      if (var == NULL)
> +	 continue;
> +
> +      var->remove();
> +      instructions->push_head(var);
> +   }
>   }

Didn't you mention that this breaks some gles2conform test?

I verified that this fixes Pool Master Pro and gives no
regressions on Android's gles2conform at 64x64 and all EGLConfigs.

Tested-by: Chad Versace <chad.versace at linux.intel.com>


More information about the mesa-dev mailing list