diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index d62d8aa9b8d..d9db0afc3b4 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -1549,6 +1549,48 @@ store("tlb_sample_color_v3d", [1], [BASE, COMPONENT, SRC_TYPE], []) # the target framebuffer intrinsic("load_fb_layers_v3d", dest_comp=1, flags=[CAN_ELIMINATE, CAN_REORDER]) +# Load/store a pixel in local memory. This operation is formatted, with +# conversion between the specified format and the implied register format of the +# source/destination (for store/loads respectively). This mostly matters for +# converting between floating-point registers and normalized memory formats. +# +# The format is the pipe_format of the local memory (the source), see +# agx_internal_formats.h for the supported list. +# +# Logically, this loads/stores a single sample. The sample to load is +# specified by the bitfield sample mask source. However, for stores multiple +# bits of the sample mask may be set, which will replicate the value. For +# pixel rate shading, use 0xFF as the mask to store to all samples regardless of +# the sample count. +# +# All calculations are relative to an immediate byte offset into local +# memory, which acts relative to the start of the sample. These instructions +# logically access: +# +# (((((y * tile_width) + x) * nr_samples) + sample) * sample_stride) + offset +# +# src[] = { sample mask } +# base = offset +load("local_pixel_agx", [1], [BASE, FORMAT], [CAN_REORDER, CAN_ELIMINATE]) +# src[] = { value, sample mask } +# base = offset +store("local_pixel_agx", [1], [BASE, WRITE_MASK, FORMAT], [CAN_REORDER]) + +# Store a block from local memory into a bound image. Used to write out render +# targets within the end-of-tile shader, although it is valid in general compute +# kernels. +# +# The format is the pipe_format of the local memory (the source), see +# agx_internal_formats.h for the supported list. The image format is +# specified in the PBE descriptor. +# +# The image dimension is used to distinguish multisampled images from +# non-multisampled images. It must be 2D or MS. +# +# src[] = { image index, logical offset within shared memory } +intrinsic("block_image_store_agx", [1, 1], bit_sizes=[32, 16], + indices=[FORMAT, IMAGE_DIM], flags=[CAN_REORDER]) + # Logical complement of load_front_face, mapping to an AGX system value system_value("back_face_agx", 1, bit_sizes=[1, 32])