From: Eduardo Lima Mitev Date: Tue, 26 Feb 2019 07:45:07 +0000 (+0100) Subject: nir: Add ir3-specific version of most SSBO intrinsics X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6ff50a488a12f86069bff88e3ad1b6473a76f014;p=mesa.git nir: Add ir3-specific version of most SSBO intrinsics These are ir3 specific versions of SSBO intrinsics that add an extra source to hold the element offset (dword), which is what the backend instructions need. The original byte-offset source provided by NIR is not replaced because on a4xx and a5xx the backend still needs it. Reviewed-by: Rob Clark --- diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index 1ae453f757d..a6c74dc2543 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -654,3 +654,30 @@ store("shared", 2, [BASE, WRMASK, ALIGN_MUL, ALIGN_OFFSET]) # src[] = { value, address }. # const_index[] = { write_mask, align_mul, align_offset } store("global", 2, [WRMASK, ACCESS, ALIGN_MUL, ALIGN_OFFSET]) + + +# IR3-specific version of most SSBO intrinsics. The only different +# compare to the originals is that they add an extra source to hold +# the dword-offset, which is needed by the backend code apart from +# the byte-offset already provided by NIR in one of the sources. +# +# NIR lowering pass 'ir3_nir_lower_io_offset' will replace the +# original SSBO intrinsics by these, placing the computed +# dword-offset always in the last source. +# +# The float versions are not handled because those are not supported +# by the backend. +intrinsic("store_ssbo_ir3", src_comp=[0, 1, 1, 1], + indices=[WRMASK, ACCESS, ALIGN_MUL, ALIGN_OFFSET]) +intrinsic("load_ssbo_ir3", src_comp=[1, 1, 1], dest_comp=0, + indices=[ACCESS, ALIGN_MUL, ALIGN_OFFSET], flags=[CAN_ELIMINATE]) +intrinsic("ssbo_atomic_add_ir3", src_comp=[1, 1, 1, 1], dest_comp=1) +intrinsic("ssbo_atomic_imin_ir3", src_comp=[1, 1, 1, 1], dest_comp=1) +intrinsic("ssbo_atomic_umin_ir3", src_comp=[1, 1, 1, 1], dest_comp=1) +intrinsic("ssbo_atomic_imax_ir3", src_comp=[1, 1, 1, 1], dest_comp=1) +intrinsic("ssbo_atomic_umax_ir3", src_comp=[1, 1, 1, 1], dest_comp=1) +intrinsic("ssbo_atomic_and_ir3", src_comp=[1, 1, 1, 1], dest_comp=1) +intrinsic("ssbo_atomic_or_ir3", src_comp=[1, 1, 1, 1], dest_comp=1) +intrinsic("ssbo_atomic_xor_ir3", src_comp=[1, 1, 1, 1], dest_comp=1) +intrinsic("ssbo_atomic_exchange_ir3", src_comp=[1, 1, 1, 1], dest_comp=1) +intrinsic("ssbo_atomic_comp_swap_ir3", src_comp=[1, 1, 1, 1, 1], dest_comp=1)