mesa/src/compiler
Kenneth Graunke 60b5ba557e glsl: Split arrays even in the presence of whole-array copies.
Previously, we failed to split constant arrays.  Code such as

   int[2] numbers = int[](1, 2);

would generates a whole-array assignment:

  (assign () (var_ref numbers)
             (constant (array int 4) (constant int 1) (constant int 2)))

opt_array_splitting generally tried to visit ir_dereference_array nodes,
and avoid recursing into the inner ir_dereference_variable.  So if it
ever saw a ir_dereference_variable, it assumed this was a whole-array
read and bailed.  However, in the above case, there's no array deref,
and we can totally handle it - we just have to "unroll" the assignment,
creating assignments for each element.

This was mitigated by the fact that we constant propagate whole arrays,
so a dereference of a single component would usually get the desired
single value anyway.  However, I plan to stop doing that shortly;
early experiments with disabling constant propagation of arrays
revealed this shortcoming.

This patch causes some arrays in Gl32GSCloth's geometry shaders to be
split, which allows other optimizations to eliminate unused GS inputs.
The VS then doesn't have to write them, which eliminates the entire VS
(5 -> 2 instructions).  It still renders correctly.

No other change in shader-db.

v2: Drop !AOA check and improve a comment (feedback from Tim Arceri).

Cc: mesa-stable@lists.freedesktop.org
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
(cherry picked from commit c264fdbc07)
2016-06-24 21:23:20 +01:00
..
glsl glsl: Split arrays even in the presence of whole-array copies. 2016-06-24 21:23:20 +01:00
nir nir/alu_to_scalar: Respect the exact ALU operation qualifier 2016-06-21 11:41:49 +01:00
spirv spirv: Use the system value version of gl_FrontFace 2016-06-24 20:03:46 +01:00
.gitignore mesa: Add .gitignore entries for make check binaries 2016-05-25 09:41:44 -07:00
Android.glsl.gen.mk glsl: android: add back missing generated glcpp include path 2016-04-21 14:43:21 +01:00
Android.glsl.mk android: libmesa_glsl: add a dependency on libmesa_nir static 2016-06-02 22:35:29 +01:00
Android.mk compiler: android: flesh out nir into separate makefile 2016-04-11 19:08:23 +01:00
Android.nir.gen.mk compiler: android: flesh out nir into separate makefile 2016-04-11 19:08:23 +01:00
Android.nir.mk compiler: android: flesh out nir into separate makefile 2016-04-11 19:08:23 +01:00
builtin_type_macros.h glsl/types: Add a bare "sampler" type 2016-02-13 17:22:36 -08:00
glsl_types.cpp glsl: handle same struct redeclaration (v2) 2016-05-20 11:22:52 +10:00
glsl_types.h glsl: handle implicit sized arrays in ssbo 2016-05-26 12:42:10 +10:00
Makefile.am compiler: Move glsl_to_nir to libglsl.la 2016-05-26 14:13:38 -07:00
Makefile.glsl.am glsl: add warning-test 2016-05-26 09:19:17 +02:00
Makefile.nir.am nir: add the SConscript.nir to the tarball 2016-05-30 19:20:33 +01:00
Makefile.sources nir: Add a pass for propagating invariant decorations 2016-06-21 11:37:37 +01:00
nir_types.cpp compiler: Add a C wrapper for glsl_type::without_array(). 2016-05-07 15:44:41 -07:00
nir_types.h nir: glsl_get_bit_size() should take glsl_type 2016-05-12 13:39:40 -04:00
SConscript scons: Build NIR. 2016-04-14 16:38:59 +01:00
SConscript.glsl compiler: Move glsl_to_nir to libglsl.la 2016-05-26 14:13:38 -07:00
SConscript.nir scons: Build NIR. 2016-04-14 16:38:59 +01:00
shader_enums.c glsl/shader_enums: Add the other two compute builtins 2016-04-11 13:53:00 -07:00
shader_enums.h glsl: fix location and component packing validation on patches 2016-05-17 15:06:12 +10:00