diff options
| author | Yong He <yonghe@outlook.com> | 2023-08-25 08:49:02 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-25 23:49:02 +0800 |
| commit | 036abc85ba1db9c8c06289f0a0492e9a95a228b9 (patch) | |
| tree | e497168c36e95190a6d8b4dae9f483f27e5aa2cd /tools | |
| parent | 0470ea05a42d6c3f35d81a433fefdd440500cdbd (diff) | |
Support SPIRV Capability declaration on intrinsic functions. (#3150)
* Spirv Capability lookup.
* Fix.
---------
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/slang-lookup-generator/lookup-generator-main.cpp | 41 |
1 files changed, 29 insertions, 12 deletions
diff --git a/tools/slang-lookup-generator/lookup-generator-main.cpp b/tools/slang-lookup-generator/lookup-generator-main.cpp index cb1c15dd3..f64e2a78f 100644 --- a/tools/slang-lookup-generator/lookup-generator-main.cpp +++ b/tools/slang-lookup-generator/lookup-generator-main.cpp @@ -6,6 +6,7 @@ #include "../../source/compiler-core/slang-lexer.h" #include "../../source/core/slang-io.h" #include "../../source/core/slang-secure-crt.h" +#include "../../source/core/slang-string-util.h" using namespace Slang; @@ -310,7 +311,7 @@ int main(int argc, const char* const* argv) return 1; } - const char* const inJsonPath = argv[1]; + const char* const inPath = argv[1]; const char* const outCppPath = argv[2]; const char* const enumName = argv[3]; const char* const enumerantPrefix = argv[4]; @@ -322,20 +323,36 @@ int main(int argc, const char* const* argv) DiagnosticSink sink(&sourceManager, Lexer::sourceLocationLexer); sink.writer = writer; - JSONContainer container(sink.getSourceManager()); - JSONBuilder builder(&container); - if (SLANG_FAILED(parseJson(inJsonPath, &sink, builder))) + List<String> opnames; + + if (String(inPath).endsWith("json")) { - sink.diagnoseRaw(Severity::Error, "Json parsing failed\n"); - return 1; - } + // If source is a json file parse it. + JSONContainer container(sink.getSourceManager()); + JSONBuilder builder(&container); + if (SLANG_FAILED(parseJson(inPath, &sink, builder))) + { + sink.diagnoseRaw(Severity::Error, "Json parsing failed\n"); + return 1; + } - UnownedStringSlice error; - const List<String> opnames = extractOpNames(error, builder.getRootValue(), container); - if (error.getLength()) + UnownedStringSlice error; + opnames = extractOpNames(error, builder.getRootValue(), container); + if (error.getLength()) + { + sink.diagnoseRaw(Severity::Error, error); + return 1; + } + } + else { - sink.diagnoseRaw(Severity::Error, error); - return 1; + // Otherwise, we assume the input is a text file with one name per line. + String content; + File::readAllText(inPath, content); + List<UnownedStringSlice> words; + StringUtil::split(content.getUnownedSlice(), '\n', words); + for (auto w : words) + opnames.add(w); } HashParams hashParams; |
