freedreno/ir3: add some cmdline args
authorRob Clark <robclark@freedesktop.org>
Mon, 29 Sep 2014 12:52:16 +0000 (08:52 -0400)
committerRob Clark <robclark@freedesktop.org>
Mon, 29 Sep 2014 22:30:43 +0000 (18:30 -0400)
Signed-off-by: Rob Clark <robclark@freedesktop.org>
src/gallium/drivers/freedreno/ir3/ir3_cmdline.c

index 9944521aa535ef58b6cf6861fad27771d722aed1..5e1832586e8b6c92357bb4f314a3cf2a0857d22d 100644 (file)
@@ -85,7 +85,7 @@ static void dump_info(struct ir3_shader_variant *so)
 }
 
 
-static void
+static int
 read_file(const char *filename, void **ptr, size_t *size)
 {
        int fd, ret;
@@ -94,8 +94,10 @@ read_file(const char *filename, void **ptr, size_t *size)
        *ptr = MAP_FAILED;
 
        fd = open(filename, O_RDONLY);
-       if (fd == -1)
-               errx(1, "couldn't open `%s'", filename);
+       if (fd == -1) {
+               warnx("couldn't open `%s'", filename);
+               return 1;
+       }
 
        ret = fstat(fd, &st);
        if (ret)
@@ -107,6 +109,8 @@ read_file(const char *filename, void **ptr, size_t *size)
                errx(1, "couldn't map `%s'", filename);
 
        close(fd);
+
+       return 0;
 }
 
 static void reset_variant(struct ir3_shader_variant *v, const char *msg)
@@ -119,26 +123,101 @@ static void reset_variant(struct ir3_shader_variant *v, const char *msg)
        v->immediates_count = 0;
 }
 
+static void print_usage(void)
+{
+       printf("Usage: ir3_compiler [OPTIONS]... FILE\n");
+       printf("    --verbose         - verbose compiler/debug messages\n");
+       printf("    --binning-pass    - generate binning pass shader (VERT)\n");
+       printf("    --color-two-side  - emulate two-sided color (FRAG)\n");
+       printf("    --half-precision  - use half-precision\n");
+       printf("    --alpha           - generate render-to-alpha shader (FRAG)\n");
+       printf("    --saturate-s MASK - bitmask of samplers to saturate S coord\n");
+       printf("    --saturate-t MASK - bitmask of samplers to saturate T coord\n");
+       printf("    --saturate-r MASK - bitmask of samplers to saturate R coord\n");
+       printf("    --help            - show this message\n");
+}
+
 int main(int argc, char **argv)
 {
-       int ret = 0;
-       const char *filename = argv[1];
+       int ret = 0, n = 1;
+       const char *filename;
        struct tgsi_token toks[65536];
        struct tgsi_parse_context parse;
        struct ir3_shader_variant v;
        struct ir3_shader_key key = {
-               .color_two_side = true,
        };
        void *ptr;
        size_t size;
 
-       fd_mesa_debug |= FD_DBG_DISASM | FD_DBG_OPTDUMP | FD_DBG_MSGS | FD_DBG_OPTMSGS;
+       fd_mesa_debug |= FD_DBG_DISASM;
+
+       while (n < argc) {
+               if (!strcmp(argv[n], "--verbose")) {
+                       fd_mesa_debug |=  FD_DBG_OPTDUMP | FD_DBG_MSGS | FD_DBG_OPTMSGS;
+                       n++;
+                       continue;
+               }
 
+               if (!strcmp(argv[n], "--binning-pass")) {
+                       key.binning_pass = true;
+                       n++;
+                       continue;
+               }
+
+               if (!strcmp(argv[n], "--color-two-side")) {
+                       key.color_two_side = true;
+                       n++;
+                       continue;
+               }
+
+               if (!strcmp(argv[n], "--half-precision")) {
+                       key.half_precision = true;
+                       n++;
+                       continue;
+               }
+
+               if (!strcmp(argv[n], "--alpha")) {
+                       key.alpha = true;
+                       n++;
+                       continue;
+               }
+
+               if (!strcmp(argv[n], "--saturate-s")) {
+                       key.vsaturate_s = key.fsaturate_s = strtol(argv[n+1], NULL, 0);
+                       n += 2;
+                       continue;
+               }
+
+               if (!strcmp(argv[n], "--saturate-t")) {
+                       key.vsaturate_t = key.fsaturate_t = strtol(argv[n+1], NULL, 0);
+                       n += 2;
+                       continue;
+               }
+
+               if (!strcmp(argv[n], "--saturate-r")) {
+                       key.vsaturate_r = key.fsaturate_r = strtol(argv[n+1], NULL, 0);
+                       n += 2;
+                       continue;
+               }
+
+               if (!strcmp(argv[n], "--help")) {
+                       print_usage();
+                       return 0;
+               }
+
+               break;
+       }
+
+       filename = argv[n];
 
        memset(&v, 0, sizeof(v));
        v.key = key;
 
-       read_file(filename, &ptr, &size);
+       ret = read_file(filename, &ptr, &size);
+       if (ret) {
+               print_usage();
+               return ret;
+       }
 
        if (!tgsi_text_translate(ptr, toks, Elements(toks)))
                errx(1, "could not parse `%s'", filename);