summaryrefslogtreecommitdiff
path: root/source/slang/slang-emit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-emit.cpp')
-rw-r--r--source/slang/slang-emit.cpp42
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;