示例#1
0
spv_result_t ValidateBase<T, OPTIONS>::ValidateInstructions() {
  return spvValidate(context_, get_const_binary(), validation_options_,
                     &diagnostic_);
}
示例#2
0
int main(int argc, char** argv) {
  if (2 > argc) {
    print_usage(argv[0]);
    return 1;
  }

  const char* inFile = nullptr;
  uint32_t options = 0;

  for (int argi = 1; argi < argc; ++argi) {
    if ('-' == argv[argi][0]) {
      if (!strcmp("basic", argv[argi] + 1)) {
        options |= SPV_VALIDATE_BASIC_BIT;
      } else if (!strcmp("layout", argv[argi] + 1)) {
        options |= SPV_VALIDATE_LAYOUT_BIT;
      } else if (!strcmp("id", argv[argi] + 1)) {
        options |= SPV_VALIDATE_ID_BIT;
      } else if (!strcmp("rules", argv[argi] + 1)) {
        options |= SPV_VALIDATE_RULES_BIT;
      } else {
        print_usage(argv[0]);
        return 1;
      }
    } else {
      if (!inFile) {
        inFile = argv[argi];
      } else {
        print_usage(argv[0]);
        return 1;
      }
    }
  }

  if (!inFile) {
    fprintf(stderr, "error: input file is empty.\n");
    return 1;
  }

  std::vector<uint32_t> contents;
  if (FILE* fp = fopen(inFile, "rb")) {
    uint32_t buf[1024];
    while (size_t len = fread(buf, sizeof(uint32_t),
                              sizeof(buf) / sizeof(uint32_t), fp)) {
      contents.insert(contents.end(), buf, buf + len);
    }
    fclose(fp);
  } else {
    fprintf(stderr, "error: file does not exist '%s'\n", inFile);
    return 1;
  }

  spv_const_binary_t binary = {contents.data(), contents.size()};

  spv_diagnostic diagnostic = nullptr;
  spv_context context = spvContextCreate();
  spv_result_t error = spvValidate(context, &binary, options, &diagnostic);
  spvContextDestroy(context);
  if (error) {
    spvDiagnosticPrint(diagnostic);
    spvDiagnosticDestroy(diagnostic);
    return error;
  }

  return 0;
}