[Mesa-dev] [PATCH 0/8] intel: Move shared/SSBO access lowering to NIR
Samuel Iglesias Gonsálvez
siglesias at igalia.com
Wed Nov 14 11:48:03 UTC 2018
Thanks a lot for this work. Patches 1-7 are,
Reviewed-by: Samuel Iglesias Gonsálvez <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>
> Cc: Jose Maria Casanova Crespo <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/20181114/0aa070d2/attachment-0001.sig>
More information about the mesa-dev
mailing list