From 313677160a186efebf83fab4df7d08dd119a5cd2 Mon Sep 17 00:00:00 2001 From: cheneym2 Date: Thu, 5 Sep 2024 14:59:28 -0400 Subject: Initial -embed-spirv support (#4974) * Initial -embed-spirv support Add support for SPIR-V precompilation using the framework established for DXIL. Work on #4883 * SLANG_UNUSED * Add linkage attributes to exported spirv functions * Combine DXIL and SPIRV paths * Whitespace fix * Merge remaining precompiled spirv/dxil paths * Change inst accessors to return codegentarget * Add unit test for precompiled spirv --------- Co-authored-by: Yong He --- source/slang/slang-emit-spirv.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'source/slang/slang-emit-spirv.cpp') diff --git a/source/slang/slang-emit-spirv.cpp b/source/slang/slang-emit-spirv.cpp index 9088e959a..a2da4801e 100644 --- a/source/slang/slang-emit-spirv.cpp +++ b/source/slang/slang-emit-spirv.cpp @@ -3933,6 +3933,17 @@ struct SPIRVEmitContext } break; } + case kIROp_DownstreamModuleExportDecoration: + { + requireSPIRVCapability(SpvCapabilityLinkage); + auto name = decoration->getParent()->findDecoration()->getMangledName(); + emitInst(getSection(SpvLogicalSectionID::Annotations), + decoration, + SpvOpDecorate, + dstID, + SpvDecorationLinkageAttributes, name, SpvLinkageTypeExport); + break; + } // ... } @@ -6847,12 +6858,27 @@ SlangResult emitSPIRVFromIR( #endif auto shouldPreserveParams = codeGenContext->getTargetProgram()->getOptionSet().getBoolOption(CompilerOptionName::PreserveParameters); + auto generateWholeProgram = codeGenContext->getTargetProgram()->getOptionSet().getBoolOption(CompilerOptionName::GenerateWholeProgram); for (auto inst : irModule->getGlobalInsts()) { if (as(inst)) + { context.ensureInst(inst); + } if (shouldPreserveParams && as(inst)) + { context.ensureInst(inst); + } + if (generateWholeProgram) + { + if (auto func = as(inst)) + { + if (func->findDecoration()) + { + context.ensureInst(inst); + } + } + } } // Emit source language info. -- cgit v1.2.3