This is a freedreno specific intrinsic intended to be injected by a 'ir3_nir_lower_sampler_io' pass that will be introduced later in this series, and consumed by ir3_compiler_nir.
The intrinsic will load-in SSA values for various image constants (from image_dims), namely the format's bytes-per-pixel, y-stride and z-stride; for which the backend compiler will emit the corresponding uniforms. The single source src0 is the image deref. const_index[0] is the index into image_dims' register file for a given image: 0 for bpp, 1 for y-stride and 2 for z-stride. --- src/compiler/nir/nir_intrinsics.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index 90d347f7331..f79a8cebc54 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -644,3 +644,18 @@ 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-specifc query for loading image parameters at shader compile-time +# (bytes-per-pixel, y-stride and z-stride), that will be emitted as +# uniforms during shader run-time. +# +# src0 is the image deref. const-index[0] represents the specific +# parameter being loaded (in ir3 compiler context, it is the offset +# into image_dims register file): 0 for BPP, 1 for y-stride and 2 for +# z-stride. +# +# @FIXME: Should this be merged with 'image_deref_load_param_intel'? +# Both seem semantically similar. +intrinsic("image_deref_load_param_ir3", src_comp=[1], dest_comp=0, + indices=[BASE], flags=[CAN_ELIMINATE, CAN_REORDER]) -- 2.20.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev