From 3aaab87563e40bdd8fb98494d7e3eb844521476c Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Mon, 29 Sep 2014 08:52:16 -0400 Subject: [PATCH] freedreno/ir3: add some cmdline args Signed-off-by: Rob Clark --- src/gallium/drivers/freedreno/ir3/ir3_cmdline.c | 95 ++++++++++++++++++++++--- 1 file changed, 87 insertions(+), 8 deletions(-) diff --git a/src/gallium/drivers/freedreno/ir3/ir3_cmdline.c b/src/gallium/drivers/freedreno/ir3/ir3_cmdline.c index 9944521..5e18325 100644 --- a/src/gallium/drivers/freedreno/ir3/ir3_cmdline.c +++ b/src/gallium/drivers/freedreno/ir3/ir3_cmdline.c @@ -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); -- 2.7.4