agx: Pack block image store dim correctly
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Mon, 28 Aug 2023 13:58:00 +0000 (09:58 -0400)
committerAlyssa Rosenzweig <alyssa@rosenzweig.io>
Sun, 1 Oct 2023 16:32:12 +0000 (12:32 -0400)
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
src/asahi/compiler/agx_pack.c

index 5b28de5..c26bd14 100644 (file)
@@ -895,11 +895,7 @@ agx_pack_instr(struct util_dynarray *emission, struct util_dynarray *fixups,
       assert(offset.size == AGX_SIZE_16);
       unsigned R = offset.value;
 
-      assert(I->dim == AGX_DIM_2D || I->dim == AGX_DIM_2D_MS);
-      bool msaa = (I->dim == AGX_DIM_2D_MS);
-
       bool unk1 = true;
-      unsigned unk2 = msaa ? 38 : 37; /* XXX */
       unsigned unk3 = 1;
 
       uint32_t word0 = agx_opcodes_info[I->op].encoding.exact |
@@ -907,8 +903,10 @@ agx_pack_instr(struct util_dynarray *emission, struct util_dynarray *fixups,
                        ((F & 1) << 8) | ((R & BITFIELD_MASK(6)) << 9) |
                        (unk1 ? (1u << 31) : 0);
 
-      uint32_t word1 =
-         (T & BITFIELD_MASK(6)) | (Tt << 2) | (unk2 << 9) | ((R >> 6) << 24);
+      uint32_t word1 = (T & BITFIELD_MASK(6)) | (Tt << 2) |
+                       ((I->dim & BITFIELD_MASK(3)) << 8) |
+                       ((I->dim & BITFIELD_BIT(3)) ? (1u << 23) : 0) |
+                       ((R >> 6) << 24);
 
       uint32_t word2 = (F >> 1) | (unk3 ? (1 << 3) : 0) | ((T >> 6) << 14);