diff options
| author | Yong He <yonghe@outlook.com> | 2023-09-26 23:56:06 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-27 14:56:06 +0800 |
| commit | ebe8ddefc48478307d5f206cd3e40c41d28a36e3 (patch) | |
| tree | 8e13977979909a26394eea532d8b95cd5ad0f6d1 /source/slang/slang-emit.cpp | |
| parent | c5c8cfbb360d9a763f549df48636effde839eacd (diff) | |
Various SPIRV fixes. (#3231)
* Various SPIRV fixes.
- Geometry shader support (WIP).
- Fix texture get dimension and load.
- Fold global GetElement(MakeArray/MakeVector) insts.
- Call spvopt to inline all functions.
- Translate OpImageSubscript.
- Emit struct member names and global variable names.
- Fix lowering of OpBitNot -> OpNot, instead of OpBitReverse.
* Fix test.
* Fix geometry shader.
* Fix geometry shader emit.
* Add atomic Image access test.
* Fix tests.
* don't fail if spirv-opt fails.
* Update comments.
* Fix test.
* Cleanups.
* indentation
---------
Co-authored-by: Yong He <yhe@nvidia.com>
Co-authored-by: Ellie Hermaszewska <ellieh@nvidia.com>
Diffstat (limited to 'source/slang/slang-emit.cpp')
| -rw-r--r-- | source/slang/slang-emit.cpp | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/source/slang/slang-emit.cpp b/source/slang/slang-emit.cpp index f2906dfc3..15ce25c3c 100644 --- a/source/slang/slang-emit.cpp +++ b/source/slang/slang-emit.cpp @@ -72,7 +72,7 @@ #include "slang-legalize-types.h" #include "slang-lower-to-ir.h" #include "slang-mangle.h" - +#include "slang-spirv-opt.h" #include "slang-syntax.h" #include "slang-type-layout.h" #include "slang-visitor.h" @@ -773,15 +773,20 @@ Result linkAndOptimizeIR( switch (target) { case CodeGenTarget::GLSL: + case CodeGenTarget::SPIRV: + case CodeGenTarget::SPIRVAssembly: { - auto glslExtensionTracker = as<GLSLExtensionTracker>(options.sourceEmitter->getExtensionTracker()); + GLSLExtensionTracker glslExtensionTracker; + GLSLExtensionTracker* glslExtensionTrackerPtr = options.sourceEmitter + ? as<GLSLExtensionTracker>(options.sourceEmitter->getExtensionTracker()) + : &glslExtensionTracker; legalizeEntryPointsForGLSL( session, irModule, irEntryPoints, codeGenContext, - glslExtensionTracker); + glslExtensionTrackerPtr); #if 0 dumpIRIfEnabled(codeGenContext, irModule, "GLSL LEGALIZED"); @@ -1259,11 +1264,18 @@ SlangResult emitSPIRVForEntryPointsDirectly( auto irModule = linkedIR.module; auto irEntryPoints = linkedIR.entryPoints; - List<uint8_t> spirv; + List<uint8_t> spirv, outSpirv; emitSPIRVFromIR(codeGenContext, irModule, irEntryPoints, spirv); + String optErr; + if (SLANG_FAILED(optimizeSPIRV(spirv, optErr, outSpirv))) + { + codeGenContext->getSink()->diagnose(SourceLoc(), Diagnostics::spirvOptFailed, optErr); + outSpirv = _Move(spirv); + } + auto artifact = ArtifactUtil::createArtifactForCompileTarget(asExternal(codeGenContext->getTargetFormat())); - artifact->addRepresentationUnknown(ListBlob::moveCreate(spirv)); + artifact->addRepresentationUnknown(ListBlob::moveCreate(outSpirv)); ArtifactUtil::addAssociated(artifact, linkedIR.metadata); |
