diff options
| author | ArielG-NV <159081215+ArielG-NV@users.noreply.github.com> | 2025-05-21 21:11:01 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-22 04:11:01 +0000 |
| commit | 27c6e9b01f7386263bde90e16812be46327015c2 (patch) | |
| tree | a640d6882da0c9ee90ef64872b1b94c721039cdf /source/slang/slang-options.cpp | |
| parent | 21346ded32be9091389ca53815c1ba56feff8a01 (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.cpp | 36 |
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; |
