diff options
Diffstat (limited to 'source/slang/slang-compiler.cpp')
| -rw-r--r-- | source/slang/slang-compiler.cpp | 89 |
1 files changed, 43 insertions, 46 deletions
diff --git a/source/slang/slang-compiler.cpp b/source/slang/slang-compiler.cpp index b64169db4..fe0f7d69c 100644 --- a/source/slang/slang-compiler.cpp +++ b/source/slang/slang-compiler.cpp @@ -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; |
