Skip to content

Commit f0eeda6

Browse files
authored
Merge pull request #437 from Devsh-Graphics-Programming/hlsl-compiler-impl
Hlsl compiler impl
2 parents d88e7e2 + 2896de1 commit f0eeda6

File tree

111 files changed

+1781
-17859
lines changed

Some content is hidden

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

111 files changed

+1781
-17859
lines changed

.gitmodules

Lines changed: 7 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
@@ -90,3 +84,10 @@
9084
[submodule "examples_tests"]
9185
path = examples_tests
9286
url = git@github.com:Devsh-Graphics-Programming/Nabla-Examples-and-Tests.git
87+
[submodule "3rdparty/dxc/dxc"]
88+
path = 3rdparty/dxc/dxc
89+
url = git@github.com:Devsh-Graphics-Programming/DirectXShaderCompiler.git
90+
branch = devshFixes
91+
[submodule "3rdparty/tcpp"]
92+
path = 3rdparty/tcpp
93+
url = git@github.com:Erfan-Ahmadi/tcpp.git

3rdparty/CMakeLists.txt

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,20 @@ set(BUILD_SHARED_LIBS ${_OLD_BUILD_SHARED_LIBS})
1616
set(BUILD_STATIC_LIBS ${_OLD_BUILD_STATIC_LIBS})
1717
set(BUILD_TESTING ${_OLD_BUILD_TESTING})
1818

19-
2019
# openssl
2120
add_subdirectory(openssl openssl EXCLUDE_FROM_ALL)
2221

22+
# DXC
23+
set(SPIRV-Headers_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/dxc/dxc/external/SPIRV-Headers")
24+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fp:fast")
25+
option(_NBL_ENABLE_DXC_COMPILE_TESTS_ "Enable it in order to test compilation of Nabla shaders at build time" OFF)
26+
option(_NBL_DXC_COMPILE_TESTS_ENABLE_CMAKE_LOG_ "Enable more verbose log when creating DXC compile test target - only for Nabla developers!" OFF)
27+
set(_NBL_DXC_CT_PREFIX_CMAKE_LOG_DEBUG_ "[DXC_CT]:" CACHE INTERNAL "only for Nabla developers")
28+
add_subdirectory(dxc dxc EXCLUDE_FROM_ALL)
29+
30+
if(_NBL_ENABLE_DXC_COMPILE_TESTS_)
31+
message(STATUS "_NBL_ENABLE_DXC_COMPILE_TESTS_ enabled, DXC compile test target will be executed at build time!")
32+
endif()
2333

2434
# volk
2535
set(VOLK_PULL_IN_VULKAN OFF CACHE INTERNAL "" FORCE) # Needed to make sure vulkan library will not be linked in examples
@@ -38,25 +48,7 @@ endif()
3848

3949

4050
# TODO: redo
41-
find_package(OpenGL OPTIONAL_COMPONENTS EGL)
4251
find_package(Wayland) # TODO: remove, load Wayland dynamically
43-
#[[if (OpenGL_EGL_FOUND)
44-
message(FATAL_ERROR "FOUND EGL!!")
45-
else()
46-
message(FATAL_ERROR "COULDNT FIND EGL!!")
47-
endif()]]
48-
# EGL
49-
set(EGL_NO_GLEW ON CACHE INTERNAL "" FORCE)
50-
if (OpenGL_EGL_FOUND AND UNIX AND NOT APPLE)
51-
# TODO: This Cannot work like that!
52-
set(EGL_PASSTHROUGH ON FORCE)
53-
if (WAYLAND_CLIENT_FOUND)
54-
set(EGL_USE_WAYLAND ON FORCE)
55-
message(FATAL_ERROR "Using Wayland backend!!!")
56-
endif()
57-
endif()
58-
# all of the above fuckery can be dismissed
59-
add_subdirectory(EGL/EGL)
6052

6153

6254
# zlib (target is zlibstatic)
@@ -111,14 +103,13 @@ set(ZLIB_LIBRARY # for PNGLIB purposes
111103
$<$<CONFIG:RelWithDebInfo>:${ZLIB_LIBRARY_RELWITHDEBINFO}>
112104
CACHE INTERNAL "" FORCE)
113105

114-
115106
set(SPIRV_HEADERS_SKIP_INSTALL ON CACHE INTERNAL "Skip SPIRV-Headers install")
116107
set(SPIRV_HEADERS_SKIP_EXAMPLES ON CACHE INTERNAL "Skip SPIRV-Headers examples")
117-
add_subdirectory(SPIRV-Headers SPIRV-Headers EXCLUDE_FROM_ALL)
108+
add_subdirectory(dxc/dxc/external/SPIRV-Headers dxc/external/SPIRV-Headers EXCLUDE_FROM_ALL)
118109
set(SKIP_SPIRV_TOOLS_INSTALL ON CACHE INTERNAL "Skip SPIRV-Tools install")
119110
set(SPIRV_SKIP_TESTS ON CACHE INTERNAL "Skip SPIRV-Tools tests")
120111
set(SPIRV_SKIP_EXECUTABLES ON CACHE INTERNAL "Skip SPIRV-Tools executable build")
121-
add_subdirectory(SPIRV-Tools SPIRV-Tools EXCLUDE_FROM_ALL)
112+
add_subdirectory(dxc/dxc/external/SPIRV-Tools dxc/external/SPIRV-Tools EXCLUDE_FROM_ALL)
122113
set(SKIP_GLSLANG_INSTALL ON CACHE INTERNAL "Skip glslang install")
123114
set(ENABLE_SPVREMAPPER OFF CACHE INTERNAL "SPVRemapper is a spirv compression experimental library")
124115
set(ENABLE_GLSLANG_BINARIES OFF CACHE INTERNAL "Build glslangValidator and spirv-remap?")
@@ -322,8 +313,7 @@ set(NBL_3RDPARTY_TARGETS
322313
GenericCodeGen
323314
SPIRV
324315
SPIRV-Tools-static # SPIRV-Tools-shared in case of SHARED lib
325-
SPIRV-Tools-opt
326-
egl
316+
SPIRV-Tools-opt
327317
)
328318
if (_NBL_COMPILE_WITH_OPEN_EXR_)
329319
list(APPEND NBL_3RDPARTY_TARGETS

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: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DHLSL_OPTIONAL_PROJS_IN_DEFAULT:BOOL=OFF")
2+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DHLSL_ENABLE_ANALYZE:BOOL=OFF")
3+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DHLSL_OFFICIAL_BUILD:BOOL=OFF")
4+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DHLSL_ENABLE_FIXED_VER:BOOL=OFF")
5+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DHLSL_FIXED_VERSION_LOCATION:STRING=")
6+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DHLSL_BUILD_DXILCONV:BOOL=ON")
7+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DCLANG_VENDOR:STRING=")
8+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DENABLE_SPIRV_CODEGEN:BOOL=ON")
9+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DSPIRV_BUILD_TESTS:BOOL=OFF")
10+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DCLANG_ENABLE_ARCMT:BOOL=OFF")
11+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DCLANG_ENABLE_STATIC_ANALYZER:BOOL=OFF")
12+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DCLANG_INCLUDE_TESTS:BOOL=Off")
13+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_INCLUDE_TESTS:BOOL=Off")
14+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DHLSL_INCLUDE_TESTS:BOOL=OFF")
15+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_TARGETS_TO_BUILD:STRING=None")
16+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_INCLUDE_DOCS:BOOL=OFF")
17+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_INCLUDE_TESTS:BOOL=OFF")
18+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_INCLUDE_EXAMPLES:BOOL=OFF")
19+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLIBCLANG_BUILD_STATIC:BOOL=ON")
20+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_OPTIMIZED_TABLEGEN:BOOL=OFF")
21+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_REQUIRES_EH:BOOL=ON")
22+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_APPEND_VC_REV:BOOL=ON")
23+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_ENABLE_RTTI:BOOL=ON")
24+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_ENABLE_EH:BOOL=ON")
25+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_DEFAULT_TARGET_TRIPLE:STING=dxil-ms-dx")
26+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DCLANG_BUILD_EXAMPLES:BOOL=OFF")
27+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_REQUIRES_RTTI:BOOL=ON")
28+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DCLANG_CL:BOOL=OFF")
29+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DLLVM_ENABLE_WERROR:BOOL=OFF")
30+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DSPIRV_WERROR:BOOL=OFF")
31+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DDXC_BUILD_ARCH:STRING=x64")
32+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DSPIRV_HEADERS_SKIP_INSTALL:BOOL=ON")
33+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DSPIRV_HEADERS_SKIP_EXAMPLES:BOOL=ON")
34+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DSKIP_SPIRV_TOOLS_INSTALL:BOOL=ON")
35+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DSPIRV_SKIP_TESTS:BOOL=ON")
36+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DSPIRV_SKIP_EXECUTABLES:BOOL=ON")
37+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DHLSL_ENABLE_DEBUG_ITERATORS:BOOL=ON")
38+
39+
if(NBL_DYNAMIC_MSVC_RUNTIME)
40+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DCMAKE_MSVC_RUNTIME_LIBRARY:STATIC=MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
41+
else()
42+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DCMAKE_MSVC_RUNTIME_LIBRARY:STATIC=MultiThreaded$<$<CONFIG:Debug>:Debug>")
43+
endif()
44+
45+
# perform DXC compile standard requirement test
46+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
47+
set(CMAKE_CXX_STANDARD 11) # compiler must support exactly c++11 or c++14 standard in order to be able to build DXC libraries
48+
49+
try_compile(DXC_COMPILE_TEST_PASSED
50+
SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/test/test.cpp"
51+
OUTPUT_VARIABLE DXC_COMPILE_RET_VAL
52+
CXX_STANDARD ${CMAKE_CXX_STANDARD}
53+
CXX_STANDARD_REQUIRED ON
54+
)
55+
56+
if(DXC_COMPILE_TEST_PASSED)
57+
set(DXC_COMPILE_TEST_DONE ON CACHE BOOL "")
58+
else()
59+
message(FATAL_ERROR "${DXC_COMPILE_RET_VAL}")
60+
endif()
61+
62+
set(DXC_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/build" CACHE INTERNAL "")
63+
execute_process(COMMAND "${CMAKE_COMMAND}" -S "${CMAKE_CURRENT_SOURCE_DIR}/dxc" -B "${DXC_BUILD_DIR}" -G "${CMAKE_GENERATOR}" "-Ax64" -T "${CMAKE_GENERATOR_TOOLSET}" ${NBL_DXC_CMAKE_OPTIONS}
64+
RESULT_VARIABLE DXC_CMAKE_RESULT
65+
OUTPUT_VARIABLE DXC_CMAKE_STREAM_PIPE
66+
)
67+
68+
if(NOT "${DXC_CMAKE_RESULT}" STREQUAL "0")
69+
message(FATAL_ERROR "${DXC_CMAKE_STREAM_PIPE}")
70+
endif()
71+
72+
set(CMAKE_CXX_STANDARD 20) # it's mandatory
73+
unset(CMAKE_CXX_STANDARD_REQUIRED)
74+
75+
include(FetchContent)
76+
set(FC_EXTERNAL_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/external")
77+
78+
set(DXC_BINARY_DIR "${FC_EXTERNAL_BINARY_DIR}/dxc" CACHE INTERNAL "")
79+
set(DXC_DOWNLOAD_DIR "${DXC_BINARY_DIR}/download" CACHE INTERNAL "")
80+
set(DXC_UNPACK_DIR "${DXC_BINARY_DIR}/unpack" CACHE INTERNAL "")
81+
82+
FetchContent_Declare(
83+
FC_DXC
84+
URL "${CMAKE_CURRENT_SOURCE_DIR}/exe/bin.tar.bz2"
85+
DOWNLOAD_DIR "${DXC_DOWNLOAD_DIR}"
86+
SOURCE_DIR "${DXC_UNPACK_DIR}"
87+
BINARY_DIR "${DXC_BINARY_DIR}"
88+
)
89+
90+
if(NOT DEFINED FC_DXC_POPULATED OR NOT ${FC_DXC_POPULATED})
91+
message(STATUS "Populating DXC executable...")
92+
93+
FetchContent_MakeAvailable(FC_DXC)
94+
FetchContent_GetProperties(FC_DXC POPULATED _FC_DXC_POPULATED_)
95+
96+
if(${_FC_DXC_POPULATED_})
97+
set(FC_DXC_POPULATED ON CACHE INTERNAL "")
98+
else()
99+
set(FC_DXC_POPULATED OFF CACHE INTERNAL "")
100+
endif()
101+
102+
unset(_FC_DXC_POPULATED_)
103+
endif()
104+
105+
set(DXC_EXT_EXECUTABLE "${DXC_UNPACK_DIR}/dxc.exe" CACHE STRING "" FORCE)
106+
107+
if(_NBL_ENABLE_DXC_COMPILE_TESTS_)
108+
add_subdirectory(CT CT)
109+
endif()
110+
111+
include("${DXC_BUILD_DIR}/nbl/generate/dxc/config/debug.cmake")
112+
include("${DXC_BUILD_DIR}/nbl/generate/dxc/config/release.cmake")
113+
114+
set(DXC_INCLUDE_DIRECTORIES
115+
$<IF:$<CONFIG:Debug>,${NBL_DXC_DEBUG_INCLUDE_DIRECTORIES},${NBL_DXC_RELEASE_INCLUDE_DIRECTORIES}>
116+
CACHE INTERNAL "")
117+
118+
set(DXC_LIB
119+
$<IF:$<CONFIG:Debug>,${NBL_DXC_DEBUG_LIB},${NBL_DXC_RELEASE_LIB}>
120+
CACHE INTERNAL "")
121+
122+
set(DXC_DLL
123+
$<IF:$<CONFIG:Debug>,${NBL_DXC_DEBUG_DLL},${NBL_DXC_RELEASE_DLL}>
124+
CACHE INTERNAL "")

3rdparty/dxc/CT/CMakeLists.txt

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
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+
unset(_NBL_DXC_CT_BIN_OUTPUTS_)
133+
unset(_NBL_DXC_CT_BINARY_BIN_)
134+
unset(_NBL_DXC_CT_INCLUDE_ROOT_)

3rdparty/dxc/dxc

Submodule dxc added at 3e55f23

3rdparty/dxc/exe/bin.tar.bz2

1.8 MB
Binary file not shown.

3rdparty/dxc/test/test.cpp

568 Bytes
Binary file not shown.

3rdparty/tcpp

Submodule tcpp added at e080c76

0 commit comments

Comments
 (0)