spv_result_t ValidateBase<T, OPTIONS>::ValidateInstructions() { return spvValidate(context_, get_const_binary(), validation_options_, &diagnostic_); }
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; }