pan/bit: Add `run` mode to the cmdline
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Tue, 31 Mar 2020 01:21:49 +0000 (21:21 -0400)
committerMarge Bot <eric+marge@anholt.net>
Wed, 1 Apr 2020 02:25:05 +0000 (02:25 +0000)
This emulates the functionality of shader_runner (built for kbase) using
the bifrost testing infrastructure so it runs on mainline. Ideally this
will let us test shaders from the assembler.

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

src/panfrost/bifrost/cmdline.c

index 24dd3c2d5a5582050af07b72467e32a0608803a1..a62f230cbba17488b03b22a9b6b191c1b56a1218 100644 (file)
@@ -106,6 +106,38 @@ test_vertex(char **argv)
         bit_vertex(dev, compile_shader(argv, true));
 }
 
+static void
+run(const char *filename)
+{
+        FILE *fp = fopen(filename, "rb");
+        assert(fp);
+
+        fseek(fp, 0, SEEK_END);
+        unsigned filesize = ftell(fp);
+        rewind(fp);
+
+        unsigned char *code = malloc(filesize);
+        unsigned res = fread(code, 1, filesize, fp);
+        if (res != filesize) {
+                printf("Couldn't read full file\n");
+        }
+        fclose(fp);
+
+        void *memctx = NULL; /* TODO */
+        struct panfrost_device *dev = bit_initialize(memctx);
+
+        panfrost_program prog = {
+                .compiled = {
+                        .data = code,
+                        .size = filesize
+                },
+        };
+
+        bit_vertex(dev, prog);
+
+        free(code);
+}
+
 int
 main(int argc, char **argv)
 {
@@ -120,6 +152,8 @@ main(int argc, char **argv)
                 disassemble(argv[2]);
         else if (strcmp(argv[1], "test-vertex") == 0)
                 test_vertex(&argv[2]);
+        else if (strcmp(argv[1], "run") == 0)
+                run(argv[2]);
         else
                 unreachable("Unknown command. Valid: compile/disasm");