[Mesa-dev] [PATCH 0/8] nir: Require numbers of components to always match

Jason Ekstrand jason at jlekstrand.net
Sat Mar 4 01:12:24 UTC 2017


When NIR was first created, we were a bit lazy about numbers of components.
The rule was that a source couldn't consume more components than the thing
it was reading from.  However, this leads to a lot of confusion because you
now have a thing sourcing from a vec4 but only reading two of the
components.

The solution to this is to disallow that case and require that the number
of components always match.  The one exception is ALU instructions because
they're designed to naturally swizzle things around like mad.  We already
require this restriction for phi instructions.  This series adds it for
intrinsics, texture instructions, and deref indirects.

Cc: Kenneth Graunke <kenneth at whitecape.org>
Cc: Connor Abbott <cwabbott0 at gmaial.com>

Jason Ekstrand (8):
  nir/intrinsics: Make load_barycentric_input take a 2-component coor
  nir/copy_prop: Respect the source's number of components
  nir/spirv: Restrict the number of channels in texture coordinates
  nir/lower_tex: Use tex_instr_dest_size for txs destinations
  anv/apply_dynamic_offsets: Only use one channel for computed offsets
  i965/fs: Use num_components from the SSA def in image intrinsics
  nir: Make image_size a variable-width intrinsic
  nir/validate: Validate that bit sizes and components always match

 src/compiler/glsl/glsl_to_nir.cpp                |   7 +-
 src/compiler/nir/nir_intrinsics.h                |   6 +-
 src/compiler/nir/nir_lower_tex.c                 |   3 +-
 src/compiler/nir/nir_opt_copy_propagate.c        | 129 +++++++++++++++++------
 src/compiler/nir/nir_validate.c                  | 101 +++++++++++-------
 src/compiler/spirv/spirv_to_nir.c                |  21 ++--
 src/intel/vulkan/anv_nir_apply_dynamic_offsets.c |   3 +-
 src/mesa/drivers/dri/i965/brw_fs_nir.cpp         |   3 +-
 8 files changed, 185 insertions(+), 88 deletions(-)

-- 
2.5.0.400.gff86faf



More information about the mesa-dev mailing list