From b39c99661b3ad482bbd419c24991ed325b5738a9 Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Thu, 2 Jun 2022 14:13:35 -0400 Subject: COM interfaces with host callable (#2258) * #include an absolute path didn't work - because paths were taken to always be relative. * Use TerminatedUnownedStringSlice for literals in output C++. * Remove Escape/Unescape functions used in slang-token-reader.cpp Add target type of 'host-cpp' etc to map to the target types. * Fix some corner cases around string encoding. * Added unit test for string escaping. Fixed some assorted escaping bugs. * Updated test output. * Added decode test. * Stop using hex output, to get around 'greedy' aspect. Use octal instead. * Added HostHostCallable Small changes to use ArtifactDesc/Info instead of large switches. * Fix C++ emit to handle arbitrary function export. * Add options handling for callable without an output being specified. * Can compile with COM interface. Added example using com interface. * Use the IR Ptr type instead of hack in C++ emit for interfaces. * Fix issue with outputting the COM call when ptr is used. * Fix crash issue on compilation failure. --- source/slang/slang-emit.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'source/slang/slang-emit.cpp') diff --git a/source/slang/slang-emit.cpp b/source/slang/slang-emit.cpp index 72ad80873..0bb1d73e5 100644 --- a/source/slang/slang-emit.cpp +++ b/source/slang/slang-emit.cpp @@ -177,6 +177,8 @@ Result linkAndOptimizeIR( auto target = codeGenContext->getTargetFormat(); auto targetRequest = codeGenContext->getTargetReq(); + // Get the artifact desc for the target + const auto artifactDesc = ArtifactDesc::makeFromCompileTarget(asExternal(target)); // We start out by performing "linking" at the level of the IR. // This step will create a fresh IR module to be used for @@ -203,12 +205,20 @@ Result linkAndOptimizeIR( switch (target) { - default: - break; - case CodeGenTarget::HostCPPSource: - lowerComInterfaces(irModule, sink); - generateDllImportFuncs(irModule, sink); - break; + case CodeGenTarget::CPPSource: + { + // TODO(JS): + // We want the interface transformation to take place for 'regular' CPPSource for now too. + lowerComInterfaces(irModule, artifactDesc.style, sink); + break; + } + case CodeGenTarget::HostCPPSource: + { + lowerComInterfaces(irModule, artifactDesc.style, sink); + generateDllImportFuncs(irModule, sink); + break; + } + default: break; } // Lower `Result` types into ordinary struct types. -- cgit v1.2.3