diff options
Diffstat (limited to 'source/slang/slang.cpp')
| -rw-r--r-- | source/slang/slang.cpp | 40 |
1 files changed, 34 insertions, 6 deletions
diff --git a/source/slang/slang.cpp b/source/slang/slang.cpp index 613992354..9d2d766b9 100644 --- a/source/slang/slang.cpp +++ b/source/slang/slang.cpp @@ -445,9 +445,16 @@ SLANG_NO_THROW SlangResult SLANG_MCALL Session::createSession( RefPtr<Linkage> linkage = new Linkage(this, astBuilder, getBuiltinLinkage()); Int targetCount = desc.targetCount; + const uint8_t* targetDescPtr = reinterpret_cast<const uint8_t*>(desc.targets); for(Int ii = 0; ii < targetCount; ++ii) { - linkage->addTarget(desc.targets[ii]); + slang::TargetDesc targetDesc; + // Copy the size field first. + memcpy(&targetDesc.structureSize, targetDescPtr, sizeof(size_t)); + // Copy the entire desc structure. + memcpy(&targetDesc, targetDescPtr, targetDesc.structureSize); + linkage->addTarget(targetDesc); + targetDescPtr += targetDesc.structureSize; } if(desc.flags & slang::kSessionFlag_FalcorCustomSharedKeywordSemantics) @@ -793,6 +800,7 @@ void Linkage::addTarget( target->setFloatingPointMode(FloatingPointMode(desc.floatingPointMode)); target->addTargetFlags(desc.flags); target->setTargetProfile(Profile(desc.profile)); + target->setLineDirectiveMode(LineDirectiveMode(desc.lineDirectiveMode)); } #if 0 @@ -1034,6 +1042,7 @@ SLANG_NO_THROW SlangResult SLANG_MCALL Linkage::createCompileRequest( SlangCompileRequest** outCompileRequest) { auto compileRequest = new EndToEndCompileRequest(this); + compileRequest->addRef(); *outCompileRequest = asExternal(compileRequest); return SLANG_OK; } @@ -1060,7 +1069,6 @@ SlangResult Linkage::setMatrixLayoutMode( return SLANG_OK; } - // // TargetRequest // @@ -2009,7 +2017,9 @@ BackEndCompileRequest::BackEndCompileRequest( : CompileRequestBase(linkage, sink) , m_program(program) , m_dumpIntermediatePrefix("slang-dump-") -{} + +{ +} EndToEndCompileRequest::EndToEndCompileRequest( Session* session) @@ -3840,8 +3850,16 @@ void EndToEndCompileRequest::setDumpIntermediatePrefix(const char* prefix) void EndToEndCompileRequest::setLineDirectiveMode(SlangLineDirectiveMode mode) { - // TODO: validation - getBackEndReq()->lineDirectiveMode = LineDirectiveMode(mode); + // This method is deprecated and user should call `setTargetLineDirectiveMode` instead. + // We provide the implementation here for backward compatibility. + // Targets added later will use `m_lineDirectiveMode`, so we update it to the new `mode` + // set by the user. + m_lineDirectiveMode = LineDirectiveMode(mode); + + // Change all existing targets to use the new mode. + auto linkage = getLinkage(); + for (auto& target : linkage->targets) + target->setLineDirectiveMode(m_lineDirectiveMode); } void EndToEndCompileRequest::setCommandLineCompilerMode() @@ -3854,11 +3872,14 @@ void EndToEndCompileRequest::setCodeGenTarget(SlangCompileTarget target) auto linkage = getLinkage(); linkage->targets.clear(); linkage->addTarget(CodeGenTarget(target)); + linkage->targets[0]->setLineDirectiveMode(m_lineDirectiveMode); } int EndToEndCompileRequest::addCodeGenTarget(SlangCompileTarget target) { - return (int)getLinkage()->addTarget(CodeGenTarget(target)); + int targetIndex = (int)getLinkage()->addTarget(CodeGenTarget(target)); + getLinkage()->targets[targetIndex]->setLineDirectiveMode(m_lineDirectiveMode); + return targetIndex; } void EndToEndCompileRequest::setTargetProfile(int targetIndex, SlangProfileID profile) @@ -3887,6 +3908,13 @@ void EndToEndCompileRequest::setTargetMatrixLayoutMode(int targetIndex, SlangMat setMatrixLayoutMode(mode); } +void EndToEndCompileRequest::setTargetLineDirectiveMode( + SlangInt targetIndex, + SlangLineDirectiveMode mode) +{ + getLinkage()->targets[targetIndex]->setLineDirectiveMode(LineDirectiveMode(mode)); +} + SlangResult EndToEndCompileRequest::addTargetCapability(SlangInt targetIndex, SlangCapabilityID capability) { auto& targets = getLinkage()->targets; |
