[Mesa-dev] [PATCH 0/7] nir: Add scalarizing and use it in i965
Jason Ekstrand
jason at jlekstrand.net
Wed Jan 21 17:42:40 PST 2015
Yes, I'm fully aware that some of this is a repeat of what eric just sent.
However, most of the repeated work is in the first patch (and the 5th)
which I'm not too worried about. There's two solutions to scalarizing
things floating around and we can decide what we like best.
The important parts here are:
1) The second patch which scalarizes phi nodes. Having scalar ALU
operations is find and all, but if we really want to melt those DX
shaders, we need to split up the pyhi nodes as well.
2) The additions to nir_search to handle swizzles on replacements.
Eventually, I'd like to support swizzles on search paterns as well, but
that's much harder to get right and I didn't want to bang my head on it
today. One side-effect of this is that we can use it to do the
reduction replacements. Whether it's better to do these with the
algebraic search-and-replace framework or direcly in C as Eric did, I
don't know.
3) The last two patches which substantially simplifies the NIR -> i965 FS
pass. One of the benifits of this is that we're no longer emitting
piles of MOV operations just to resolve swizzles. Instead, since
everything is vectorized, we can directly resolve them as we emit
instructions.
Also available here:
http://cgit.freedesktop.org/~jekstrand/mesa/log/?h=review/nir-scalarize
With all of this, we get the following from shader-db:
total instructions in shared programs: 6097323 -> 6074645 (-0.37%)
instructions in affected programs: 814032 -> 791354 (-2.79%)
GAINED: 8
LOST: 11
Jason Ekstrand (7):
nir: Add a pass for scalarizing ALU operations
nir: Add a pass to lower vector phi nodes to scalar phi nodes
nir/search: Don't use a nir_alu_src for storing variables
nir/search: Add a swizzle to nir_search_variable and use it for
replacements
nir: Add a pass to lower things like bany and ball to scalar
operations
i965/fs: Use NIR's scalarizing abilities and stop handling vectors
i965/fs_nir: Get rid of get_alu_src
src/glsl/Makefile.am | 6 +
src/glsl/Makefile.sources | 3 +
src/glsl/nir/nir.h | 6 +
src/glsl/nir/nir_algebraic.py | 14 +
src/glsl/nir/nir_lower_alu_reductions.py | 78 +++++
src/glsl/nir/nir_lower_alu_to_scalar.c | 155 +++++++++
src/glsl/nir/nir_lower_phis_to_scalar.c | 238 +++++++++++++
src/glsl/nir/nir_search.c | 25 +-
src/glsl/nir/nir_search.h | 7 +
src/mesa/drivers/dri/i965/brw_fs.h | 16 -
src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 569 +++++++++++--------------------
11 files changed, 718 insertions(+), 399 deletions(-)
create mode 100644 src/glsl/nir/nir_lower_alu_reductions.py
create mode 100644 src/glsl/nir/nir_lower_alu_to_scalar.c
create mode 100644 src/glsl/nir/nir_lower_phis_to_scalar.c
--
2.2.1
More information about the mesa-dev
mailing list