summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir-spirv-snippet.cpp
diff options
context:
space:
mode:
authorEllie Hermaszewska <ellieh@nvidia.com>2023-08-29 06:05:26 +0800
committerGitHub <noreply@github.com>2023-08-28 15:05:26 -0700
commit508dc3a95de50de4a4d07d0a72a18e40d55b0e2e (patch)
tree7487232f5c0db0dd607e2a91b539f6a592789b06 /source/slang/slang-ir-spirv-snippet.cpp
parent06f7ef354cdde4cf8e8797d8853ed2d9c3208b5b (diff)
Allow bitwise or expressions and numeric literals in spirv_asm blocks (#3157)
* Add -spirv-core-grammar option to load alternate spirv defs Also embed a version to use by default * Use perfect hash for spv op lookup * Neaten perfect hash embedding * Refactor spirv grammar lookup in preperation for more kinds of lookups * Load spirv capability list from spec * Add all SPIR-V enums to lookup table * regenerate vs projects * appease msvc * Use string slices for spir-v core grammar lookups * wiggle * comment * Add OpInfo for spv ops * regenerate vs projects * Embed op names * Add min/max operand counts and enum categories to spirv info * neaten * Operand kinds for spirv ops * Store and embed all information relating to spirv enums and qualifiers * Use SPIR-V spec to position instructions in spirv_asm blocks * Neaten spir-v info embedding * Neaten perfect hash embedding * Add assignment syntax to spirv_asm snippets * Better errors for spirv_asm parser * Add warning for too many operands in spirv asm * squash warnings * neaten * test wiggle * Lookup enums for spirv * Put OpCapability and OpExtension in the correct place for spirv_asm blocks * Tests for OpCapability and OpExtension * ci wiggle * Add expected failure * Allow raising immediate values to constant ids where necessary in spirv_asm blocks * Allow bitwise or expressions and numeric literals in spirv_asm blocks * test numeric literals * Fix memory issues. * fix. --------- Co-authored-by: Yong He <yonghe@outlook.com>
Diffstat (limited to 'source/slang/slang-ir-spirv-snippet.cpp')
-rw-r--r--source/slang/slang-ir-spirv-snippet.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/source/slang/slang-ir-spirv-snippet.cpp b/source/slang/slang-ir-spirv-snippet.cpp
index 98466e8ff..055eb982b 100644
--- a/source/slang/slang-ir-spirv-snippet.cpp
+++ b/source/slang/slang-ir-spirv-snippet.cpp
@@ -3,6 +3,7 @@
#include "slang-ir-spirv-snippet.h"
#include "slang-lookup-spirv.h"
#include "../core/slang-token-reader.h"
+#include "../compiler-core/slang-spirv-core-grammar.h"
namespace Slang
{
@@ -85,7 +86,9 @@ SpvWord readWordOrWordLiteral(Misc::TokenReader& reader)
return ret;
}
-RefPtr<SpvSnippet> SpvSnippet::parse(UnownedStringSlice definition)
+RefPtr<SpvSnippet> SpvSnippet::parse(
+ const SPIRVCoreGrammarInfo& spirvGrammar,
+ UnownedStringSlice definition)
{
RefPtr<SpvSnippet> snippet = new SpvSnippet();
try
@@ -118,11 +121,13 @@ RefPtr<SpvSnippet> SpvSnippet::parse(UnownedStringSlice definition)
case Slang::Misc::TokenType::Identifier:
{
auto opName = tokenReader.ReadWord();
- if(!lookupSpvOp(opName.getUnownedSlice(), opCode))
+ const auto opCodeMaybe = spirvGrammar.opcodes.lookup(opName.getUnownedSlice());
+ if(!opCodeMaybe)
{
throw Misc::TextFormatException(
"Text parsing error: Unrecognized SPIR-V opcode: " + opName);
}
+ opCode = *opCodeMaybe;
break;
}
default: