summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-parser.cpp
diff options
context:
space:
mode:
authorJulius Ikkala <julius.ikkala@gmail.com>2025-01-05 00:24:44 +0200
committerGitHub <noreply@github.com>2025-01-04 14:24:44 -0800
commit00e7542894bec76054d0a4f74033b20064b58d4c (patch)
tree44177821a14f1f690d5e1dcc9f57632abd0225c3 /source/slang/slang-parser.cpp
parent114c9766c2885fc74facf36325a3220cbacc5346 (diff)
Make 'shared' keyword map to 'groupshared' in GLSL mode (#6003)
Diffstat (limited to 'source/slang/slang-parser.cpp')
-rw-r--r--source/slang/slang-parser.cpp22
1 files changed, 21 insertions, 1 deletions
diff --git a/source/slang/slang-parser.cpp b/source/slang/slang-parser.cpp
index 1aa313fa8..22491c848 100644
--- a/source/slang/slang-parser.cpp
+++ b/source/slang/slang-parser.cpp
@@ -8335,6 +8335,26 @@ static NodeBase* parseCUDASMVersionModifier(Parser* parser, void* /*userData*/)
parser->sink->diagnose(token, Diagnostics::invalidCUDASMVersion);
return nullptr;
}
+
+static NodeBase* parseSharedModifier(Parser* parser, void* /*userData*/)
+{
+ Modifier* modifier = nullptr;
+
+ // While in GLSL compatibility mode, 'shared' = 'groupshared' and not the
+ // D3D11 effect syntax.
+ if (parser->options.allowGLSLInput)
+ {
+ modifier = parser->astBuilder->create<HLSLGroupSharedModifier>();
+ }
+ else
+ {
+ modifier = parser->astBuilder->create<HLSLEffectSharedModifier>();
+ }
+ modifier->keywordName = getName(parser, "shared");
+ modifier->loc = parser->tokenReader.peekLoc();
+ return modifier;
+}
+
static NodeBase* parseVolatileModifier(Parser* parser, void* /*userData*/)
{
ModifierListBuilder listBuilder;
@@ -8762,7 +8782,7 @@ static const SyntaxParseInfo g_parseSyntaxEntries[] = {
_makeParseModifier("sample", HLSLSampleModifier::kReflectClassInfo),
_makeParseModifier("centroid", HLSLCentroidModifier::kReflectClassInfo),
_makeParseModifier("precise", PreciseModifier::kReflectClassInfo),
- _makeParseModifier("shared", HLSLEffectSharedModifier::kReflectClassInfo),
+ _makeParseModifier("shared", parseSharedModifier),
_makeParseModifier("groupshared", HLSLGroupSharedModifier::kReflectClassInfo),
_makeParseModifier("static", HLSLStaticModifier::kReflectClassInfo),
_makeParseModifier("uniform", HLSLUniformModifier::kReflectClassInfo),