[Mesa-dev] [PATCH 0/8] intel: Move shared/SSBO access lowering to NIR

Samuel Iglesias Gonsálvez siglesias at igalia.com
Thu Nov 15 11:32:32 UTC 2018



On 14/11/2018 22:38, Jason Ekstrand wrote:
> I just sent one more, "nir/lower_io: Add shared to get_io_offset_src"
> that's required for the pass to apply properly to shared vairables.
> 

I have reviewed it too.

> Do we have any testing of shared variables with anything other than 32
> bits?  Do we even test 64 bits?  I'm begining to think that there are
> basically zero tests for anything other than 32-bit. :(
> 

We checked CTS and piglit and we have not found any OpenGL or Vulkan
shared variable test with anything other than 32 bits :-(

Sam

> On Wed, Nov 14, 2018 at 5:48 AM Samuel Iglesias Gonsálvez
> <siglesias at igalia.com <mailto:siglesias at igalia.com>> wrote:
> 
>     Thanks a lot for this work. Patches 1-7 are,
> 
>       Reviewed-by: Samuel Iglesias Gonsálvez <siglesias at igalia.com
>     <mailto:siglesias at igalia.com>>
> 
>     I will review patch 8 later, probably tomorrow.
> 
>     Sam
> 
>     On 14/11/2018 00:23, Jason Ekstrand wrote:
>     > In order to properly do all the different kinds of SSBO and SLM
>     writes that
>     > we have in GL and Vulkan, we have to do some lowering.  The hardware
>     > doesn't have instructions for writing a N-bit vecM with an arbitrary
>     > write-mask.  Instead, we have byte scattered messages which work on a
>     > scalar byte, word, or dword at an unaligned address and untyped
>     surface
>     > messages which work on a 32-bit vecN.  All SSBO and SLM access has
>     to be
>     > lowered to one of these two things.
>     >
>     > Previously we did this in the back-end and had separate copies for
>     fs and
>     > vec4.  This works but it was fairly heavily tied to the
>     fs_surface_builder
>     > and the way we emit typed load/store ops.  I've been interested in
>     wiring
>     > up the A64 messages for doing "global" reads and writes and they
>     will need
>     > exactly the same lowering but I'm not at all convinced I want to
>     shove them
>     > through the same emit_untyped_read/write helpers we have today. 
>     In any
>     > case, this lets us share code between vec4 and fs and I think the
>     > implementation is over-all cleaner for it.  This series has a few
>     other
>     > advantages beyond just code sharing:
>     >
>     >  1) The new splitting code acts on ranges of bytes and is able to
>     combine
>     >     loads/stores in more cases than the old code could.  For
>     example, an
>     >     indirect u8vec3 load is now just a single dword load where we
>     throw
>     >     away the last 16 bits.  Another example is that a u16vec4
>     write with a
>     >     YZ writemask is now written with a single unaligned dword store.
>     >
>     >  2) OpBitcast in SPIR-V now works correctly on 8-bit types.
>     >
>     >  3) Writes to 8 and 16-bit shared variables should now work.
>     >
>     > Cc: Samuel Iglesias Gonsálvez <siglesias at igalia.com
>     <mailto:siglesias at igalia.com>>
>     > Cc: Jose Maria Casanova Crespo <jmcasanova at igalia.com
>     <mailto:jmcasanova at igalia.com>>
>     >
>     > Jason Ekstrand (8):
>     >   nir/lower_alu_to_scalar: Don't try to lower unpack_32_2x16
>     >   nir/builder: Assert that intN_t immediates fit
>     >   nir/builder: Add iadd_imm and imul_imm helpers
>     >   nir/builder: Add a nir_pack/unpack/bitcast helpers
>     >   nir/spirv: Force 32-bit for UBO and SSBO Booleans
>     >   nir/glsl: Force 32-bit for UBO and SSBO Booleans
>     >   nir: Add alignment parameters to SSBO, UBO, and shared access
>     >   intel/compiler: Lower SSBO and shared loads/stores in NIR
>     >
>     >  src/compiler/glsl/glsl_to_nir.cpp             |  31 +-
>     >  src/compiler/nir/nir.h                        |  41 ++
>     >  src/compiler/nir/nir_builder.h                | 142 +++++++
>     >  src/compiler/nir/nir_intrinsics.py            |  26 +-
>     >  src/compiler/nir/nir_lower_alu_to_scalar.c    |   1 +
>     >  src/compiler/nir/nir_lower_atomics_to_ssbo.c  |   4 +
>     >  src/compiler/nir/nir_lower_io.c               |   5 +-
>     >  src/compiler/nir/nir_print.c                  |   2 +
>     >  src/compiler/spirv/spirv_to_nir.c             |   2 +
>     >  src/compiler/spirv/vtn_alu.c                  | 101 ++---
>     >  src/compiler/spirv/vtn_variables.c            |  30 +-
>     >  src/intel/Makefile.sources                    |   1 +
>     >  src/intel/compiler/brw_fs_nir.cpp             | 381
>     ++++--------------
>     >  src/intel/compiler/brw_nir.c                  |   2 +
>     >  src/intel/compiler/brw_nir.h                  |   2 +
>     >  .../brw_nir_lower_mem_access_bit_sizes.c      | 313 ++++++++++++++
>     >  src/intel/compiler/brw_vec4_nir.cpp           | 126 +-----
>     >  src/intel/compiler/meson.build                |   1 +
>     >  18 files changed, 702 insertions(+), 509 deletions(-)
>     >  create mode 100644
>     src/intel/compiler/brw_nir_lower_mem_access_bit_sizes.c
>     >
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20181115/a9259eac/attachment-0001.sig>


More information about the mesa-dev mailing list