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) 
{

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to