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-options.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'source/slang/slang-options.cpp') diff --git a/source/slang/slang-options.cpp b/source/slang/slang-options.cpp index 875f18980..9825e4e23 100644 --- a/source/slang/slang-options.cpp +++ b/source/slang/slang-options.cpp @@ -2032,6 +2032,18 @@ struct OptionsParser } } + // If we don't have any raw outputs but do have a raw target, + // and output type is callable, add an empty' rawOutput. + if (rawOutputs.getCount() == 0 && + rawTargets.getCount() == 1 && + ArtifactDesc::makeFromCompileTarget(asExternal(rawTargets[0].format)).kind == ArtifactKind::Callable) + { + RawOutput rawOutput; + rawOutput.impliedFormat = rawTargets[0].format; + rawOutput.targetIndex = 0; + rawOutputs.add(rawOutput); + } + // Consider the output files specified via `-o` and try to figure // out how to deal with them. // @@ -2083,6 +2095,8 @@ struct OptionsParser case CodeGenTarget::CPPSource: case CodeGenTarget::PTX: case CodeGenTarget::CUDASource: + + case CodeGenTarget::HostHostCallable: case CodeGenTarget::ShaderHostCallable: case CodeGenTarget::HostExecutable: case CodeGenTarget::ShaderSharedLibrary: @@ -2099,6 +2113,7 @@ struct OptionsParser } } + // Now that we've diagnosed the output paths, we can add them // to the compile request at the appropriate locations. // -- cgit v1.2.3