summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt8
-rw-r--r--build/visual-studio/slang/slang.vcxproj12
-rw-r--r--prelude/CMakeLists.txt2
-rw-r--r--premake5.lua5
-rw-r--r--source/compiler-core/slang-perfect-hash-codegen.cpp2
-rw-r--r--source/slang/CMakeLists.txt85
-rw-r--r--source/slang/slang-lookup-glslstd450.cpp132
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;
- }
-}
-
-}