glsl: Lower vector_extracts to swizzles after lower_vector_derefs.
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 28 Apr 2016 04:07:07 +0000 (21:07 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Fri, 29 Apr 2016 23:03:36 +0000 (16:03 -0700)
lower_vector_derefs can produce new vector_extract operations.
Neither i965 nor st_glsl_to_tgsi can handle them, so we'd best
convert them to swizzles.

Together with the previous patch, this fixes assertion failures in
GLideN64, as well as a new Piglit test which reproduces the issue:
spec/glsl-1.10/compiler/vector-dereference-in-dereference.frag

Cc: mesa-stable@lists.freedesktop.org
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=95164
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/compiler/glsl/linker.cpp

index dcc8a57b6be8e7f565198704e98d8c255e2094a3..7bd795c9a38794bfdce1bb60661f6935d82afa5d 100644 (file)
@@ -4813,6 +4813,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
                                 &prog->Comp.SharedSize);
 
       lower_vector_derefs(prog->_LinkedShaders[i]);
+      do_vec_index_to_swizzle(prog->_LinkedShaders[i]->ir);
    }
 
 done: