diff options
| author | Yong He <yonghe@outlook.com> | 2020-06-18 15:06:14 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-06-18 15:06:14 -0700 |
| commit | 515d8eb0cd719ae31db2f6e03751011a123bc0ba (patch) | |
| tree | 3e78893a74af856fb29158078bed7099a567f5dd /source/slang/slang-compiler.cpp | |
| parent | e2d21026d115dc61296b47dcc990534f1844bc7f (diff) | |
| parent | aa6aca498cd1f7fbbdb143e72dd48b1d714c8fbb (diff) | |
Merge branch 'master' into feature/prelude-fix
Diffstat (limited to 'source/slang/slang-compiler.cpp')
| -rw-r--r-- | source/slang/slang-compiler.cpp | 95 |
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); |
