diff options
| -rw-r--r-- | CMakeLists.txt | 8 | ||||
| -rw-r--r-- | build/visual-studio/slang/slang.vcxproj | 12 | ||||
| -rw-r--r-- | prelude/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | premake5.lua | 5 | ||||
| -rw-r--r-- | source/compiler-core/slang-perfect-hash-codegen.cpp | 2 | ||||
| -rw-r--r-- | source/slang/CMakeLists.txt | 85 | ||||
| -rw-r--r-- | source/slang/slang-lookup-glslstd450.cpp | 132 |
7 files changed, 78 insertions, 168 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index eef229ee6..f055b01ad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -152,6 +152,7 @@ glob_append( premake_generated_files "source/slang/*.meta.slang.h" "source/slang/*-generated-*.h" + "source/slang/slang-lookup-*.cpp" ) if(premake_generated_files) file(REMOVE ${premake_generated_files}) @@ -277,7 +278,12 @@ add_subdirectory(source/slang) slang_add_target( tools/slangd EXECUTABLE - LINK_WITH_PRIVATE core slang slang-reflect-headers slang-capability-defs Threads::Threads + LINK_WITH_PRIVATE + core + slang + slang-reflect-headers + slang-capability-defs + Threads::Threads INSTALL ) slang_add_target( diff --git a/build/visual-studio/slang/slang.vcxproj b/build/visual-studio/slang/slang.vcxproj index 123bc734d..bc768fb4c 100644 --- a/build/visual-studio/slang/slang.vcxproj +++ b/build/visual-studio/slang/slang.vcxproj @@ -164,7 +164,7 @@ <PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<PreprocessorDefinitions>_DEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;SLANG_DYNAMIC_EXPORT;SLANG_WITHOUT_EMBEDDED_STD_LIB;SLANG_ENABLE_IR_BREAK_ALLOC=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..\..\..\external\spirv-headers\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>..\..\..\external\spirv-headers\include;..\..\..\source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<Optimization>Disabled</Optimization>
<MinimalRebuild>false</MinimalRebuild>
@@ -187,7 +187,7 @@ IF EXIST ..\..\..\external\slang-glslang\bin\windows-x86\release\slang-glslang.d <PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<PreprocessorDefinitions>_DEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;SLANG_DYNAMIC_EXPORT;SLANG_WITHOUT_EMBEDDED_STD_LIB;SLANG_ENABLE_IR_BREAK_ALLOC=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..\..\..\external\spirv-headers\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>..\..\..\external\spirv-headers\include;..\..\..\source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<Optimization>Disabled</Optimization>
<MinimalRebuild>false</MinimalRebuild>
@@ -210,7 +210,7 @@ IF EXIST ..\..\..\external\slang-glslang\bin\windows-x64\release\slang-glslang.d <PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<PreprocessorDefinitions>_DEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;SLANG_DYNAMIC_EXPORT;SLANG_WITHOUT_EMBEDDED_STD_LIB;SLANG_ENABLE_IR_BREAK_ALLOC=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..\..\..\external\spirv-headers\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>..\..\..\external\spirv-headers\include;..\..\..\source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<Optimization>Disabled</Optimization>
<MinimalRebuild>false</MinimalRebuild>
@@ -233,7 +233,7 @@ IF EXIST ..\..\..\external\slang-glslang\bin\windows-aarch64\release\slang-glsla <PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<PreprocessorDefinitions>NDEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;SLANG_DYNAMIC_EXPORT;SLANG_WITHOUT_EMBEDDED_STD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..\..\..\external\spirv-headers\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>..\..\..\external\spirv-headers\include;..\..\..\source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<Optimization>Full</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
@@ -259,7 +259,7 @@ IF EXIST ..\..\..\external\slang-glslang\bin\windows-x86\release\slang-glslang.d <PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<PreprocessorDefinitions>NDEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;SLANG_DYNAMIC_EXPORT;SLANG_WITHOUT_EMBEDDED_STD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..\..\..\external\spirv-headers\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>..\..\..\external\spirv-headers\include;..\..\..\source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<Optimization>Full</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
@@ -285,7 +285,7 @@ IF EXIST ..\..\..\external\slang-glslang\bin\windows-x64\release\slang-glslang.d <PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<PreprocessorDefinitions>NDEBUG;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;NOMINMAX;_ITERATOR_DEBUG_LEVEL=0;SLANG_DYNAMIC_EXPORT;SLANG_WITHOUT_EMBEDDED_STD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..\..\..\external\spirv-headers\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>..\..\..\external\spirv-headers\include;..\..\..\source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<Optimization>Full</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
diff --git a/prelude/CMakeLists.txt b/prelude/CMakeLists.txt index 751aa9a5c..6b5c190e7 100644 --- a/prelude/CMakeLists.txt +++ b/prelude/CMakeLists.txt @@ -12,7 +12,7 @@ foreach(input ${SLANG_PRELUDE_HEADERS}) add_custom_command( OUTPUT ${output} COMMAND slang-embed "${input}" ${output} - DEPENDS ${input} + DEPENDS ${input} slang-embed VERBATIM ) list(APPEND SLANG_PRELUDE_SOURCE ${output}) diff --git a/premake5.lua b/premake5.lua index 51ddbd62c..38fe65889 100644 --- a/premake5.lua +++ b/premake5.lua @@ -1568,7 +1568,7 @@ if enableEmbedStdLib then "SLANG_WITHOUT_EMBEDDED_STD_LIB" } - includedirs { "external/spirv-headers/include" } + includedirs { "external/spirv-headers/include", "source" } -- Add all of the slang source addSourceDir "source/slang" @@ -1593,6 +1593,7 @@ if enableEmbedStdLib then "prelude/slang-cpp-prelude.h.cpp", "prelude/slang-cpp-host-prelude.h.cpp", "prelude/slang-torch-prelude.h.cpp", + "source/slang/slang-lookup-glslstd450.cpp", "source/slang/slang-lookup-capability-defs.cpp" } if not targetInfo.isWindows then @@ -1686,7 +1687,7 @@ standardProject("slang", "source/slang") defines { "SLANG_WITHOUT_EMBEDDED_STD_LIB" } end - includedirs { "external/spirv-headers/include" } + includedirs { "external/spirv-headers/include", "source" } -- On some tests with MSBuild disabling these made build work. -- flags { "NoIncrementalLink", "NoPCH", "NoMinimalRebuild" } diff --git a/source/compiler-core/slang-perfect-hash-codegen.cpp b/source/compiler-core/slang-perfect-hash-codegen.cpp index 611b34c54..c09ee4a2c 100644 --- a/source/compiler-core/slang-perfect-hash-codegen.cpp +++ b/source/compiler-core/slang-perfect-hash-codegen.cpp @@ -73,7 +73,7 @@ namespace Slang return writeHashFile( fileName, enumName, - { "../core/slang-common.h", "../core/slang-string.h", enumHeaderFile }, + { "core/slang-common.h", "core/slang-string.h", enumHeaderFile }, hashParams, values); } diff --git a/source/slang/CMakeLists.txt b/source/slang/CMakeLists.txt index 44785559f..cbec1c793 100644 --- a/source/slang/CMakeLists.txt +++ b/source/slang/CMakeLists.txt @@ -29,7 +29,7 @@ add_custom_command( COMMAND slang-generate ${SLANG_STDLIB_META_SOURCE} --target-directory ${SLANG_STDLIB_META_OUTPUT_DIR} - DEPENDS ${SLANG_STDLIB_META_SOURCE} + DEPENDS ${SLANG_STDLIB_META_SOURCE} slang-generate WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} VERBATIM ) @@ -54,44 +54,42 @@ glob_append(SLANG_CAPABILITY_SOURCE "*.capdef") set(SLANG_CAPABILITY_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/capability") # Generate the output file list -set(SLANG_CAPABILITY_GENERATED_FILES +set(SLANG_CAPABILITY_GENERATED_HEADERS "${SLANG_CAPABILITY_OUTPUT_DIR}/slang-generated-capability-defs.h" "${SLANG_CAPABILITY_OUTPUT_DIR}/slang-generated-capability-defs-impl.h" +) +set(SLANG_CAPABILITY_GENERATED_SOURCE + ${SLANG_CAPABILITY_GENERATED_HEADERS} "${SLANG_CAPABILITY_OUTPUT_DIR}/slang-lookup-capability-defs.cpp" ) add_custom_command( - OUTPUT ${SLANG_CAPABILITY_GENERATED_FILES} + OUTPUT ${SLANG_CAPABILITY_GENERATED_SOURCE} COMMAND ${CMAKE_COMMAND} -E make_directory ${SLANG_CAPABILITY_OUTPUT_DIR} COMMAND - slang-capability-generator ${SLANG_CAPABILITY_SOURCE} --target-directory ${SLANG_CAPABILITY_OUTPUT_DIR} - DEPENDS ${SLANG_CAPABILITY_SOURCE} + slang-capability-generator ${SLANG_CAPABILITY_SOURCE} --target-directory + ${SLANG_CAPABILITY_OUTPUT_DIR} + DEPENDS ${SLANG_CAPABILITY_SOURCE} slang-capability-generator WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} VERBATIM ) -add_library( +slang_add_target( slang-capability-defs - INTERFACE + OBJECT + EXPLICIT_SOURCE ${SLANG_CAPABILITY_GENERATED_HEADERS} + LINK_WITH_PRIVATE core + INCLUDE_DIRECTORIES_PUBLIC + "${SLANG_CAPABILITY_OUTPUT_DIR}" + "${slang_SOURCE_DIR}/source/slang" EXCLUDE_FROM_ALL - ${SLANG_CAPABILITY_GENERATED_FILES} + FOLDER generated ) -set_target_properties(slang-capability-defs PROPERTIES FOLDER generated) -target_include_directories( - slang-capability-defs - INTERFACE ${SLANG_CAPABILITY_OUTPUT_DIR} - INTERFACE ${slang_SOURCE_DIR}/source/slang -) - -add_library( +slang_add_target( slang-capability-lookup - INTERFACE + OBJECT + EXPLICIT_SOURCE ${SLANG_CAPABILITY_GENERATED_SOURCE} + LINK_WITH_PRIVATE core slang-capability-defs EXCLUDE_FROM_ALL - ${SLANG_CAPABILITY_GENERATED_FILES} -) -set_target_properties(slang-capability-lookup PROPERTIES FOLDER generated) -target_sources( - slang-capability-lookup - INTERFACE - "${SLANG_CAPABILITY_OUTPUT_DIR}/slang-lookup-capability-defs.cpp" + FOLDER generated ) # @@ -132,7 +130,7 @@ add_custom_command( slang-cpp-extractor ${SLANG_REFLECT_INPUT} -strip-prefix slang- -o ${SLANG_REFLECT_OUTPUT_DIR}/slang-generated -output-fields -mark-suffix _CLASS - DEPENDS ${SLANG_REFLECT_INPUT} + DEPENDS ${SLANG_REFLECT_INPUT} slang-cpp-extractor VERBATIM ) @@ -149,6 +147,40 @@ target_include_directories( ) # +# generated lookup tables +# + +set(SLANG_LOOKUP_GENERATOR_INPUT_JSON + "${slang_SOURCE_DIR}/external/spirv-headers/include/spirv/unified1/extinst.glsl.std.450.grammar.json" +) +set(SLANG_LOOKUP_GENERATOR_OUTPUT_DIR + "${CMAKE_CURRENT_BINARY_DIR}/slang-lookup-tables/" +) +set(SLANG_LOOKUP_GENERATED_SOURCE + "${SLANG_LOOKUP_GENERATOR_OUTPUT_DIR}/slang-lookup-GLSLstd450.cpp" +) +add_custom_command( + OUTPUT ${SLANG_LOOKUP_GENERATED_SOURCE} + COMMAND + ${CMAKE_COMMAND} -E make_directory ${SLANG_LOOKUP_GENERATOR_OUTPUT_DIR} + COMMAND + slang-lookup-generator ${SLANG_LOOKUP_GENERATOR_INPUT_JSON} + ${SLANG_LOOKUP_GENERATED_SOURCE} "GLSLstd450" "GLSLstd450" + "spirv/unified1/GLSL.std.450.h" + DEPENDS ${SLANG_LOOKUP_GENERATOR_INPUT_JSON} slang-lookup-generator + VERBATIM +) + +slang_add_target( + slang-lookup-tables + OBJECT + EXPLICIT_SOURCE ${SLANG_LOOKUP_GENERATED_SOURCE} + LINK_WITH_PRIVATE core SPIRV-Headers + EXCLUDE_FROM_ALL + FOLDER generated +) + +# # Slang static # @@ -170,6 +202,7 @@ slang_add_target( slang-capability-lookup slang-meta-headers slang-reflect-headers + slang-lookup-tables SPIRV-Headers FOLDER generators ) @@ -190,6 +223,7 @@ add_custom_command( COMMAND slang-bootstrap -archive-type riff-lz4 -save-stdlib-bin-source ${SLANG_STDLIB_GENERATED_HEADER} + DEPENDS slang-bootstrap VERBATIM ) add_library( @@ -217,6 +251,7 @@ slang_add_target( slang-capability-defs slang-capability-lookup slang-reflect-headers + slang-lookup-tables SPIRV-Headers # slang.h is in the project root, so include that directory in the interface # for slang diff --git a/source/slang/slang-lookup-glslstd450.cpp b/source/slang/slang-lookup-glslstd450.cpp deleted file mode 100644 index 2920335ec..000000000 --- a/source/slang/slang-lookup-glslstd450.cpp +++ /dev/null @@ -1,132 +0,0 @@ -// Hash function for GLSLstd450 -// -// This file was thoughtfully generated by a machine, -// don't even think about modifying it yourself! -// - -#include "../core/slang-common.h" -#include "../core/slang-string.h" -#include "spirv/unified1/GLSL.std.450.h" - - -namespace Slang -{ - -bool lookupGLSLstd450(const UnownedStringSlice& str, GLSLstd450& value) -{ - static const unsigned tableSalt[81] = { - 1, 3, 0, 0, 6, 1, 2, 3, 0, 0, 0, 1, 4, 0, 1, 0, - 0, 0, 1, 3, 0, 0, 5, 0, 2, 0, 0, 0, 0, 0, 1, 0, - 2, 1, 1, 1, 8, 3, 1, 3, 0, 0, 3, 0, 3, 0, 9, 0, - 16, 0, 1, 0, 2, 0, 1, 1, 0, 0, 0, 2, 16, 15, 6, 1, - 1, 2, 2, 7, 7, 2, 24, 0, 16, 27, 1, 1, 176, 0, 11, 0, - 6 - }; - - using KV = std::pair<const char*, GLSLstd450>; - - static const KV words[81] = - { - {"InterpolateAtOffset", GLSLstd450InterpolateAtOffset}, - {"Floor", GLSLstd450Floor}, - {"UnpackDouble2x32", GLSLstd450UnpackDouble2x32}, - {"Acosh", GLSLstd450Acosh}, - {"FindUMsb", GLSLstd450FindUMsb}, - {"Sinh", GLSLstd450Sinh}, - {"NMin", GLSLstd450NMin}, - {"Cos", GLSLstd450Cos}, - {"UMax", GLSLstd450UMax}, - {"Sqrt", GLSLstd450Sqrt}, - {"Frexp", GLSLstd450Frexp}, - {"Determinant", GLSLstd450Determinant}, - {"ModfStruct", GLSLstd450ModfStruct}, - {"PackSnorm4x8", GLSLstd450PackSnorm4x8}, - {"FrexpStruct", GLSLstd450FrexpStruct}, - {"Cross", GLSLstd450Cross}, - {"FClamp", GLSLstd450FClamp}, - {"Fract", GLSLstd450Fract}, - {"FaceForward", GLSLstd450FaceForward}, - {"MatrixInverse", GLSLstd450MatrixInverse}, - {"PackUnorm4x8", GLSLstd450PackUnorm4x8}, - {"Log2", GLSLstd450Log2}, - {"Reflect", GLSLstd450Reflect}, - {"Radians", GLSLstd450Radians}, - {"Round", GLSLstd450Round}, - {"InverseSqrt", GLSLstd450InverseSqrt}, - {"Exp", GLSLstd450Exp}, - {"Normalize", GLSLstd450Normalize}, - {"UnpackSnorm2x16", GLSLstd450UnpackSnorm2x16}, - {"InterpolateAtCentroid", GLSLstd450InterpolateAtCentroid}, - {"Refract", GLSLstd450Refract}, - {"Fma", GLSLstd450Fma}, - {"UClamp", GLSLstd450UClamp}, - {"FAbs", GLSLstd450FAbs}, - {"RoundEven", GLSLstd450RoundEven}, - {"FSign", GLSLstd450FSign}, - {"SSign", GLSLstd450SSign}, - {"Asinh", GLSLstd450Asinh}, - {"PackHalf2x16", GLSLstd450PackHalf2x16}, - {"Tan", GLSLstd450Tan}, - {"SMin", GLSLstd450SMin}, - {"Degrees", GLSLstd450Degrees}, - {"PackSnorm2x16", GLSLstd450PackSnorm2x16}, - {"FMix", GLSLstd450FMix}, - {"Atan2", GLSLstd450Atan2}, - {"PackUnorm2x16", GLSLstd450PackUnorm2x16}, - {"NMax", GLSLstd450NMax}, - {"NClamp", GLSLstd450NClamp}, - {"FindSMsb", GLSLstd450FindSMsb}, - {"Atanh", GLSLstd450Atanh}, - {"Atan", GLSLstd450Atan}, - {"Modf", GLSLstd450Modf}, - {"Cosh", GLSLstd450Cosh}, - {"Exp2", GLSLstd450Exp2}, - {"Tanh", GLSLstd450Tanh}, - {"UMin", GLSLstd450UMin}, - {"FMin", GLSLstd450FMin}, - {"Log", GLSLstd450Log}, - {"SAbs", GLSLstd450SAbs}, - {"IMix", GLSLstd450IMix}, - {"Step", GLSLstd450Step}, - {"InterpolateAtSample", GLSLstd450InterpolateAtSample}, - {"UnpackHalf2x16", GLSLstd450UnpackHalf2x16}, - {"PackDouble2x32", GLSLstd450PackDouble2x32}, - {"FMax", GLSLstd450FMax}, - {"Length", GLSLstd450Length}, - {"Distance", GLSLstd450Distance}, - {"SmoothStep", GLSLstd450SmoothStep}, - {"UnpackUnorm2x16", GLSLstd450UnpackUnorm2x16}, - {"SMax", GLSLstd450SMax}, - {"UnpackSnorm4x8", GLSLstd450UnpackSnorm4x8}, - {"Asin", GLSLstd450Asin}, - {"UnpackUnorm4x8", GLSLstd450UnpackUnorm4x8}, - {"Ldexp", GLSLstd450Ldexp}, - {"Ceil", GLSLstd450Ceil}, - {"SClamp", GLSLstd450SClamp}, - {"Trunc", GLSLstd450Trunc}, - {"Sin", GLSLstd450Sin}, - {"Pow", GLSLstd450Pow}, - {"FindILsb", GLSLstd450FindILsb}, - {"Acos", GLSLstd450Acos}, - }; - - static const auto hash = [](const UnownedStringSlice& str, UInt32 salt){ - UInt32 h = salt; - for (const char c : str) - h = (h * 0x01000193) ^ c; - return h % 81; - }; - - const auto i = hash(str, tableSalt[hash(str, 0)]); - if(str == words[i].first) - { - value = words[i].second; - return true; - } - else - { - return false; - } -} - -} |
