Add ability to skip ranges of instructions; no impact to public headers
authorJohn Kessenich <cepheus@frii.com>
Tue, 12 Mar 2019 12:22:47 +0000 (06:22 -0600)
committerJohn Kessenich <cepheus@frii.com>
Tue, 12 Mar 2019 12:22:47 +0000 (06:22 -0600)
tools/buildHeaders/jsonToSpirv.cpp
tools/buildHeaders/jsonToSpirv.h
tools/buildHeaders/main.cpp

index 62b85a8..e137241 100644 (file)
@@ -230,7 +230,21 @@ unsigned int NumberStringToBit(const std::string& str)
     return bit;
 }
 
-void jsonToSpirv(const std::string& jsonPath)
+bool ExcludeInstruction(unsigned op, bool buildingHeaders)
+{
+    // Some instructions in the grammar don't need to be reflected
+    // in the specification.
+
+    if (buildingHeaders)
+        return false;
+
+    if (op >= 5699 /* OpVmeImageINTEL */ && op <= 5816 /* OpSubgroupAvcSicGetInterRawSadsINTEL */)
+        return true;
+
+    return false;
+}
+
+void jsonToSpirv(const std::string& jsonPath, bool buildingHeaders)
 {
     // only do this once.
     static bool initialized = false;
@@ -288,6 +302,8 @@ void jsonToSpirv(const std::string& jsonPath)
     const Json::Value insts = root["instructions"];
     for (const auto& inst : insts) {
         const unsigned int opcode = inst["opcode"].asUInt();
+        if (ExcludeInstruction(opcode, buildingHeaders))
+            continue;
         const std::string name = inst["opname"].asString();
         EnumCaps caps = getCaps(inst);
         std::string version = inst["version"].asString();
index bc63a4d..68a141d 100644 (file)
@@ -38,7 +38,7 @@ namespace spv {
 std::pair<bool, std::string> ReadFile(const std::string& path);
 
 // Fill in all the parameters
-void jsonToSpirv(const std::string& jsonPath);
+void jsonToSpirv(const std::string& jsonPath, bool buildingHeaders);
 
 // For parameterizing operands.
 enum OperandClass {
index 67d676c..7e5f7f8 100644 (file)
@@ -119,7 +119,7 @@ int main(int argc, char* argv[])
         return 1;
     }
 
-    spv::jsonToSpirv(jsonPath);
+    spv::jsonToSpirv(jsonPath, (Options & EOptionPrintHeader) != 0);
     if (Options & EOptionPrintHeader)
         spv::PrintHeader(Language, std::cout);