Skip to content

Commit 98fe300

Browse files
committed
Merge pull request #442 from Devsh-Graphics-Programming/dxc-fixes
DXC integration
2 parents e0daf72 + fccaffa commit 98fe300

File tree

17 files changed

+396
-185
lines changed

17 files changed

+396
-185
lines changed

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,6 @@
8787
[submodule "3rdparty/dxc/dxc"]
8888
path = 3rdparty/dxc/dxc
8989
url = git@github.com:Devsh-Graphics-Programming/DirectXShaderCompiler.git
90+
[submodule "3rdparty/tcpp"]
91+
path = 3rdparty/tcpp
92+
url = git@github.com:bnoazx005/tcpp

3rdparty/CMakeLists.txt

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -121,14 +121,13 @@ set(ZLIB_LIBRARY # for PNGLIB purposes
121121
$<$<CONFIG:RelWithDebInfo>:${ZLIB_LIBRARY_RELWITHDEBINFO}>
122122
CACHE INTERNAL "" FORCE)
123123

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

3rdparty/dxc/CMakeLists.txt

Lines changed: 69 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,51 @@
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()
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")
4138

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
4439
if(NBL_DYNAMIC_MSVC_RUNTIME)
45-
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
40+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DCMAKE_MSVC_RUNTIME_LIBRARY:STATIC=MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
4641
else()
47-
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
42+
list(APPEND NBL_DXC_CMAKE_OPTIONS "-DCMAKE_MSVC_RUNTIME_LIBRARY:STATIC=MultiThreaded$<$<CONFIG:Debug>:Debug>")
4843
endif()
4944

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+
5049
try_compile(DXC_COMPILE_TEST_PASSED
5150
SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/test/test.cpp"
5251
OUTPUT_VARIABLE DXC_COMPILE_RET_VAL
@@ -60,7 +59,16 @@ else()
6059
message(FATAL_ERROR "${DXC_COMPILE_RET_VAL}")
6160
endif()
6261

63-
add_subdirectory(dxc dxc)
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+
6472
set(CMAKE_CXX_STANDARD 20) # it's mandatory
6573
unset(CMAKE_CXX_STANDARD_REQUIRED)
6674

@@ -98,4 +106,19 @@ set(DXC_EXT_EXECUTABLE "${DXC_UNPACK_DIR}/dxc.exe" CACHE STRING "" FORCE)
98106

99107
if(_NBL_ENABLE_DXC_COMPILE_TESTS_)
100108
add_subdirectory(CT CT)
101-
endif()
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: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,6 @@ add_custom_target(HLSL_NABLA_COMPILE_TEST DEPENDS ${_NBL_DXC_CT_BIN_OUTPUTS_}
129129
COMMENT "${CMAKE_COMMAND}" -E echo "Launching Nabla HLSL compile test..."
130130
)
131131

132-
add_dependencies(HLSL_NABLA_COMPILE_TEST dxcompiler)
133-
134132
unset(_NBL_DXC_CT_BIN_OUTPUTS_)
135133
unset(_NBL_DXC_CT_BINARY_BIN_)
136134
unset(_NBL_DXC_CT_INCLUDE_ROOT_)

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

1.8 MB
Binary file not shown.

3rdparty/tcpp

Submodule tcpp added at b984479

CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
cmake_minimum_required(VERSION 3.25)
66
#policies
7-
cmake_policy(SET CMP0072 OLD) #not yet, would need to get pointers to all OpenGL functions
7+
cmake_policy(SET CMP0072 OLD) # not yet, would need to get pointers to all OpenGL functions
8+
cmake_policy(SET CMP0112 NEW)
89
set(OpenGL_GL_PREFERENCE LEGACY)
9-
#cmake_policy(SET CMP )
1010

1111
set(NBL_BUILD_ANDROID OFF)
1212

include/nbl/asset/utils/CHLSLCompiler.h

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ class NBL_API2 CHLSLCompiler final : public IShaderCompiler
4242
// return "";
4343
//}
4444

45+
std::string preprocessShader(std::string&& code, IShader::E_SHADER_STAGE& stage, const SPreprocessorOptions& preprocessOptions) const override;
46+
4547
protected:
4648

4749
void insertIntoStart(std::string& code, std::ostringstream&& ins) const override;
@@ -63,17 +65,25 @@ class NBL_API2 CHLSLCompiler final : public IShaderCompiler
6365
class DxcCompilationResult
6466
{
6567
public:
66-
std::unique_ptr<IDxcBlobEncoding> errorMessages;
67-
std::unique_ptr<IDxcBlob> objectBlob;
68-
std::unique_ptr<IDxcResult> compileResult;
68+
IDxcBlobEncoding* errorMessages;
69+
IDxcBlob* objectBlob;
70+
IDxcResult* compileResult;
6971

7072
char* GetErrorMessagesString()
7173
{
7274
return reinterpret_cast<char*>(errorMessages->GetBufferPointer());
7375
}
76+
77+
// TODO figure out why this is crashing when done as part of the destructor
78+
void release()
79+
{
80+
errorMessages->Release();
81+
objectBlob->Release();
82+
compileResult->Release();
83+
}
7484
};
7585

76-
DxcCompilationResult dxcCompile(std::string& source, LPCWSTR* args, uint32_t argCount, const SOptions& options) const;
86+
CHLSLCompiler::DxcCompilationResult dxcCompile(std::string& source, LPCWSTR* args, uint32_t argCount, const SOptions& options) const;
7787
};
7888

7989
}

0 commit comments

Comments
 (0)