[Mesa-dev] [PATCH] glsl/dead_builin_varyings: Fix gl_FragData array lowering

Tapani Pälli tapani.palli at intel.com
Sun Nov 29 23:56:47 PST 2015


Hi;

On 11/27/2015 02:14 PM, Iago Toral Quiroga wrote:
> The current implementation looks for array dereferences on gl_FragData and
> immediately then proceeds to lower them, however this is not enough because
> we can have array access on vector variables too, like in this code:
>
> out vec4 color;
> void main()
> {
>     int i;
>     for (i = 0; i < 4; i++)
>        color[i] = 1.0;
> }
>
> Fix it by making sure that the actual variable being dereferenced is an array.
>
> Fixes a crash in:
> spec/arb_gpu_shader_fp64/execution/built-in-functions/fs-ldexp-dvec4.shader_test

Instead of asserting in IR validation now we assert in backend because 
array 'should have been lowered' .. is there some other patches that 
should be bundled together with this to make it work?

> ---
>   src/glsl/opt_dead_builtin_varyings.cpp | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/src/glsl/opt_dead_builtin_varyings.cpp b/src/glsl/opt_dead_builtin_varyings.cpp
> index 68b70ee..5387113 100644
> --- a/src/glsl/opt_dead_builtin_varyings.cpp
> +++ b/src/glsl/opt_dead_builtin_varyings.cpp
> @@ -85,7 +85,7 @@ public:
>      {
>         ir_variable *var = ir->variable_referenced();
>
> -      if (!var || var->data.mode != this->mode)
> +      if (!var || var->data.mode != this->mode || !var->type->is_array())
>            return visit_continue;
>
>         if (this->find_frag_outputs && var->data.location == FRAG_RESULT_DATA0) {
>


More information about the mesa-dev mailing list