[Mesa-dev] [PATCH 00/12] compiler: Actually handle invariant and precise

Jason Ekstrand jason at jlekstrand.net
Fri Mar 18 00:51:44 UTC 2016


Previously, the GLSL compiler successfully parsed the "invariant" and
"precise" keywords and set bits on the variables, but we never did anything
with them.  This series adds code to propagate "invariant" and "precise"
all the way thorugh NIR and bail in unsafe optimizations if we see it.  The
GLSL code sort-of tries to keep the two separate on the off chance that
some of the gallium people want to do something more interesting with them.
In NIR, we take a more scorched-earth policy and introduce a concept of an
"exact" ALU operation.

This fixes the remaining dEQP tests for "invariant".  It probably also
fixes the ES 3.1 CTS tests for "precise" but I haven't actually tried it.

Jason Ekstrand (12):
  nir: Add an "exact" bit to nir_alu_instr
  nir/builder: Add a flag for setting exact
  nir/search: Propagate exactness into newly created expressions
  nir/algebraic: Allow for flagging operations as being inexact
  nir/algebraic: Flag inexact optimizations
  nir/cse: Properly handle nir_ssa_def.exact
  i965/peephole_ffma: Don't fuse exact adds
  nir/alu_to_scalar: Propagate the "exact" bit
  glsl: Add a pass to propagate the "invariant" and "precise" qualifiers
  glsl/opt_algebraic: Don't handle invariant or precise trees
  glsl/rebalance_tree: Don't handle invariant or precise trees
  nir/glsl: Propagate invariant into NIR alu ops

 src/compiler/Makefile.sources                      |   1 +
 src/compiler/glsl/glsl_parser_extras.cpp           |   1 +
 src/compiler/glsl/ir_optimization.h                |   1 +
 src/compiler/glsl/opt_algebraic.cpp                |  16 ++
 src/compiler/glsl/opt_rebalance_tree.cpp           |  16 ++
 src/compiler/glsl/propagate_invariance.cpp         | 125 ++++++++++++++++
 src/compiler/nir/glsl_to_nir.cpp                   |   2 +
 src/compiler/nir/nir.h                             |  11 ++
 src/compiler/nir/nir_algebraic.py                  |   9 +-
 src/compiler/nir/nir_builder.h                     |   9 ++
 src/compiler/nir/nir_clone.c                       |   1 +
 src/compiler/nir/nir_instr_set.c                   |  16 +-
 src/compiler/nir/nir_lower_alu_to_scalar.c         |   1 +
 src/compiler/nir/nir_opt_algebraic.py              | 165 +++++++++++----------
 src/compiler/nir/nir_print.c                       |   2 +
 src/compiler/nir/nir_search.c                      |  13 +-
 src/compiler/nir/nir_search.h                      |   6 +
 .../drivers/dri/i965/brw_nir_opt_peephole_ffma.c   |   4 +-
 18 files changed, 312 insertions(+), 87 deletions(-)
 create mode 100644 src/compiler/glsl/propagate_invariance.cpp

-- 
2.5.0.400.gff86faf



More information about the mesa-dev mailing list