summaryrefslogtreecommitdiff
path: root/source/slang/slang-compiler.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2020-06-18 15:06:14 -0700
committerGitHub <noreply@github.com>2020-06-18 15:06:14 -0700
commit515d8eb0cd719ae31db2f6e03751011a123bc0ba (patch)
tree3e78893a74af856fb29158078bed7099a567f5dd /source/slang/slang-compiler.cpp
parente2d21026d115dc61296b47dcc990534f1844bc7f (diff)
parentaa6aca498cd1f7fbbdb143e72dd48b1d714c8fbb (diff)
Merge branch 'master' into feature/prelude-fix
Diffstat (limited to 'source/slang/slang-compiler.cpp')
-rw-r--r--source/slang/slang-compiler.cpp95
1 files changed, 46 insertions, 49 deletions
diff --git a/source/slang/slang-compiler.cpp b/source/slang/slang-compiler.cpp
index 729c0077a..fe0f7d69c 100644
--- a/source/slang/slang-compiler.cpp
+++ b/source/slang/slang-compiler.cpp
@@ -320,7 +320,7 @@ namespace Slang
//
- Profile Profile::LookUp(char const* name)
+ Profile Profile::lookUp(char const* name)
{
#define PROFILE(TAG, NAME, STAGE, VERSION) if(strcmp(name, #NAME) == 0) return Profile::TAG;
#define PROFILE_ALIAS(TAG, DEF, NAME) if(strcmp(name, #NAME) == 0) return Profile::TAG;
@@ -408,36 +408,58 @@ namespace Slang
return session->getOrLoadDownstreamCompiler(passThrough, nullptr) ? SLANG_OK: SLANG_E_NOT_FOUND;
}
- PassThroughMode getPreludeDownstreamCompilerForTarget(Session* session, CodeGenTarget target)
+ SourceLanguage getDefaultSourceLanguageForDownstreamCompiler(PassThroughMode compiler)
{
- switch (target)
+ switch (compiler)
{
- case CodeGenTarget::None:
+ case PassThroughMode::None:
{
- return PassThroughMode::None;
+ return SourceLanguage::Unknown;
}
- case CodeGenTarget::GLSL:
+ case PassThroughMode::Fxc:
+ case PassThroughMode::Dxc:
{
- // For the prelude we'll use Glslang
- return PassThroughMode::Glslang;
+ return SourceLanguage::HLSL;
}
- case CodeGenTarget::HLSL:
+ case PassThroughMode::Glslang:
{
- // Use the default compiler for the source language if set,
- DownstreamCompiler* downstreamCompiler = session->getDefaultDownstreamCompiler(SourceLanguage::HLSL);
- if (downstreamCompiler)
- {
- return PassThroughMode(downstreamCompiler->getDesc().type);
- }
- else
- {
- // This is ambiguous, because we could use dxc or fxc. For now we'll go with Dxc.
- return PassThroughMode::Dxc;
- }
+ return SourceLanguage::GLSL;
+ }
+ case PassThroughMode::Clang:
+ case PassThroughMode::VisualStudio:
+ case PassThroughMode::Gcc:
+ case PassThroughMode::GenericCCpp:
+ {
+ // These could ingest C, but we only have this function to work out a
+ // 'default' language to ingest.
+ return SourceLanguage::CPP;
}
+ case PassThroughMode::NVRTC:
+ {
+ return SourceLanguage::CUDA;
+ }
+ default: break;
+ }
+ SLANG_ASSERT(!"Unknown compiler");
+ return SourceLanguage::Unknown;
+ }
+
+ PassThroughMode getDownstreamCompilerRequiredForTarget(CodeGenTarget target)
+ {
+ switch (target)
+ {
+ // Don't *require* a downstream compiler for source output
+ case CodeGenTarget::GLSL:
+ case CodeGenTarget::HLSL:
case CodeGenTarget::CUDASource:
+ case CodeGenTarget::CPPSource:
+ case CodeGenTarget::CSource:
{
- return PassThroughMode::NVRTC;
+ return PassThroughMode::None;
+ }
+ case CodeGenTarget::None:
+ {
+ return PassThroughMode::None;
}
case CodeGenTarget::SPIRVAssembly:
case CodeGenTarget::SPIRV:
@@ -459,12 +481,6 @@ namespace Slang
{
return PassThroughMode::Glslang;
}
- case CodeGenTarget::CPPSource:
- case CodeGenTarget::CSource:
- {
- // We'll just use the generic C/C++ compiler
- return PassThroughMode::GenericCCpp;
- }
case CodeGenTarget::HostCallable:
case CodeGenTarget::SharedLibrary:
case CodeGenTarget::Executable:
@@ -484,28 +500,9 @@ namespace Slang
return PassThroughMode::None;
}
- PassThroughMode getDownstreamCompilerRequiredForTarget(Session* session, CodeGenTarget target)
- {
- switch (target)
- {
- // Don't *require* a downstream compiler for source output
- case CodeGenTarget::GLSL:
- case CodeGenTarget::HLSL:
- case CodeGenTarget::CUDASource:
- case CodeGenTarget::CPPSource:
- case CodeGenTarget::CSource:
- {
- return PassThroughMode::None;
- }
- default: break;
- }
-
- return getPreludeDownstreamCompilerForTarget(session, target);
- }
-
SlangResult checkCompileTargetSupport(Session* session, CodeGenTarget target)
{
- const PassThroughMode mode = getDownstreamCompilerRequiredForTarget(session, target);
+ const PassThroughMode mode = getDownstreamCompilerRequiredForTarget(target);
return (mode != PassThroughMode::None) ?
checkExternalCompilerSupport(session, mode) :
SLANG_OK;
@@ -634,7 +631,7 @@ namespace Slang
}
char const* stagePrefix = nullptr;
- switch( profile.GetStage() )
+ switch( profile.getStage() )
{
// Note: All of the raytracing-related stages require
// compiling for a `lib_*` profile, even when only a
@@ -669,7 +666,7 @@ namespace Slang
}
char const* versionSuffix = nullptr;
- switch(profile.GetVersion())
+ switch(profile.getVersion())
{
#define CASE(TAG, SUFFIX) case ProfileVersion::TAG: versionSuffix = #SUFFIX; break
CASE(DX_4_0, _4_0);