diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2019-12-12 14:53:44 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-12-12 14:53:44 -0500 |
| commit | 15335549340c54fd7b89b28104ddc907e9c64638 (patch) | |
| tree | 02c4705fc7784c3003d14fc661894b5f88c05875 /source/core/slang-shared-library.cpp | |
| parent | 6e6a876a6b5ad3d2ef402757d2e20641f5a2b49b (diff) | |
Use DownstreamCompiler for all downstream compilers (#1152)
* CPPCompiler -> DownstreamCompiler
* Added DownstreamCompileResult to start abstraction such that we don't need files.
* * Split out slang-blob.cpp
* Made CompileResult hold a DownstreamCompileResult - for access to binary or ISlangSharedLibrary
* Keep temporary files in scope.
* Add a hash to the hex dump stream.
* Move all file tracking into DownstreamCompiler.
* WIP support for nvrtc.
* WIP: Adding support for nvrtc compiler.
Adding enum types, wiring up the nvrtc into slang.
* Fix remaining CPPCompiler references.
* Fix order issue on target string matching.
* Use ISlangSharedLibrary for nvrtc.
* Use DownstreamCompiler for nvrtc.
* WIP first pass at compilation win nvrtc.
* Added testing if file is on file system into CommandLineDownstreamCompiler.
Added sourceContentsPath.
* Make test cuda-compile.cu work by just compiling not comparing output.
* Genearlize DownstreamCompiler usage.
* Fix warning on clang.
* Remove CompilerType from DownstreamCompiler.
* Use DownstreamCompiler interface for all compilers.
NOTE for FXC, DXC and GLSLANG this doesn't mean using 'compile' - it's still extracting functions from shared library.
* Fix compiling on gcc/clang for DownstreamCompiler.
* Fix problem on non-vc builds with not having return on locateCompilers for VS.
* Change so no warning for code not reachable on locateCompilers for vs.
Diffstat (limited to 'source/core/slang-shared-library.cpp')
| -rw-r--r-- | source/core/slang-shared-library.cpp | 78 |
1 files changed, 13 insertions, 65 deletions
diff --git a/source/core/slang-shared-library.cpp b/source/core/slang-shared-library.cpp index 2b18ad6aa..b09f345c7 100644 --- a/source/core/slang-shared-library.cpp +++ b/source/core/slang-shared-library.cpp @@ -15,31 +15,8 @@ static const Guid IID_ISlangSharedLibraryLoader = SLANG_UUID_ISlangSharedLibrary /* !!!!!!!!!!!!!!!!!!!!!!!!!! DefaultSharedLibraryLoader !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/* static */const char* DefaultSharedLibraryLoader::s_libraryNames[int(SharedLibraryType::CountOf)] = -{ - nullptr, // SharedLibraryType::Unknown - "dxcompiler", // SharedLibraryType::Dxc - "d3dcompiler_47", // SharedLibraryType::Fxc - "slang-glslang", // SharedLibraryType::Glslang - "dxil", // SharedLibraryType::Dxil - "nvrtc64_102_0", // SharedLibraryType::NVRTC -}; - /* static */DefaultSharedLibraryLoader DefaultSharedLibraryLoader::s_singleton; -/* static */SharedLibraryType DefaultSharedLibraryLoader::getSharedLibraryTypeFromName(const UnownedStringSlice& name) -{ - // Start from 1 to skip Unknown - for (int i = 1; i < SLANG_COUNT_OF(s_libraryNames); ++i) - { - if (name == s_libraryNames[i]) - { - return SharedLibraryType(i); - } - } - return SharedLibraryType::Unknown; -} - ISlangUnknown* DefaultSharedLibraryLoader::getInterface(const Guid& guid) { return (guid == IID_ISlangUnknown || guid == IID_ISlangSharedLibraryLoader) ? static_cast<ISlangSharedLibraryLoader*>(this) : nullptr; @@ -65,6 +42,19 @@ SlangResult DefaultSharedLibraryLoader::loadPlatformSharedLibrary(const char* pa return SLANG_OK; } +/* static */SlangResult DefaultSharedLibraryLoader::load(ISlangSharedLibraryLoader* loader, const String& path, const String& name, ISlangSharedLibrary** outLibrary) +{ + if (path.getLength()) + { + String combinedPath = Path::combine(path, name); + return loader->loadSharedLibrary(combinedPath.getBuffer(), outLibrary); + } + else + { + return loader->loadSharedLibrary(name.getBuffer(), outLibrary); + } +} + /* !!!!!!!!!!!!!!!!!!!!!!!!!! DefaultSharedLibrary !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ TemporarySharedLibrary::~TemporarySharedLibrary() @@ -97,46 +87,4 @@ SlangFuncPtr DefaultSharedLibrary::findFuncByName(char const* name) return SharedLibrary::findFuncByName(m_sharedLibraryHandle, name); } -/* !!!!!!!!!!!!!!!!!!!!!!!!!! ConfigurableSharedLibraryLoader !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ - -ISlangUnknown* ConfigurableSharedLibraryLoader::getInterface(const Guid& guid) -{ - return (guid == IID_ISlangUnknown || guid == IID_ISlangSharedLibraryLoader) ? static_cast<ISlangSharedLibraryLoader*>(this) : nullptr; -} - -SlangResult ConfigurableSharedLibraryLoader::loadSharedLibrary(const char* path, ISlangSharedLibrary** sharedLibraryOut) -{ - Entry* entry = m_entryMap.TryGetValue(String(path)); - if (entry) - { - SharedLibrary::Handle handle; - SLANG_RETURN_ON_FAIL(entry->func(path, entry->entryString, handle)); - SLANG_ASSERT(handle); - - ComPtr<ISlangSharedLibrary> sharedLib(new DefaultSharedLibrary(handle)); - *sharedLibraryOut = sharedLib.detach(); - return SLANG_OK; - } - - return DefaultSharedLibraryLoader::getSingleton()->loadSharedLibrary(path, sharedLibraryOut); -} - -/* static */Result ConfigurableSharedLibraryLoader::replace(const char* pathIn, const String& entryString, SharedLibrary::Handle& handleOut) -{ - SLANG_UNUSED(pathIn); - // The replacement is the *whole* string - return SharedLibrary::loadWithPlatformPath(entryString.begin(), handleOut); -} - -/* static */Result ConfigurableSharedLibraryLoader::changePath(const char* pathIn, const String& entryString, SharedLibrary::Handle& handleOut ) -{ - // Okay we need to reconstruct the name and insert the path - StringBuilder builder; - SharedLibrary::appendPlatformFileName(UnownedStringSlice(pathIn), builder); - String path = Path::combine(entryString, builder); - - return SharedLibrary::loadWithPlatformPath(path.begin(), handleOut); -} - - } |
