From 9abcb6ea24dbc7184c3a2ad9f4458f63f8901928 Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Tue, 18 Aug 2020 13:42:46 -0400 Subject: Support for float atomics on RWByteAddressBuffer (#1502) * Fix premake5.lua so it uses the new path needed for OpenCLDebugInfo100.h * Keep including the includes directory. * Added the spirv-tools-generated files. * We don't need to include the spirv/unified1 path because the files needed are actually in the spirv-tools-generated folder. * Put the build_info.h glslang generated files in external/glslang-generated. Alter premake5.lua to pick up that header. * First pass at documenting how to build glslang and spirv-tools. * Improved glsl/spir-v tools README.md * Added revision.h * Change how gResources is calculated. Update about revision.h * Update docs a little. * Split out spirv-tools into a separate project for building glslang. This was not necessary on linux, but *is* necessary on windows, because there is a file disassemble.cpp in spirv-tools and in glslang, and this leads to VS choosing only one. With the separate library, the problem is resolved. * Fix direct-spirv-emit output. * Update to latest version of spirv headers and spirv-tools. * Upgrade submodule version of glslang in external. * Add fPIC to build options of slang-spirv-tools * WIP adding support for InterlockedAddFp32 * Upgrade slang-binaries to have new glslang. * Fix issues with Windows slang-glslang binaries, via update of slang-binaries used. * WIP - atomicAdd. This solution can't work as we can't do (float*) in glsl. * WIP on atomic float ops. * Added checking for multiple decls that takes into account __target_intrinsic and __specialized_for_target. First pass impl of atomic add on float for glsl. * Split __atomicAdd so extensions are applied appropriately. * Made Dxc/Fxc support includes. Use HLSL prelude to pass the path to nvapi Added -nv-api-path * Refactor around IncludeHandler and impl of IncludeSystem * slang-include-handler -> slang-include-system Have IncludeHandler/Impl defined in slang-preprocessor * Small comment improvements. * Document atomic float add addition in target-compatibility.md. * CUDA float atomic support on RWByteAddressBuffer. * Add atomic-float-byte-address-buffer-cross.slang * Removed inappropriate-once.slang - the test is no longer valid when a file is loaded and has a unique identity by default. A test could be made, but would require an API call to create the file (so no unique id). Improved handling of loadFile - uses uniqueId if has one. * Work around for testing target overlaps - to avoid exceptions on adding targets. Simplify PathInfo setup. Modify single-target-intrinsic.slang - it no longer failed because there were no longer multiple definitions for the same target. Co-authored-by: Tim Foley --- source/slang/slang-include-system.h | 62 +++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 source/slang/slang-include-system.h (limited to 'source/slang/slang-include-system.h') diff --git a/source/slang/slang-include-system.h b/source/slang/slang-include-system.h new file mode 100644 index 000000000..3b368b70d --- /dev/null +++ b/source/slang/slang-include-system.h @@ -0,0 +1,62 @@ +#ifndef SLANG_INCLUDE_SYSTEM_H +#define SLANG_INCLUDE_SYSTEM_H +// slang-include-system.h + +#include "slang-source-loc.h" + +namespace Slang +{ + +// A directory to be searched when looking for files (e.g., `#include`) +struct SearchDirectory +{ + SearchDirectory() = default; + SearchDirectory(SearchDirectory const& other) = default; + SearchDirectory(String const& path) + : path(path) + {} + + String path; +}; + +/// A list of directories to search for files (e.g., `#include`) +struct SearchDirectoryList +{ + // A parent list that should also be searched + SearchDirectoryList* parent = nullptr; + + // Directories to be searched + List searchDirectories; +}; + +/* A helper class that builds basic include handling on top of searchDirectories/fileSystemExt and optionally a sourceManager */ +struct IncludeSystem +{ + IncludeSystem(SearchDirectoryList* searchDirectories, ISlangFileSystemExt* fileSystemExt, SourceManager* sourceManager = nullptr) : + m_searchDirectories(searchDirectories), + m_fileSystemExt(fileSystemExt), + m_sourceManager(sourceManager) + { + } + + SlangResult findFile(const String& pathToInclude, const String& pathIncludedFrom, PathInfo& outPathInfo); + SlangResult findFile(SlangPathType fromPathType, const String& fromPath, const String& path, PathInfo& outPathInfo); + String simplifyPath(const String& path); + SlangResult loadFile(const PathInfo& pathInfo, ComPtr& outBlob); + + SlangResult findAndLoadFile(const String& pathToInclude, const String& pathIncludedFrom, PathInfo& outPathInfo, ComPtr& outBlob); + + SearchDirectoryList* getSearchDirectoryList() const { return m_searchDirectories; } + ISlangFileSystemExt* getFileSystem() const { return m_fileSystemExt; } + SourceManager* getSourceManager() const { return m_sourceManager; } + +protected: + + SearchDirectoryList* m_searchDirectories; + ISlangFileSystemExt* m_fileSystemExt; + SourceManager* m_sourceManager; ///< If not set, will not look up the content in the source manager +}; + +} + +#endif // SLANG_INCLUDE_HANDLER_H -- cgit v1.2.3