agx: Pack indirect texture/sampler handles
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Mon, 27 Feb 2023 02:52:35 +0000 (21:52 -0500)
committerMarge Bot <emma+marge@anholt.net>
Fri, 10 Mar 2023 14:14:42 +0000 (14:14 +0000)
For indirect indexing into the binding table. Note this does not handle packing
the bindless forms, since that's a bit more involved.

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21704>

src/asahi/compiler/agx_pack.c

index 6c7558a..f5a7804 100644 (file)
@@ -66,18 +66,28 @@ agx_pack_sample_coords(agx_index index, bool *flag)
 static unsigned
 agx_pack_texture(agx_index index, unsigned *flag)
 {
-   /* TODO: indirection */
-   assert(index.type == AGX_INDEX_IMMEDIATE);
-   *flag = 0;
+   if (index.type == AGX_INDEX_REGISTER) {
+      assert(index.size == AGX_SIZE_16);
+      *flag = 1;
+   } else {
+      assert(index.type == AGX_INDEX_IMMEDIATE);
+      *flag = 0;
+   }
+
    return index.value;
 }
 
 static unsigned
 agx_pack_sampler(agx_index index, bool *flag)
 {
-   /* TODO: indirection */
-   assert(index.type == AGX_INDEX_IMMEDIATE);
-   *flag = 0;
+   if (index.type == AGX_INDEX_REGISTER) {
+      assert(index.size == AGX_SIZE_16);
+      *flag = 1;
+   } else {
+      assert(index.type == AGX_INDEX_IMMEDIATE);
+      *flag = 0;
+   }
+
    return index.value;
 }