Skip to content

Commit ba164d2

Browse files
committed
Merge remote-tracking branch 'origin/compiler_cleanup' into hlsl-compiler-impl
2 parents 9af73f8 + 35b1842 commit ba164d2

File tree

145 files changed

+6471
-7030
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

145 files changed

+6471
-7030
lines changed

.gitmodules

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
1-
[submodule "3rdparty/SPIRV-Headers"]
2-
path = 3rdparty/SPIRV-Headers
3-
url = https://github.com/KhronosGroup/SPIRV-Headers.git
4-
[submodule "3rdparty/SPIRV-Tools"]
5-
path = 3rdparty/SPIRV-Tools
6-
url = https://github.com/KhronosGroup/SPIRV-Tools.git
71
[submodule "3rdparty/glslang"]
82
path = 3rdparty/glslang
93
url = https://github.com/devshgraphicsprogramming/glslang.git

3rdparty/CMakeLists.txt

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,13 @@ set(BUILD_TESTING ${_OLD_BUILD_TESTING})
2020
add_subdirectory(openssl openssl EXCLUDE_FROM_ALL)
2121

2222
# DXC
23-
option(_NBL_COMPILE_WITH_DXC_ "Build Nabla with DXC" ON)
24-
if(_NBL_COMPILE_WITH_DXC_)
25-
add_subdirectory(dxc dxc EXCLUDE_FROM_ALL)
23+
option(_NBL_ENABLE_DXC_COMPILE_TESTS_ "Enable it in order to test compilation of Nabla shaders at build time" OFF)
24+
option(_NBL_DXC_COMPILE_TESTS_ENABLE_CMAKE_LOG_ "Enable more verbose log when creating DXC compile test target - only for Nabla developers!" OFF)
25+
set(_NBL_DXC_CT_PREFIX_CMAKE_LOG_DEBUG_ "[DXC_CT]:" CACHE INTERNAL "only for Nabla developers")
26+
add_subdirectory(dxc dxc EXCLUDE_FROM_ALL)
27+
28+
if(_NBL_ENABLE_DXC_COMPILE_TESTS_)
29+
message(STATUS "_NBL_ENABLE_DXC_COMPILE_TESTS_ enabled, DXC compile test target will be executed at build time!")
2630
endif()
2731

2832
# volk
@@ -116,13 +120,13 @@ set(ZLIB_LIBRARY # for PNGLIB purposes
116120
CACHE INTERNAL "" FORCE)
117121

118122

119-
set(SPIRV_HEADERS_SKIP_INSTALL ON CACHE INTERNAL "Skip SPIRV-Headers install")
120-
set(SPIRV_HEADERS_SKIP_EXAMPLES ON CACHE INTERNAL "Skip SPIRV-Headers examples")
121-
add_subdirectory(SPIRV-Headers SPIRV-Headers EXCLUDE_FROM_ALL)
122-
set(SKIP_SPIRV_TOOLS_INSTALL ON CACHE INTERNAL "Skip SPIRV-Tools install")
123-
set(SPIRV_SKIP_TESTS ON CACHE INTERNAL "Skip SPIRV-Tools tests")
124-
set(SPIRV_SKIP_EXECUTABLES ON CACHE INTERNAL "Skip SPIRV-Tools executable build")
125-
add_subdirectory(SPIRV-Tools SPIRV-Tools EXCLUDE_FROM_ALL)
123+
#set(SPIRV_HEADERS_SKIP_INSTALL ON CACHE INTERNAL "Skip SPIRV-Headers install")
124+
#set(SPIRV_HEADERS_SKIP_EXAMPLES ON CACHE INTERNAL "Skip SPIRV-Headers examples")
125+
#add_subdirectory(dxc/dxc/external/SPIRV-Headers dxc/external/SPIRV-Headers EXCLUDE_FROM_ALL)
126+
#set(SKIP_SPIRV_TOOLS_INSTALL ON CACHE INTERNAL "Skip SPIRV-Tools install")
127+
#set(SPIRV_SKIP_TESTS ON CACHE INTERNAL "Skip SPIRV-Tools tests")
128+
#set(SPIRV_SKIP_EXECUTABLES ON CACHE INTERNAL "Skip SPIRV-Tools executable build")
129+
#add_subdirectory(dxc/dxc/external/SPIRV-Tools dxc/external/SPIRV-Tools EXCLUDE_FROM_ALL)
126130
set(SKIP_GLSLANG_INSTALL ON CACHE INTERNAL "Skip glslang install")
127131
set(ENABLE_SPVREMAPPER OFF CACHE INTERNAL "SPVRemapper is a spirv compression experimental library")
128132
set(ENABLE_GLSLANG_BINARIES OFF CACHE INTERNAL "Build glslangValidator and spirv-remap?")

3rdparty/SPIRV-Headers

Lines changed: 0 additions & 1 deletion
This file was deleted.

3rdparty/SPIRV-Tools

Lines changed: 0 additions & 1 deletion
This file was deleted.

3rdparty/dxc/CMakeLists.txt

Lines changed: 99 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,101 @@
1-
list(APPEND DXC_CMAKE_ARGS "-DHLSL_OPTIONAL_PROJS_IN_DEFAULT:BOOL=OFF")
2-
list(APPEND DXC_CMAKE_ARGS "-DHLSL_ENABLE_ANALYZE:BOOL=OFF")
3-
list(APPEND DXC_CMAKE_ARGS "-DHLSL_OFFICIAL_BUILD:BOOL=OFF")
4-
list(APPEND DXC_CMAKE_ARGS "-DHLSL_ENABLE_FIXED_VER:BOOL=OFF")
5-
list(APPEND DXC_CMAKE_ARGS "-DHLSL_ENABLE_FIXED_VER:BOOL=OFF")
6-
list(APPEND DXC_CMAKE_ARGS "-DHLSL_FIXED_VERSION_LOCATION:STRING=")
7-
list(APPEND DXC_CMAKE_ARGS "-DHLSL_BUILD_DXILCONV:BOOL=ON")
8-
list(APPEND DXC_CMAKE_ARGS "-DCLANG_VENDOR:STRING=")
9-
list(APPEND DXC_CMAKE_ARGS "-DENABLE_SPIRV_CODEGEN:BOOL=OFF")
10-
list(APPEND DXC_CMAKE_ARGS "-DSPIRV_BUILD_TESTS:BOOL=OFF")
11-
list(APPEND DXC_CMAKE_ARGS "-DCLANG_ENABLE_ARCMT:BOOL=OFF")
12-
list(APPEND DXC_CMAKE_ARGS "-DCLANG_ENABLE_STATIC_ANALYZER:BOOL=OFF")
13-
list(APPEND DXC_CMAKE_ARGS "-DCLANG_INCLUDE_TESTS:BOOL=Off")
14-
list(APPEND DXC_CMAKE_ARGS "-DLLVM_INCLUDE_TESTS:BOOL=Off")
15-
list(APPEND DXC_CMAKE_ARGS "-DHLSL_INCLUDE_TESTS:BOOL=OFF")
16-
list(APPEND DXC_CMAKE_ARGS "-DLLVM_TARGETS_TO_BUILD:STRING=None")
17-
list(APPEND DXC_CMAKE_ARGS "-DLLVM_INCLUDE_DOCS:BOOL=OFF")
18-
list(APPEND DXC_CMAKE_ARGS "-DLLVM_INCLUDE_TESTS:BOOL=OFF")
19-
list(APPEND DXC_CMAKE_ARGS "-DLLVM_INCLUDE_EXAMPLES:BOOL=OFF")
20-
list(APPEND DXC_CMAKE_ARGS "-DLIBCLANG_BUILD_STATIC:BOOL=ON")
21-
list(APPEND DXC_CMAKE_ARGS "-DLLVM_OPTIMIZED_TABLEGEN:BOOL=OFF")
22-
list(APPEND DXC_CMAKE_ARGS "-DLLVM_REQUIRES_EH:BOOL=ON")
23-
list(APPEND DXC_CMAKE_ARGS "-DLLVM_APPEND_VC_REV:BOOL=ON")
24-
list(APPEND DXC_CMAKE_ARGS "-DLLVM_ENABLE_RTTI:BOOL=ON")
25-
list(APPEND DXC_CMAKE_ARGS "-DLLVM_ENABLE_EH:BOOL=ON")
26-
list(APPEND DXC_CMAKE_ARGS "-DLLVM_DEFAULT_TARGET_TRIPLE:STRING=dxil-ms-dx")
27-
list(APPEND DXC_CMAKE_ARGS "-DCLANG_BUILD_EXAMPLES:BOOL=OFF")
28-
list(APPEND DXC_CMAKE_ARGS "-DLLVM_REQUIRES_RTTI:BOOL=ON")
29-
list(APPEND DXC_CMAKE_ARGS "-DCLANG_CL:BOOL=OFF")
30-
list(APPEND DXC_CMAKE_ARGS "-DCMAKE_SYSTEM_VERSION=10.0.17763.0")
31-
list(APPEND DXC_CMAKE_ARGS "-DDXC_BUILD_ARCH=x64")
32-
33-
set(DXC_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/dxc" CACHE PATH "")
34-
set(DXC_BINARY_DIR_EP "${CMAKE_CURRENT_BINARY_DIR}/external/dxc" CACHE PATH "")
35-
set(DXC_BINARY_DIR_GE "${DXC_BINARY_DIR_EP}/$<CONFIG>" CACHE PATH "")
36-
37-
ExternalProject_Add(dxc
38-
DOWNLOAD_COMMAND ""
39-
SOURCE_DIR "${DXC_SOURCE_DIR}"
40-
BINARY_DIR "${DXC_BINARY_DIR_EP}"
41-
BUILD_COMMAND "${CMAKE_COMMAND}" --build "${DXC_BINARY_DIR_GE}" --config Release --target dxc --target dxcompiler -v
42-
CONFIGURE_COMMAND "${CMAKE_COMMAND}" -S "${DXC_SOURCE_DIR}" -B "${DXC_BINARY_DIR_GE}" -G "${CMAKE_GENERATOR}" "-Ax64" -T "${CMAKE_GENERATOR_TOOLSET}" ${DXC_CMAKE_ARGS}
43-
INSTALL_COMMAND ""
44-
TEST_COMMAND ""
45-
LOG_INSTALL 1
1+
set(HLSL_OPTIONAL_PROJS_IN_DEFAULT OFF CACHE BOOL "")
2+
set(HLSL_ENABLE_ANALYZE OFF CACHE BOOL "")
3+
set(HLSL_OFFICIAL_BUILD OFF CACHE BOOL "")
4+
set(HLSL_ENABLE_FIXED_VER OFF CACHE BOOL "")
5+
set(HLSL_ENABLE_FIXED_VER OFF CACHE BOOL "")
6+
set(HLSL_FIXED_VERSION_LOCATION "" CACHE STRING "")
7+
set(HLSL_BUILD_DXILCONV ON CACHE BOOL "")
8+
set(CLANG_VENDOR "" CACHE STRING "")
9+
set(ENABLE_SPIRV_CODEGEN ON CACHE BOOL "")
10+
set(SPIRV_BUILD_TESTS OFF CACHE BOOL "")
11+
set(CLANG_ENABLE_ARCMT OFF CACHE BOOL "")
12+
set(CLANG_ENABLE_STATIC_ANALYZER OFF CACHE BOOL "")
13+
set(CLANG_INCLUDE_TESTS Off CACHE BOOL "")
14+
set(LLVM_INCLUDE_TESTS Off CACHE BOOL "")
15+
set(HLSL_INCLUDE_TESTS OFF CACHE BOOL "")
16+
set(LLVM_TARGETS_TO_BUILD None CACHE STRING "")
17+
set(LLVM_INCLUDE_DOCS OFF CACHE BOOL "")
18+
set(LLVM_INCLUDE_TESTS OFF CACHE BOOL "")
19+
set(LLVM_INCLUDE_EXAMPLES OFF CACHE BOOL "")
20+
set(LIBCLANG_BUILD_STATIC ON CACHE BOOL "")
21+
set(LLVM_OPTIMIZED_TABLEGEN OFF CACHE BOOL "")
22+
set(LLVM_REQUIRES_EH ON CACHE BOOL "")
23+
set(LLVM_APPEND_VC_REV ON CACHE BOOL "")
24+
set(LLVM_ENABLE_RTTI ON CACHE BOOL "")
25+
set(LLVM_ENABLE_EH ON CACHE BOOL "")
26+
set(LLVM_DEFAULT_TARGET_TRIPLE "dxil-ms-dx" CACHE STRING "")
27+
set(CLANG_BUILD_EXAMPLES OFF CACHE BOOL "")
28+
set(LLVM_REQUIRES_RTTI ON CACHE BOOL "")
29+
set(CLANG_CL OFF CACHE BOOL "")
30+
set(LLVM_ENABLE_WERROR OFF CACHE BOOL "" FORCE)
31+
set(SPIRV_WERROR OFF CACHE BOOL "" FORCE)
32+
set(DXC_BUILD_ARCH x64 CACHE STRING "")
33+
set(SPIRV_HEADERS_SKIP_INSTALL ON CACHE INTERNAL "Skip SPIRV-Headers install")
34+
set(SPIRV_HEADERS_SKIP_EXAMPLES ON CACHE INTERNAL "Skip SPIRV-Headers examples")
35+
set(SKIP_SPIRV_TOOLS_INSTALL ON CACHE INTERNAL "Skip SPIRV-Tools install")
36+
set(SPIRV_SKIP_TESTS ON CACHE INTERNAL "Skip SPIRV-Tools tests")
37+
set(SPIRV_SKIP_EXECUTABLES ON CACHE INTERNAL "Skip SPIRV-Tools executable build")
38+
set(HLSL_ENABLE_DEBUG_ITERATORS ON CACHE BOOL "Enable Debug iterators" FORCE)
39+
40+
nbl_adjust_flags()
41+
42+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
43+
set(CMAKE_CXX_STANDARD 11) # compiler must support exactly c++11 or c++14 standard in order to be able to build DXC libraries
44+
if(NBL_DYNAMIC_MSVC_RUNTIME)
45+
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
46+
else()
47+
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
48+
endif()
49+
50+
try_compile(DXC_COMPILE_TEST_PASSED
51+
SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/test/test.cpp"
52+
OUTPUT_VARIABLE DXC_COMPILE_RET_VAL
53+
CXX_STANDARD ${CMAKE_CXX_STANDARD}
54+
CXX_STANDARD_REQUIRED ON
4655
)
4756

48-
unset(DXC_CMAKE_ARGS)
57+
if(DXC_COMPILE_TEST_PASSED)
58+
set(DXC_COMPILE_TEST_DONE ON CACHE BOOL "")
59+
else()
60+
message(FATAL_ERROR "${DXC_COMPILE_RET_VAL}")
61+
endif()
62+
63+
add_subdirectory(dxc dxc)
64+
set(CMAKE_CXX_STANDARD 20) # it's mandatory
65+
unset(CMAKE_CXX_STANDARD_REQUIRED)
66+
67+
include(FetchContent)
68+
set(FC_EXTERNAL_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/external")
69+
70+
set(DXC_BINARY_DIR "${FC_EXTERNAL_BINARY_DIR}/dxc" CACHE INTERNAL "")
71+
set(DXC_DOWNLOAD_DIR "${DXC_BINARY_DIR}/download" CACHE INTERNAL "")
72+
set(DXC_UNPACK_DIR "${DXC_BINARY_DIR}/unpack" CACHE INTERNAL "")
73+
74+
FetchContent_Declare(
75+
FC_DXC
76+
URL "${CMAKE_CURRENT_SOURCE_DIR}/exe/bin.tar.bz2"
77+
DOWNLOAD_DIR "${DXC_DOWNLOAD_DIR}"
78+
SOURCE_DIR "${DXC_UNPACK_DIR}"
79+
BINARY_DIR "${DXC_BINARY_DIR}"
80+
)
81+
82+
if(NOT DEFINED FC_DXC_POPULATED OR NOT ${FC_DXC_POPULATED})
83+
message(STATUS "Populating DXC executable...")
84+
85+
FetchContent_MakeAvailable(FC_DXC)
86+
FetchContent_GetProperties(FC_DXC POPULATED _FC_DXC_POPULATED_)
87+
88+
if(${_FC_DXC_POPULATED_})
89+
set(FC_DXC_POPULATED ON CACHE INTERNAL "")
90+
else()
91+
set(FC_DXC_POPULATED OFF CACHE INTERNAL "")
92+
endif()
93+
94+
unset(_FC_DXC_POPULATED_)
95+
endif()
96+
97+
set(DXC_EXT_EXECUTABLE "${DXC_UNPACK_DIR}/dxc.exe" CACHE STRING "" FORCE)
98+
99+
if(_NBL_ENABLE_DXC_COMPILE_TESTS_)
100+
add_subdirectory(CT CT)
101+
endif()

3rdparty/dxc/CT/CMakeLists.txt

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
set(_NBL_DXC_CT_INCLUDE_ROOT_ "${NBL_ROOT_PATH}/include") # Nabla include root path
2+
set(_NBL_DXC_CT_BINARY_BIN_ "${CMAKE_CURRENT_BINARY_DIR}") # compile-test directory
3+
4+
if(_NBL_DXC_COMPILE_TESTS_ENABLE_CMAKE_LOG_)
5+
message("${_NBL_DXC_CT_PREFIX_CMAKE_LOG_DEBUG_} _NBL_DXC_CT_INCLUDE_ROOT_ = '${_NBL_DXC_CT_INCLUDE_ROOT_}'")
6+
message("${_NBL_DXC_CT_PREFIX_CMAKE_LOG_DEBUG_} _NBL_DXC_CT_BINARY_BIN_ = '${_NBL_DXC_CT_BINARY_BIN_}'")
7+
endif()
8+
9+
####################################
10+
# NBL_DXC_CT_ADD_INPUT_FILE function
11+
# @_NBL_INPUT_REL_FILEPATH_@ is path relative to _NBL_DXC_CT_INCLUDE_ROOT_, the file must be nested in _NBL_DXC_CT_INCLUDE_ROOT_ as well to follow Nabla include rules
12+
# @_NBL_PROFILE_@ is DXC target profile, e.g "lib_6_7"
13+
# @_NBL_ENTRY_POINT_@ is entry point name for both HLSL and SPIRV if enabled. Leave it as empty "" string to not specify the entry point explicitly
14+
# @_NBL_GENERATE_SPIRV_@ is a bool option for enabling SPIRV code generation
15+
#############################################################################
16+
17+
function(NBL_DXC_CT_ADD_INPUT_FILE _NBL_INPUT_REL_FILEPATH_ _NBL_PROFILE_ _NBL_ENTRY_POINT_ _NBL_GENERATE_SPIRV_)
18+
set(_SHADER_FILE_PATH_ "${_NBL_DXC_CT_INCLUDE_ROOT_}/${_NBL_INPUT_REL_FILEPATH_}")
19+
20+
if(_NBL_DXC_COMPILE_TESTS_ENABLE_CMAKE_LOG_)
21+
message("${_NBL_DXC_CT_PREFIX_CMAKE_LOG_DEBUG_} adding _SHADER_FILE_PATH_ = '${_SHADER_FILE_PATH_}' as INPUT of DXC CT target")
22+
endif()
23+
24+
cmake_path(RELATIVE_PATH _SHADER_FILE_PATH_ BASE_DIRECTORY "${_NBL_DXC_CT_INCLUDE_ROOT_}" OUTPUT_VARIABLE _SHADER_NEW_RELATIVE_FILE_PATH_)
25+
cmake_path(GET _SHADER_NEW_RELATIVE_FILE_PATH_ STEM LAST_ONLY _SHADER_NEW_STEAM_)
26+
cmake_path(REMOVE_EXTENSION _SHADER_NEW_RELATIVE_FILE_PATH_ LAST_ONLY OUTPUT_VARIABLE _SHADER_NEW_RELATIVE_OUTPUT_DIR_)
27+
28+
set(_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_ "${_NBL_DXC_CT_BINARY_BIN_}/${_SHADER_NEW_RELATIVE_OUTPUT_DIR_}/bin")
29+
set(_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_ "${_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_}/${_SHADER_NEW_STEAM_}.bin")
30+
31+
string(FIND "${_NBL_PROFILE_}" "lib" _TMP_FOUND_LIB_PROFILE_)
32+
if("${_TMP_FOUND_LIB_PROFILE_}" STREQUAL "-1")
33+
if(_NBL_GENERATE_SPIRV_)
34+
cmake_path(REPLACE_EXTENSION _NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_ "spv")
35+
endif()
36+
else()
37+
cmake_path(REPLACE_EXTENSION _NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_ "dxil")
38+
endif()
39+
unset(_TMP_FOUND_LIB_PROFILE_)
40+
41+
# MSVC and other generators have "SetEnv" task - we need to make sure our enviroment is clean while invoking DXC compilation
42+
string(APPEND _TMP_CLEAN_ENV_ "set PATH=$ENV{PATH}\nset CAExcludePath=\nset LIB=\nset LIBPATH=\nset INCLUDE=\nset EXTERNAL_INCLUDE=\n")
43+
44+
if(NOT "${_NBL_ENTRY_POINT_}" STREQUAL "")
45+
string(APPEND _TMP_ENTRY_POINT_ARG_ "-E ${_NBL_ENTRY_POINT_}")
46+
endif()
47+
48+
if(_NBL_GENERATE_SPIRV_)
49+
string(APPEND _TMP_ENABLE_SPIRV_GEN_ARG_ "-spirv")
50+
endif()
51+
52+
# include-dependency input file chain
53+
set(_NBL_DXC_CT_CURRENT_DEPENDS_FILEPATH_ "${_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_}/depends.txt")
54+
set(_NBL_DXC_CT_CURRENT_IDC_FILEPATH_ "${_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_}/depends.cmd")
55+
string(APPEND _NBL_DXC_CT_WRAPPER_IDC_COMMAND_ "${_TMP_CLEAN_ENV_}\"${DXC_EXT_EXECUTABLE}\" -HV 2021 -T ${_NBL_PROFILE_} ${_TMP_ENTRY_POINT_ARG_} ${_TMP_ENABLE_SPIRV_GEN_ARG_} -I\"${_NBL_DXC_CT_INCLUDE_ROOT_}\" -Zi -MF \"${_NBL_DXC_CT_CURRENT_DEPENDS_FILEPATH_}\" \"${_SHADER_FILE_PATH_}\"")
56+
file(WRITE "${_NBL_DXC_CT_CURRENT_IDC_FILEPATH_}" "${_NBL_DXC_CT_WRAPPER_IDC_COMMAND_}")
57+
58+
# create a file contating paths to all input file's dependencies scanned recursively
59+
if(_NBL_DXC_COMPILE_TESTS_ENABLE_CMAKE_LOG_)
60+
execute_process(COMMAND "${_NBL_DXC_CT_CURRENT_IDC_FILEPATH_}")
61+
else()
62+
execute_process(COMMAND "${_NBL_DXC_CT_CURRENT_IDC_FILEPATH_}"
63+
OUTPUT_QUIET
64+
ERROR_QUIET
65+
)
66+
endif()
67+
68+
file(READ "${_NBL_DXC_CT_CURRENT_DEPENDS_FILEPATH_}" _NBL_DXC_CT_DEPENDENCIES_)
69+
unset(_NBL_DXC_CT_WRAPPER_IDC_COMMAND_)
70+
71+
# filter DXC output MF's file dependencies and put them into CMake list
72+
string(REPLACE ": " ";" _NBL_DXC_CT_DEPENDENCIES_S_ "${_NBL_DXC_CT_DEPENDENCIES_}")
73+
string(REPLACE " \\" ";" _NBL_DXC_CT_DEPENDENCIES_S_ "${_NBL_DXC_CT_DEPENDENCIES_S_}")
74+
string(REPLACE "\r" "" _NBL_DXC_CT_DEPENDENCIES_S_ "${_NBL_DXC_CT_DEPENDENCIES_S_}")
75+
string(REPLACE "\n" "" _NBL_DXC_CT_DEPENDENCIES_S_ "${_NBL_DXC_CT_DEPENDENCIES_S_}")
76+
string(STRIP "${_NBL_DXC_CT_DEPENDENCIES_S_}" _NBL_DXC_CT_DEPENDENCIES_S_)
77+
list(APPEND _NBL_DXC_CT_DEPENDENCIES_L_ "${_NBL_DXC_CT_DEPENDENCIES_S_}")
78+
list(TRANSFORM _NBL_DXC_CT_DEPENDENCIES_L_ STRIP)
79+
list(REMOVE_DUPLICATES _NBL_DXC_CT_DEPENDENCIES_L_)
80+
81+
set(_NBL_DXC_CT_CURRENT_DEPS_LIST_ ${_NBL_DXC_CT_DEPENDENCIES_L_})
82+
unset(_NBL_DXC_CT_DEPENDENCIES_)
83+
unset(_NBL_DXC_CT_DEPENDENCIES_S_)
84+
unset(_NBL_DXC_CT_DEPENDENCIES_L_)
85+
86+
# compile command
87+
string(APPEND _NBL_DXC_CT_WRAPPER_COMPILE_COMMAND_ "${_TMP_CLEAN_ENV_}\"${DXC_EXT_EXECUTABLE}\" -HV 2021 -T ${_NBL_PROFILE_} ${_TMP_ENTRY_POINT_ARG_} ${_TMP_ENABLE_SPIRV_GEN_ARG_} -I\"${_NBL_DXC_CT_INCLUDE_ROOT_}\" -Zi -Fo \"${_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_}\" \"${_SHADER_FILE_PATH_}\"")
88+
set(_NBL_DXC_CT_CURRENT_SHADER_COMPILE_FILEPATH_ "${_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_}/compile.cmd")
89+
file(WRITE "${_NBL_DXC_CT_CURRENT_SHADER_COMPILE_FILEPATH_}" "${_NBL_DXC_CT_WRAPPER_COMPILE_COMMAND_}")
90+
91+
unset(_NBL_DXC_CT_WRAPPER_COMPILE_COMMAND_)
92+
unset(_TMP_CLEAN_ENV_)
93+
unset(_TMP_ENTRY_POINT_ARG_)
94+
unset(_TMP_ENABLE_SPIRV_GEN_ARG_)
95+
96+
if(_NBL_DXC_COMPILE_TESTS_ENABLE_CMAKE_LOG_)
97+
message("${_NBL_DXC_CT_PREFIX_CMAKE_LOG_DEBUG_} adding _NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_ = '${_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_}' as OUTPUT of DXC CT target")
98+
endif()
99+
100+
set(_NBL_DXC_CT_BIN_OUTPUTS_
101+
${_NBL_DXC_CT_BIN_OUTPUTS_}
102+
"${_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_}"
103+
PARENT_SCOPE)
104+
105+
# create custom command per input file with it's all dependencies listed as DEPENDS
106+
add_custom_command(
107+
OUTPUT "${_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_}"
108+
COMMAND "${_NBL_DXC_CT_CURRENT_SHADER_COMPILE_FILEPATH_}"
109+
DEPENDS ${_NBL_DXC_CT_CURRENT_DEPS_LIST_}
110+
WORKING_DIRECTORY "${_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_}"
111+
USES_TERMINAL
112+
VERBATIM
113+
)
114+
115+
unset(_SHADER_FILE_PATH_)
116+
unset(_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_)
117+
unset(_NBL_DXC_CT_CURRENT_SHADER_COMPILE_FILEPATH_)
118+
unset(_NBL_DXC_CT_CURRENT_DEPS_LIST_)
119+
endfunction()
120+
121+
###############################################################################
122+
# list files you would like to compile with DXC using NBL_DXC_CT_ADD_INPUT_FILE
123+
###############################################################################
124+
125+
NBL_DXC_CT_ADD_INPUT_FILE("nbl/builtin/hlsl/barycentric/utils.hlsl" "lib_6_7" "" OFF)
126+
127+
# create custom targets for which DEPENDS are all of input files for DXC compile test
128+
add_custom_target(HLSL_NABLA_COMPILE_TEST DEPENDS ${_NBL_DXC_CT_BIN_OUTPUTS_}
129+
COMMENT "${CMAKE_COMMAND}" -E echo "Launching Nabla HLSL compile test..."
130+
)
131+
132+
add_dependencies(HLSL_NABLA_COMPILE_TEST dxcompiler)
133+
134+
unset(_NBL_DXC_CT_BIN_OUTPUTS_)
135+
unset(_NBL_DXC_CT_BINARY_BIN_)
136+
unset(_NBL_DXC_CT_INCLUDE_ROOT_)

3rdparty/dxc/dxc

Submodule dxc updated 1 file

3rdparty/dxc/test/test.cpp

568 Bytes
Binary file not shown.

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# This file is part of the "Nabla Engine".
33
# For conditions of distribution and use, see copyright notice in nabla.h.in or nabla.h
44

5-
cmake_minimum_required(VERSION 3.20)
5+
cmake_minimum_required(VERSION 3.25)
66
#policies
77
cmake_policy(SET CMP0072 OLD) #not yet, would need to get pointers to all OpenGL functions
88
set(OpenGL_GL_PREFERENCE LEGACY)

0 commit comments

Comments
 (0)