159 lines
4.7 KiB
CMake
159 lines
4.7 KiB
CMake
cmake_minimum_required(VERSION 3.20)
|
|
|
|
project(XC3DGSD3D12MVS LANGUAGES CXX)
|
|
|
|
set(CMAKE_CXX_STANDARD 20)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
find_program(XC_DXC_EXECUTABLE NAMES dxc)
|
|
if(NOT XC_DXC_EXECUTABLE)
|
|
message(FATAL_ERROR "dxc is required to build the 3DGS D3D12 MVS sort shaders.")
|
|
endif()
|
|
|
|
get_filename_component(XCENGINE_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../.." ABSOLUTE)
|
|
set(XCENGINE_BUILD_DIR "${XCENGINE_ROOT}/build")
|
|
set(XCENGINE_INCLUDE_DIR "${XCENGINE_ROOT}/engine/include")
|
|
set(XCENGINE_LIBRARY_DEBUG "${XCENGINE_BUILD_DIR}/engine/Debug/XCEngine.lib")
|
|
|
|
if(NOT EXISTS "${XCENGINE_LIBRARY_DEBUG}")
|
|
message(FATAL_ERROR "Prebuilt XCEngine library was not found: ${XCENGINE_LIBRARY_DEBUG}")
|
|
endif()
|
|
|
|
add_library(XCEngine STATIC IMPORTED GLOBAL)
|
|
set_target_properties(XCEngine PROPERTIES
|
|
IMPORTED_CONFIGURATIONS "Debug;Release;RelWithDebInfo;MinSizeRel"
|
|
IMPORTED_LOCATION_DEBUG "${XCENGINE_LIBRARY_DEBUG}"
|
|
IMPORTED_LOCATION_RELEASE "${XCENGINE_LIBRARY_DEBUG}"
|
|
IMPORTED_LOCATION_RELWITHDEBINFO "${XCENGINE_LIBRARY_DEBUG}"
|
|
IMPORTED_LOCATION_MINSIZEREL "${XCENGINE_LIBRARY_DEBUG}"
|
|
)
|
|
|
|
add_executable(xc_3dgs_d3d12_mvs
|
|
WIN32
|
|
src/main.cpp
|
|
src/App.cpp
|
|
src/GaussianPlyLoader.cpp
|
|
include/XC3DGSD3D12/App.h
|
|
include/XC3DGSD3D12/GaussianPlyLoader.h
|
|
shaders/PreparedSplatView.hlsli
|
|
shaders/PrepareGaussiansCS.hlsl
|
|
shaders/BuildSortKeysCS.hlsl
|
|
shaders/SortCommon.hlsl
|
|
shaders/DeviceRadixSort.hlsl
|
|
shaders/DebugPointsVS.hlsl
|
|
shaders/DebugPointsPS.hlsl
|
|
shaders/CompositeVS.hlsl
|
|
shaders/CompositePS.hlsl
|
|
)
|
|
|
|
set_source_files_properties(
|
|
shaders/PreparedSplatView.hlsli
|
|
shaders/PrepareGaussiansCS.hlsl
|
|
shaders/BuildSortKeysCS.hlsl
|
|
shaders/SortCommon.hlsl
|
|
shaders/DeviceRadixSort.hlsl
|
|
shaders/DebugPointsVS.hlsl
|
|
shaders/DebugPointsPS.hlsl
|
|
shaders/CompositeVS.hlsl
|
|
shaders/CompositePS.hlsl
|
|
PROPERTIES
|
|
HEADER_FILE_ONLY TRUE
|
|
)
|
|
|
|
target_include_directories(xc_3dgs_d3d12_mvs PRIVATE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/include
|
|
${XCENGINE_INCLUDE_DIR}
|
|
)
|
|
|
|
target_compile_definitions(xc_3dgs_d3d12_mvs PRIVATE
|
|
UNICODE
|
|
_UNICODE
|
|
NOMINMAX
|
|
WIN32_LEAN_AND_MEAN
|
|
)
|
|
|
|
if(MSVC)
|
|
target_compile_options(xc_3dgs_d3d12_mvs PRIVATE /utf-8)
|
|
endif()
|
|
|
|
target_link_libraries(xc_3dgs_d3d12_mvs PRIVATE
|
|
XCEngine
|
|
d3d12
|
|
dxgi
|
|
dxguid
|
|
d3dcompiler
|
|
winmm
|
|
delayimp
|
|
bcrypt
|
|
opengl32
|
|
)
|
|
|
|
set_target_properties(xc_3dgs_d3d12_mvs PROPERTIES
|
|
VS_DEBUGGER_WORKING_DIRECTORY "$<TARGET_FILE_DIR:xc_3dgs_d3d12_mvs>"
|
|
)
|
|
|
|
add_custom_command(TARGET xc_3dgs_d3d12_mvs POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/room.ply"
|
|
"$<TARGET_FILE_DIR:xc_3dgs_d3d12_mvs>/room.ply"
|
|
)
|
|
|
|
add_custom_command(TARGET xc_3dgs_d3d12_mvs POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/shaders"
|
|
"$<TARGET_FILE_DIR:xc_3dgs_d3d12_mvs>/shaders"
|
|
)
|
|
|
|
add_custom_command(TARGET xc_3dgs_d3d12_mvs POST_BUILD
|
|
COMMAND "${XC_DXC_EXECUTABLE}"
|
|
-T cs_6_6
|
|
-E MainCS
|
|
-Fo "$<TARGET_FILE_DIR:xc_3dgs_d3d12_mvs>/shaders/BuildSortKeysCS.dxil"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/shaders/BuildSortKeysCS.hlsl"
|
|
COMMAND "${XC_DXC_EXECUTABLE}"
|
|
-T cs_6_6
|
|
-E InitDeviceRadixSort
|
|
-D KEY_UINT=1
|
|
-D PAYLOAD_UINT=1
|
|
-D SORT_PAIRS=1
|
|
-D SHOULD_ASCEND=1
|
|
-Fo "$<TARGET_FILE_DIR:xc_3dgs_d3d12_mvs>/shaders/RadixInit.dxil"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/shaders/DeviceRadixSort.hlsl"
|
|
COMMAND "${XC_DXC_EXECUTABLE}"
|
|
-T cs_6_6
|
|
-E Upsweep
|
|
-D KEY_UINT=1
|
|
-D PAYLOAD_UINT=1
|
|
-D SORT_PAIRS=1
|
|
-D SHOULD_ASCEND=1
|
|
-Fo "$<TARGET_FILE_DIR:xc_3dgs_d3d12_mvs>/shaders/RadixUpsweep.dxil"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/shaders/DeviceRadixSort.hlsl"
|
|
COMMAND "${XC_DXC_EXECUTABLE}"
|
|
-T cs_6_6
|
|
-E BuildGlobalHistogram
|
|
-D KEY_UINT=1
|
|
-D PAYLOAD_UINT=1
|
|
-D SORT_PAIRS=1
|
|
-D SHOULD_ASCEND=1
|
|
-Fo "$<TARGET_FILE_DIR:xc_3dgs_d3d12_mvs>/shaders/RadixGlobalHistogram.dxil"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/shaders/DeviceRadixSort.hlsl"
|
|
COMMAND "${XC_DXC_EXECUTABLE}"
|
|
-T cs_6_6
|
|
-E Scan
|
|
-D KEY_UINT=1
|
|
-D PAYLOAD_UINT=1
|
|
-D SORT_PAIRS=1
|
|
-D SHOULD_ASCEND=1
|
|
-Fo "$<TARGET_FILE_DIR:xc_3dgs_d3d12_mvs>/shaders/RadixScan.dxil"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/shaders/DeviceRadixSort.hlsl"
|
|
COMMAND "${XC_DXC_EXECUTABLE}"
|
|
-T cs_6_6
|
|
-E Downsweep
|
|
-D KEY_UINT=1
|
|
-D PAYLOAD_UINT=1
|
|
-D SORT_PAIRS=1
|
|
-D SHOULD_ASCEND=1
|
|
-Fo "$<TARGET_FILE_DIR:xc_3dgs_d3d12_mvs>/shaders/RadixDownsweep.dxil"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/shaders/DeviceRadixSort.hlsl"
|
|
)
|