summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-options.cpp
diff options
context:
space:
mode:
authorArielG-NV <159081215+ArielG-NV@users.noreply.github.com>2025-05-21 21:11:01 -0700
committerGitHub <noreply@github.com>2025-05-22 04:11:01 +0000
commit27c6e9b01f7386263bde90e16812be46327015c2 (patch)
treea640d6882da0c9ee90ef64872b1b94c721039cdf /source/slang/slang-options.cpp
parent21346ded32be9091389ca53815c1ba56feff8a01 (diff)
Initial `dyn` keyword support & `-lang 2026` compiler option (#7172)
fixes: [#7143](https://github.com/shader-slang/slang/issues/7143) fixes: [#7146](https://github.com/shader-slang/slang/issues/7146) Goal of PR: * This PR is part of the larger #7115 refactor to how dynamic dispatch works. * The first step is to add the `-std <std-revision>` flag. * The second step is to provide basic `dyn` keyword support in AST. This does not include `varDecl` support since most of these interactions require `some` keyword support. Future PR(s) goal: * Support `some` keyword in AST. With this we will also implement all varDecl interactions between `dyn` and `some`. * Add IR support for `some` and `dyn`. Breakdown of PR: * most of the logic is in `validateDyn.*`. This was done so that in the future when we implement more features we will have an easy time removing/adding restrictions to `dyn` interfaces. Breaking changes: * As per spec (https://github.com/shader-slang/spec/pull/14/files), any type conforming to a `dyn` interface errors if member list contains one of the following: opaque type, non copyable type, or unsized type. * Due to the breaking change, the test `tests\compute\dynamic-dispatch-bindless-texture.slang` is incorrect. This has been fixed.
Diffstat (limited to 'source/slang/slang-options.cpp')
-rw-r--r--source/slang/slang-options.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/source/slang/slang-options.cpp b/source/slang/slang-options.cpp
index d73bc4307..0182b4c22 100644
--- a/source/slang/slang-options.cpp
+++ b/source/slang/slang-options.cpp
@@ -63,6 +63,7 @@ enum class ValueCategory
FileSystemType,
VulkanShift,
SourceEmbedStyle,
+ StdRevision,
CountOf,
};
@@ -149,6 +150,14 @@ void initCommandOptions(CommandOptions& options)
options.addCategory(
CategoryKind::Value,
+ "std-revision",
+ "Std Revision",
+ UserValue(ValueCategory::StdRevision));
+ options.addValues(TypeTextUtil::getStdRevisionInfos());
+
+
+ options.addCategory(
+ CategoryKind::Value,
"archive-type",
"Archive Type",
UserValue(ValueCategory::ArchiveType));
@@ -446,6 +455,10 @@ void initCommandOptions(CommandOptions& options)
"Display the build version. This is the contents of git describe --tags.\n"
"It is typically only set from automated builds(such as distros available on github).A "
"user build will by default be 'unknown'."},
+ {OptionKind::StdRevision,
+ "-std",
+ "-std <std-revision>",
+ "Specifies the language standard that should be used."},
{OptionKind::WarningsAsErrors,
"-warnings-as-errors",
"-warnings-as-errors all or -warnings-as-errors <id>[,<id>...]",
@@ -841,6 +854,10 @@ void initCommandOptions(CommandOptions& options)
"-enable-experimental-passes",
nullptr,
"Enable experimental compiler passes"},
+ {OptionKind::EnableExperimentalDynamicDispatch,
+ "-enable-experimental-dynamic-dispatch",
+ nullptr,
+ "Enable experimental dynamic dispatch features"},
{OptionKind::EmbedDownstreamIR,
"-embed-downstream-ir",
nullptr,
@@ -2146,6 +2163,7 @@ SlangResult OptionsParser::_parse(int argc, char const* const* argv)
case OptionKind::ValidateUniformity:
case OptionKind::AllowGLSL:
case OptionKind::EnableExperimentalPasses:
+ case OptionKind::EnableExperimentalDynamicDispatch:
case OptionKind::EmitIr:
case OptionKind::DumpIntermediates:
case OptionKind::DumpReproOnError:
@@ -2537,6 +2555,24 @@ SlangResult OptionsParser::_parse(int argc, char const* const* argv)
}
break;
}
+ case OptionKind::StdRevision:
+ {
+ CommandLineArg name;
+ SLANG_RETURN_ON_FAIL(m_reader.expectArg(name));
+
+ SlangStdRevision stdRevision =
+ TypeTextUtil::findStdRevision(name.value.getUnownedSlice());
+ if (stdRevision == SLANG_STD_REVISION_UNKNOWN)
+ {
+ m_sink->diagnose(name.loc, Diagnostics::unknownStdRevision, name.value);
+ return SLANG_FAIL;
+ }
+ else
+ {
+ linkage->m_optionSet.add(OptionKind::StdRevision, stdRevision);
+ }
+ break;
+ }
case OptionKind::Stage:
{
CommandLineArg name;