On Mon, May 23, 2016 at 12:52 PM, Dave Airlie <airl...@gmail.com> wrote:

> From: Dave Airlie <airl...@redhat.com>
>
> This fixes .length() on subroutine uniform arrays, if
> we don't find the identifier normally, we look up the corresponding
> subroutine identifier instead.
>
> Fixes:
> GL45-CTS.shader_subroutine.arrays_of_arrays_of_uniforms
> GL45-CTS.shader_subroutine.arrayed_subroutine_uniforms
>
> Signed-off-by: Dave Airlie <airl...@redhat.com>
> ---
>  src/compiler/glsl/ast_to_hir.cpp | 8 ++++++++
>  1 file changed, 8 insertions(+)
>
> diff --git a/src/compiler/glsl/ast_to_hir.cpp
> b/src/compiler/glsl/ast_to_hir.cpp
> index 434734d..ecd1327 100644
> --- a/src/compiler/glsl/ast_to_hir.cpp
> +++ b/src/compiler/glsl/ast_to_hir.cpp
> @@ -1917,6 +1917,14 @@ ast_expression::do_hir(exec_list *instructions,
>        ir_variable *var =
>
> state->symbols->get_variable(this->primary_expression.identifier);
>
> +      if (var == NULL) {
> +         /* the identifier might be a subroutine name */
>

Being pedantic, but `subroutine uniform name`, right?


> +         char *sub_name;
> +         sub_name = ralloc_asprintf(ctx, "%s_%s",
> _mesa_shader_stage_to_subroutine_prefix(state->stage),
> this->primary_expression.identifier);
> +         var = state->symbols->get_variable(sub_name);
> +         ralloc_free(sub_name);
> +      }
> +
>        if (var != NULL) {
>           var->data.used = true;
>           result = new(ctx) ir_dereference_variable(var);
> --
> 2.5.5
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to