[Mesa-dev] RFC: Supporting mediump in NIR
Pohjolainen, Topi
topi.pohjolainen at intel.com
Fri May 15 10:56:22 PDT 2015
On Fri, May 15, 2015 at 10:32:44AM -0700, Jason Ekstrand wrote:
> Hey Topi! Thanks for working on this!
>
> I've been meaning to do something for fp16 and fp64 in NIR for a while
> and just haven't gotten to it. I just sent out three "patches" laying
> out how I was intending to do it. I put "patches" in quotes because
> they're so half-baked they barely compile. It's what I could get
> typed up in the hour or two before breakfast.
>
> I am not at all trying to say that the explisit types mechanism isn't
> what we want. I'm still undecided for the moment because both
> mechanisms have their merits. I just wanted to throw both out there
> so that we can have a proper discussion.
Initially your approach looks really tempting. I like the simplicity
and the fact that we don't need to explicitly duplicate things -
most likely we need less test cases for corner cases. I would probably
continue the discussion there.
> --Jason
>
> On Fri, May 15, 2015 at 2:39 AM, Topi Pohjolainen
> <topi.pohjolainen at intel.com> wrote:
> > I wanted to kick-off discussion on how to support floating point
> > precision qualifiers in NIR. This is purely on optimization for
> > GLES where one can reduce the number of GPU cycles. At the moment
> > the compiler discards the qualifiers early when abstract syntax
> > tree (AST) is transformed into intermediate presentation (IR).
> >
> > Iago added the initial support to IR in order to check that the
> > stages agree on the precision. Naturally I started by rebasing his
> > work on master (I dropped the actual checking part as it didn't
> > automatically fit into master). I realized that it isn't sufficient
> > to have the precision tracked in ir_variable alone. When the IR
> > is further translated into NIR the precision is needed in ir_rvalue
> > as well when NIR decides which opcode to use.
> > Iago's patch isn't needed for the solution here afterall, I just
> > included it to for context sake.
> >
> > Now, there are number of implementation alternatives, I think, both
> > in AST/IR as well is in NIR. I thought I play with one approach to
> > provide something "real" to aid the decision making regarding the
> > architecture.
>
> And I just sent something that's definitely not real. It's not even "real"...
>
> > I thought that despite fp16 (medium precision float) isn't really a
> > proper type in glsl, it would clearer if it were one internally in
> > the compiler though. I kept thinking fp64 and how I would introduce
> > that into NIR.
> > The first step was to do pretty much the same as what Dave Airlie
> > did for doubles (fp64) in the compiler frontend.
> >
> > Then in NIR I decided to introduce new opcodes for half floats
> > instead of modifying the existing float instructions to carry
> > additional information about the precision.
> >
> > I would guess that there are drivers that are not really interested
> > on this and hence we should means for the drivers to tell if the
> > precision is to be taken into account or not. One natural place
> > would be in patch number nine. This is just one example of details
> > missing in the proposal - these patches are only meant to give a
> > rough idea how the approach chosen would look like.
> >
> > Iago Toral Quiroga (1):
> > glsl: Add tracking for GLSL precision qualifiers
> >
> > Topi Pohjolainen (15):
> > glsl: Add half float type
> > mesa: Add half float uniform support
> > glsl: Add half float type generation
> > glsl: Allow half float type to be used where-ever float is supported
> > glsl: Add support for half floats in optimization passes
> > glsl: Add ubo lowering support for half floats
> > glsl: Add support for half float loop control
> > glsl/ast: Use half float type for medium and low precisions
> > nir: Introduce half float opcodes
> > nir: Consider float precision when deciding between int/float
> > nir: Consider float precision when deciding between int/float: part2
> > nir: Consider float precision when deciding between uint/int/float
> > nir: Consider float precision when deciding between uint/float
> > nir: Consider float precision when deciding opcode
> > nir: Consider float precision when deciding opcode: part 2
> >
> > src/glsl/ast_to_hir.cpp | 29 ++-
> > src/glsl/builtin_type_macros.h | 16 ++
> > src/glsl/builtin_types.cpp | 31 +++
> > src/glsl/glsl_types.cpp | 50 ++++-
> > src/glsl/glsl_types.h | 29 ++-
> > src/glsl/ir.h | 13 ++
> > src/glsl/ir_clone.cpp | 1 +
> > src/glsl/ir_print_visitor.cpp | 1 +
> > src/glsl/ir_validate.cpp | 36 ++--
> > src/glsl/link_uniform_initializers.cpp | 2 +
> > src/glsl/loop_controls.cpp | 1 +
> > src/glsl/lower_ubo_reference.cpp | 12 +-
> > src/glsl/nir/glsl_to_nir.cpp | 258 +++++++++++--------------
> > src/glsl/nir/nir.h | 2 +
> > src/glsl/nir/nir_constant_expressions.py | 8 +-
> > src/glsl/nir/nir_lower_io.c | 1 +
> > src/glsl/nir/nir_opcodes.py | 78 +++++++-
> > src/glsl/opt_algebraic.cpp | 11 +-
> > src/glsl/opt_constant_propagation.cpp | 1 +
> > src/glsl/opt_minmax.cpp | 2 +
> > src/mesa/drivers/dri/i965/brw_fs.cpp | 1 +
> > src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 1 +
> > src/mesa/drivers/dri/i965/brw_shader.cpp | 1 +
> > src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 1 +
> > src/mesa/main/uniform_query.cpp | 5 +-
> > src/mesa/program/ir_to_mesa.cpp | 3 +
> > 26 files changed, 413 insertions(+), 181 deletions(-)
> >
> > --
> > 1.9.3
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list