Add a new option, '--pciid' to override a pci id of the target arch to support cross-architecture shader compilation. Not like "-p" option, it is for accepting any GFX devices supported by the driver.
Setting both "-p" and "--pciid" is blocked to avoid conflict. Signed-off-by: Dongwon Kim <dongwon....@intel.com> --- run.c | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/run.c b/run.c index 23d2b07..d066567 100644 --- a/run.c +++ b/run.c @@ -36,6 +36,8 @@ #include <stdlib.h> #include <unistd.h> #include <stdbool.h> +#include <getopt.h> +#include <limits.h> #include <sys/mman.h> #include <sys/stat.h> #include <sys/types.h> @@ -353,10 +355,21 @@ const struct platform platforms[] = { "skl", "0x191D", }; +enum +{ + PCI_ID_OVERRIDE_OPTION = CHAR_MAX + 1, +}; + +const struct option const long_options[] = +{ + {"pciid", required_argument, NULL, PCI_ID_OVERRIDE_OPTION}, + {NULL, 0, NULL, 0} +}; + void print_usage(const char *prog_name) { fprintf(stderr, - "Usage: %s [-d <device>] [-j <max_threads>] [-o <driver>] [-p <platform>] <directories and *.shader_test files>\n", + "Usage: %s [-d <device>] [-j <max_threads>] [-o <driver>] [-p <platform>] [--pciid=<chip id of targetted gen arch>] <directories and *.shader_test files>\n", prog_name); } @@ -435,10 +448,13 @@ main(int argc, char **argv) char device_path[64]; int device_id = 0; int opt; + bool platf_overridden = 0; + bool pci_id_overridden = 0; max_threads = omp_get_max_threads(); - while ((opt = getopt(argc, argv, "d:j:o:p:")) != -1) { + while ((opt = getopt_long(argc, argv, "d:j:o:p:", + long_options, NULL)) != -1) { switch(opt) { case 'd': { char *endptr; @@ -456,6 +472,13 @@ main(int argc, char **argv) break; case 'p': { const struct platform *platform = NULL; + + if (pci_id_overridden) { + unsetenv("INTEL_DEVID_OVERRIDE"); + fprintf(stderr, "'-p' and '--pciid' can't be used together.\n"); + return -1; + } + for (unsigned i = 0; i < ARRAY_SIZE(platforms); i++) { if (strcmp(optarg, platforms[i].name) == 0) { platform = platforms + i; @@ -473,11 +496,28 @@ main(int argc, char **argv) printf("### Compiling for %s ###\n", platform->name); setenv("INTEL_DEVID_OVERRIDE", platform->pci_id, 1); + platf_overridden = 1; break; } case 'j': max_threads = atoi(optarg); break; + case PCI_ID_OVERRIDE_OPTION: + if (platf_overridden) { + unsetenv("INTEL_DEVID_OVERRIDE"); + fprintf(stderr, "'-p' and '--pciid' can't be used together.\n"); + return -1; + } + + if (optarg[0] != '0' || optarg[1] != 'x') { + fprintf(stderr, "pci-id should be a hex number starting with '0x'\n"); + return -1; + } + + printf("### Compiling for GEN arch with PCI_ID=%s ###\n", optarg); + setenv("INTEL_DEVID_OVERRIDE", optarg, 1); + pci_id_overridden = 1; + break; default: fprintf(stderr, "Unknown option: %x\n", opt); print_usage(argv[0]); -- 2.16.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev