diff options
Diffstat (limited to 'source/slang/slang-emit.cpp')
| -rw-r--r-- | source/slang/slang-emit.cpp | 42 |
1 files changed, 34 insertions, 8 deletions
diff --git a/source/slang/slang-emit.cpp b/source/slang/slang-emit.cpp index ed9e90462..2ccf075f3 100644 --- a/source/slang/slang-emit.cpp +++ b/source/slang/slang-emit.cpp @@ -31,6 +31,7 @@ #include "slang-ir-glsl-legalize.h" #include "slang-ir-hlsl-legalize.h" #include "slang-ir-metal-legalize.h" +#include "slang-ir-wgsl-legalize.h" #include "slang-ir-insts.h" #include "slang-ir-inline.h" #include "slang-ir-legalize-array-return-type.h" @@ -101,6 +102,7 @@ #include "slang-emit-glsl.h" #include "slang-emit-hlsl.h" #include "slang-emit-metal.h" +#include "slang-emit-wgsl.h" #include "slang-emit-cpp.h" #include "slang-emit-cuda.h" #include "slang-emit-torch.h" @@ -1234,6 +1236,12 @@ Result linkAndOptimizeIR( } break; + case CodeGenTarget::WGSL: + { + legalizeIRForWGSL(irModule, sink); + } + break; + default: break; } @@ -1535,15 +1543,28 @@ SlangResult CodeGenContext::emitEntryPointsSourceFromIR(ComPtr<IArtifact>& outAr auto targetProgram = getTargetProgram(); auto lineDirectiveMode = targetProgram->getOptionSet().getEnumOption<LineDirectiveMode>(CompilerOptionName::LineDirectiveMode); - // To try to make the default behavior reasonable, we will - // always use C-style line directives (to give the user - // good source locations on error messages from downstream - // compilers) *unless* they requested raw GLSL as the - // output (in which case we want to maximize compatibility - // with downstream tools). - if (lineDirectiveMode == LineDirectiveMode::Default && targetRequest->getTarget() == CodeGenTarget::GLSL) + // We will generally use C-style line directives in order to give the user good + // source locations on error messages from downstream compilers, but there are + // a few exceptions. + if (lineDirectiveMode == LineDirectiveMode::Default) { - lineDirectiveMode = LineDirectiveMode::GLSL; + + switch(targetRequest->getTarget()) + { + + case CodeGenTarget::GLSL: + // We want to maximize compatibility with downstream tools. + lineDirectiveMode = LineDirectiveMode::GLSL; + break; + + case CodeGenTarget::WGSL: + // WGSL doesn't support line directives. + // See https://github.com/gpuweb/gpuweb/issues/606. + lineDirectiveMode = LineDirectiveMode::None; + break; + + } + } ComPtr<IBoxValue<SourceMap>> sourceMap; @@ -1610,6 +1631,11 @@ SlangResult CodeGenContext::emitEntryPointsSourceFromIR(ComPtr<IArtifact>& outAr sourceEmitter = new MetalSourceEmitter(desc); break; } + case SourceLanguage::WGSL: + { + sourceEmitter = new WGSLSourceEmitter(desc); + break; + } default: break; } break; |
