nir: Support arrays in block_image_store_agx
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Mon, 28 Aug 2023 13:40:46 +0000 (09:40 -0400)
committerAlyssa Rosenzweig <alyssa@rosenzweig.io>
Sun, 1 Oct 2023 16:32:12 +0000 (12:32 -0400)
For layered rendering, runs once per layer.

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
src/asahi/lib/agx_meta.c
src/compiler/nir/nir_intrinsics.py

index b8bf15a..12e828c 100644 (file)
@@ -130,8 +130,9 @@ agx_build_end_of_tile_shader(struct agx_meta_cache *cache,
 
       nir_block_image_store_agx(
          &b, nir_imm_int(&b, rt), nir_imm_intN_t(&b, offset_B, 16),
+         nir_imm_intN_t(&b, 0, 16),
          .format = agx_tilebuffer_physical_format(&key->tib, rt),
-         .image_dim = dim);
+         .image_dim = dim, .image_array = false);
    }
 
    struct agx_shader_key compiler_key = {
index f24df48..71a570f 100644 (file)
@@ -1744,9 +1744,9 @@ intrinsic("store_zs_agx", [1, 1, 1], indices=[BASE], flags=[])
 # 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])
+# src[] = { image index, logical offset within shared memory, layer }
+intrinsic("block_image_store_agx", [1, 1, 1], bit_sizes=[32, 16, 16],
+          indices=[FORMAT, IMAGE_DIM, IMAGE_ARRAY], flags=[CAN_REORDER])
 
 # Formatted load/store. The format is the pipe_format in memory (see
 # agx_internal_formats.h for the supported list). This accesses: