[Mesa-dev] [PATCH 06/12] glsl: fix subroutine uniform .length().

Chris Forbes chrisf at ijw.co.nz
Mon May 23 02:19:24 UTC 2016


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

> From: Dave Airlie <airlied at 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 <airlied at 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 at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160523/9fd40696/attachment.html>


More information about the mesa-dev mailing list