summaryrefslogtreecommitdiff
path: root/source/slang/slang-workspace-version.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-12-15 16:30:09 -0800
committerGitHub <noreply@github.com>2023-12-15 16:30:09 -0800
commitf8b3027d0be0b890152a6a649822741cd3a3b6b6 (patch)
tree7180b8063f0b99be4b4ee31288214b59ccc461ff /source/slang/slang-workspace-version.cpp
parent21d17abb0e511806b7c93effc58f37169d837766 (diff)
Add language server support for vfx files. (#3414)
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-workspace-version.cpp')
-rw-r--r--source/slang/slang-workspace-version.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/source/slang/slang-workspace-version.cpp b/source/slang/slang-workspace-version.cpp
index 86cdd000a..9a707aae7 100644
--- a/source/slang/slang-workspace-version.cpp
+++ b/source/slang/slang-workspace-version.cpp
@@ -496,6 +496,35 @@ ASTMarkup* WorkspaceVersion::getOrCreateMarkupAST(ModuleDecl* module)
return astMarkup.Ptr();
}
+void WorkspaceVersion::ensureWorkspaceFlavor(UnownedStringSlice path)
+{
+ if (flavor != WorkspaceFlavor::Standard)
+ return;
+
+ if (path.endsWithCaseInsensitive(".vfx"))
+ {
+ // Setup linkage for vfx files.
+ // TODO: consider supporting this as an external config file.
+ flavor = WorkspaceFlavor::VFX;
+ linkage->setEnableEffectAnnotations(true);
+ linkage->addPreprocessorDefine("VS", "__file_decl");
+ linkage->addPreprocessorDefine("CS", "__file_decl");
+ linkage->addPreprocessorDefine("GS", "__file_decl");
+ linkage->addPreprocessorDefine("PS", "__file_decl");
+ linkage->addPreprocessorDefine("RTX", "__file_decl");
+ linkage->addPreprocessorDefine("PS_RTX", "__file_decl");
+ linkage->addPreprocessorDefine("VS_RTX", "__file_decl");
+ linkage->addPreprocessorDefine("FRAGMENT_ANNOTATION", "");
+ linkage->addPreprocessorDefine("DynamicCombo", "//");
+ linkage->addPreprocessorDefine("DynamicComboRule", "//");
+ linkage->addPreprocessorDefine("HEADER", "__ignored_block");
+ linkage->addPreprocessorDefine("MODES", "__ignored_block");
+ linkage->addPreprocessorDefine("PS_RENDER_STATE", "__ignored_block");
+ linkage->addPreprocessorDefine("FEATURES", "__ignored_block");
+ linkage->addPreprocessorDefine("COMMON", "__transparent_block");
+ }
+}
+
Module* WorkspaceVersion::getOrLoadModule(String path)
{
Module* module;
@@ -512,6 +541,9 @@ Module* WorkspaceVersion::getOrLoadModule(String path)
auto moduleName = getMangledNameFromNameString(path.getUnownedSlice());
linkage->contentAssistInfo.primaryModuleName = linkage->getNamePool()->getName(moduleName);
linkage->contentAssistInfo.primaryModulePath = path;
+
+ ensureWorkspaceFlavor(path.getUnownedSlice());
+
// Note:
// The module at `path` may have already been loaded into the linkage previously
// due to an `import`. However that module won't get fully checked in when the checker