panfrost/midgard/disasm: include textureGather()
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Mon, 10 Jun 2019 21:56:32 +0000 (14:56 -0700)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Tue, 11 Jun 2019 15:44:19 +0000 (08:44 -0700)
Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
src/gallium/drivers/panfrost/midgard/disassemble.c
src/gallium/drivers/panfrost/midgard/midgard.h

index bf8de2a2b619970c7af15b7db7de9edfb5f6078f..6a4194bc5ca4bf4b2bb16648501d523349a22a7a 100644 (file)
@@ -1048,10 +1048,23 @@ print_texture_format(int format)
 }
 
 static void
-print_texture_op(unsigned op)
+print_texture_op(unsigned op, bool gather)
 {
         /* Act like a bare name, like ESSL functions */
 
+        if (gather) {
+                printf("textureGather");
+
+                unsigned component = op >> 4;
+                unsigned bottom = op & 0xF;
+
+                if (bottom != 0x2)
+                        printf("_unk%d", bottom);
+
+                printf(".%c", components[component]);
+                return;
+        }
+
         switch (op) {
                 DEFINE_CASE(TEXTURE_OP_NORMAL, "texture");
                 DEFINE_CASE(TEXTURE_OP_LOD, "textureLod");
@@ -1077,7 +1090,7 @@ print_texture_word(uint32_t *word, unsigned tabs)
         midgard_texture_word *texture = (midgard_texture_word *) word;
 
         /* Broad category of texture operation in question */
-        print_texture_op(texture->op);
+        print_texture_op(texture->op, texture->is_gather);
 
         /* Specific format in question */
         print_texture_format(texture->format);
@@ -1180,12 +1193,10 @@ print_texture_word(uint32_t *word, unsigned tabs)
          * following unknowns are zero, so we don't include them */
 
         if (texture->unknown2 ||
-                        texture->unknown3 ||
                         texture->unknown4 ||
                         texture->unknownA ||
                         texture->unknown8) {
                 printf("// unknown2 = 0x%x\n", texture->unknown2);
-                printf("// unknown3 = 0x%x\n", texture->unknown3);
                 printf("// unknown4 = 0x%x\n", texture->unknown4);
                 printf("// unknownA = 0x%x\n", texture->unknownA);
                 printf("// unknown8 = 0x%x\n", texture->unknown8);
index c9306230872d73f957060808ff915a24c3376226..fa3e38e08797ef2f8c06a9487b6e418710fcb136 100644 (file)
@@ -510,7 +510,7 @@ __attribute__((__packed__))
 
         unsigned op  : 6;
         unsigned shadow    : 1;
-        unsigned unknown3  : 1;
+        unsigned is_gather  : 1;
 
         /* A little obscure, but last is set for the last texture operation in
          * a shader. cont appears to just be last's opposite (?). Yeah, I know,