@@ -580,132 +580,129 @@ if(_NBL_COMPILE_WITH_GLI_)
580
580
endif ()
581
581
582
582
# DXC
583
- if (_NBL_COMPILE_WITH_DXC_ )
584
- add_dependencies (Nabla dxc )
585
- target_include_directories (Nabla PRIVATE
586
- "${DXC_BINARY_DIR_GE} /tools/clang/tools/dxcompiler"
587
- "${DXC_SOURCE_DIR} /tools/clang/tools/dxcompiler"
588
- "${DXC_SOURCE_DIR} /tools/clang/include"
589
- "${DXC_BINARY_DIR_GE} /tools/clang/include"
590
- "${DXC_SOURCE_DIR} /include/llvm/llvm_assert"
591
- "${DXC_BINARY_DIR_GE} /include"
592
- "${DXC_SOURCE_DIR} /include"
593
- "${DXC_BINARY_DIR_GE} /include/dxc/Tracing"
594
- "${DXC_BINARY_DIR_GE} /utils/version"
595
- )
596
- target_link_libraries (Nabla INTERFACE "${DXC_DXCOMPILER_LIB} " )
583
+ add_dependencies (Nabla dxc )
584
+ target_include_directories (Nabla PRIVATE
585
+ "${DXC_BINARY_DIR_GE} /tools/clang/tools/dxcompiler"
586
+ "${DXC_SOURCE_DIR} /tools/clang/tools/dxcompiler"
587
+ "${DXC_SOURCE_DIR} /tools/clang/include"
588
+ "${DXC_BINARY_DIR_GE} /tools/clang/include"
589
+ "${DXC_SOURCE_DIR} /include/llvm/llvm_assert"
590
+ "${DXC_BINARY_DIR_GE} /include"
591
+ "${DXC_SOURCE_DIR} /include"
592
+ "${DXC_BINARY_DIR_GE} /include/dxc/Tracing"
593
+ "${DXC_BINARY_DIR_GE} /utils/version"
594
+ )
595
+ target_link_libraries (Nabla INTERFACE "${DXC_DXCOMPILER_LIB} " )
596
+
597
+ ############################################################################
598
+ # list files you want to compile with DXC in _NBL_ENABLE_DXC_COMPILE_TESTS_
599
+ # once we have guarantee all of shaders in Nabla can be compiled with DXC,
600
+ # we can simply grep all of those files/use existing vars holding paths to
601
+ # shaders and remove manual adding the files bellow
602
+ ###################################################
603
+
604
+ if (_NBL_ENABLE_DXC_COMPILE_TESTS_ )
605
+ set (_NBL_DXC_CT_INCLUDE_ROOT_ "${NBL_ROOT_PATH} /include" ) # Nabla include root path for shaders
606
+ set (_NBL_DXC_CT_BINARY_BIN_ "${CMAKE_CURRENT_BINARY_DIR} /DXC/CT" ) # compile-test directory
597
607
598
- ############################################################################
599
- # list files you want to compile with DXC in _NBL_ENABLE_DXC_COMPILE_TESTS_
600
- # once we have guarantee all of shaders in Nabla can be compiled with DXC,
601
- # we can simply grep all of those files/use existing vars holding paths to
602
- # shaders and remove manual adding the files bellow
603
- ###################################################
608
+ if (_NBL_DXC_COMPILE_TESTS_ENABLE_CMAKE_LOG_ )
609
+ message ("${_NBL_DXC_CT_PREFIX_CMAKE_LOG_DEBUG_} _NBL_DXC_CT_INCLUDE_ROOT_ = '${_NBL_DXC_CT_INCLUDE_ROOT_} '" )
610
+ message ("${_NBL_DXC_CT_PREFIX_CMAKE_LOG_DEBUG_} _NBL_DXC_CT_BINARY_BIN_ = '${_NBL_DXC_CT_BINARY_BIN_} '" )
611
+ endif ()
612
+
613
+ # this is how you add file for compilation test
614
+ set (_NBL_DXC_CT_SHADER_FILES_
615
+ "${_NBL_DXC_CT_INCLUDE_ROOT_} /nbl/builtin/hlsl/barycentric/utils.hlsl"
616
+ )
604
617
605
- if (_NBL_ENABLE_DXC_COMPILE_TESTS_ )
606
- set (_NBL_DXC_CT_INCLUDE_ROOT_ "${NBL_ROOT_PATH} /include" ) # Nabla include root path for shaders
607
- set (_NBL_DXC_CT_BINARY_BIN_ "${CMAKE_CURRENT_BINARY_DIR} /DXC/CT" ) # compile-test directory
618
+ foreach (_SHADER_FILE_PATH_ IN LISTS _NBL_DXC_CT_SHADER_FILES_ )
619
+ if (_NBL_DXC_COMPILE_TESTS_ENABLE_CMAKE_LOG_ )
620
+ message ("${_NBL_DXC_CT_PREFIX_CMAKE_LOG_DEBUG_} adding _SHADER_FILE_PATH_ = '${_SHADER_FILE_PATH_} ' as INPUT of DXC CT target" )
621
+ endif ()
622
+
623
+ cmake_path (RELATIVE_PATH _SHADER_FILE_PATH_ BASE_DIRECTORY "${_NBL_DXC_CT_INCLUDE_ROOT_} " OUTPUT_VARIABLE _SHADER_NEW_RELATIVE_FILE_PATH_ )
624
+ cmake_path (GET _SHADER_NEW_RELATIVE_FILE_PATH_ STEM LAST_ONLY _SHADER_NEW_STEAM_ )
625
+ cmake_path (REMOVE_EXTENSION _SHADER_NEW_RELATIVE_FILE_PATH_ LAST_ONLY OUTPUT_VARIABLE _SHADER_NEW_RELATIVE_OUTPUT_DIR_ )
626
+
627
+ set (_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_ "${_NBL_DXC_CT_BINARY_BIN_} /${_SHADER_NEW_RELATIVE_OUTPUT_DIR_} /bin" )
628
+ set (_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_ "${_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_} /${_SHADER_NEW_STEAM_} .bin" )
629
+
630
+ # MSVC and other generators have "SetEnv" task - we need to make sure our enviroment is clean while invoking DXC compilation
631
+ string (APPEND _TMP_CLEAN_ENV_ "set PATH=$ENV{PATH} \n set CAExcludePath=\n set LIB=\n set LIBPATH=\n set INCLUDE=\n set EXTERNAL_INCLUDE=\n " )
632
+
633
+ # Include dependency chain for considered compile file
634
+ set (_NBL_DXC_CT_CURRENT_DEPENDS_FILEPATH_ "${_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_} /depends.txt" )
635
+ set (_NBL_DXC_CT_CURRENT_IDC_FILEPATH_ "${_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_} /depends.cmd" )
636
+ string (APPEND _NBL_DXC_CT_WRAPPER_IDC_COMMAND_ "${_TMP_CLEAN_ENV_} \" ${DXC_EXECUTABLE} \" -HV 2021 -T lib_6_7 -I\" ${_NBL_DXC_CT_INCLUDE_ROOT_} \" -Zi -MF \" ${_NBL_DXC_CT_CURRENT_DEPENDS_FILEPATH_} \" \" ${_SHADER_FILE_PATH_} \" " )
637
+ file (WRITE "${_NBL_DXC_CT_CURRENT_IDC_FILEPATH_} " "${_NBL_DXC_CT_WRAPPER_IDC_COMMAND_} " )
638
+ # TODO execute_process for _NBL_DXC_CT_CURRENT_IDC_FILEPATH_ and hanlding _NBL_DXC_CT_CURRENT_IDC_FILEPATH_'s deps by custom command
639
+
640
+ # Compile command
641
+ string (APPEND _NBL_DXC_CT_WRAPPER_COMPILE_COMMAND_ "${_TMP_CLEAN_ENV_} \" ${DXC_EXECUTABLE} \" -HV 2021 -T lib_6_7 -I\" ${_NBL_DXC_CT_INCLUDE_ROOT_} \" -Zi -Fo \" ${_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_} \" \" ${_SHADER_FILE_PATH_} \" " )
642
+ set (_NBL_DXC_CT_CURRENT_SHADER_COMPILE_FILEPATH_ "${_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_} /compile.cmd" )
643
+ file (WRITE "${_NBL_DXC_CT_CURRENT_SHADER_COMPILE_FILEPATH_} " "${_NBL_DXC_CT_WRAPPER_COMPILE_COMMAND_} " )
644
+
645
+ unset (_NBL_DXC_CT_WRAPPER_COMPILE_COMMAND_ )
646
+ unset (_TMP_CLEAN_ENV_ )
608
647
609
648
if (_NBL_DXC_COMPILE_TESTS_ENABLE_CMAKE_LOG_ )
610
- message ("${_NBL_DXC_CT_PREFIX_CMAKE_LOG_DEBUG_} _NBL_DXC_CT_INCLUDE_ROOT_ = '${_NBL_DXC_CT_INCLUDE_ROOT_} '" )
611
- message ("${_NBL_DXC_CT_PREFIX_CMAKE_LOG_DEBUG_} _NBL_DXC_CT_BINARY_BIN_ = '${_NBL_DXC_CT_BINARY_BIN_} '" )
649
+ 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" )
612
650
endif ()
613
651
614
- # this is how you add file for compilation test
615
- set (_NBL_DXC_CT_SHADER_FILES_
616
- "${_NBL_DXC_CT_INCLUDE_ROOT_} /nbl/builtin/hlsl/barycentric/utils.hlsl"
617
- )
652
+ ###############################################################
653
+ # scans include files of particular hlsl file to compile by DXC
654
+ # performs validation of include files and adds them as DEPENDS
655
+ # of custom command to keep track of modifications of any
656
+ # dependency file
657
+ #
658
+ # TODO: add recursive scanning of ALL includes, right now it
659
+ # doesn't scan recursivly but sinks only with include depth = 1
660
+ ###############################################################
618
661
619
- foreach (_SHADER_FILE_PATH_ IN LISTS _NBL_DXC_CT_SHADER_FILES_ )
620
- if (_NBL_DXC_COMPILE_TESTS_ENABLE_CMAKE_LOG_ )
621
- message ("${_NBL_DXC_CT_PREFIX_CMAKE_LOG_DEBUG_} adding _SHADER_FILE_PATH_ = '${_SHADER_FILE_PATH_} ' as INPUT of DXC CT target" )
622
- endif ()
623
-
624
- cmake_path (RELATIVE_PATH _SHADER_FILE_PATH_ BASE_DIRECTORY "${_NBL_DXC_CT_INCLUDE_ROOT_} " OUTPUT_VARIABLE _SHADER_NEW_RELATIVE_FILE_PATH_ )
625
- cmake_path (GET _SHADER_NEW_RELATIVE_FILE_PATH_ STEM LAST_ONLY _SHADER_NEW_STEAM_ )
626
- cmake_path (REMOVE_EXTENSION _SHADER_NEW_RELATIVE_FILE_PATH_ LAST_ONLY OUTPUT_VARIABLE _SHADER_NEW_RELATIVE_OUTPUT_DIR_ )
627
-
628
- set (_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_ "${_NBL_DXC_CT_BINARY_BIN_} /${_SHADER_NEW_RELATIVE_OUTPUT_DIR_} /bin" )
629
- set (_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_ "${_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_} /${_SHADER_NEW_STEAM_} .bin" )
630
-
631
- # MSVC and other generators have "SetEnv" task - we need to make sure our enviroment is clean while invoking DXC compilation
632
- string (APPEND _TMP_CLEAN_ENV_ "set PATH=$ENV{PATH} \n set CAExcludePath=\n set LIB=\n set LIBPATH=\n set INCLUDE=\n set EXTERNAL_INCLUDE=\n " )
633
-
634
- # Include dependency chain for considered compile file
635
- set (_NBL_DXC_CT_CURRENT_DEPENDS_FILEPATH_ "${_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_} /depends.txt" )
636
- set (_NBL_DXC_CT_CURRENT_IDC_FILEPATH_ "${_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_} /depends.cmd" )
637
- string (APPEND _NBL_DXC_CT_WRAPPER_IDC_COMMAND_ "${_TMP_CLEAN_ENV_} \" ${DXC_EXECUTABLE} \" -HV 2021 -T lib_6_7 -I\" ${_NBL_DXC_CT_INCLUDE_ROOT_} \" -Zi -MF \" ${_NBL_DXC_CT_CURRENT_DEPENDS_FILEPATH_} \" \" ${_SHADER_FILE_PATH_} \" " )
638
- file (WRITE "${_NBL_DXC_CT_CURRENT_IDC_FILEPATH_} " "${_NBL_DXC_CT_WRAPPER_IDC_COMMAND_} " )
639
- # TODO execute_process for _NBL_DXC_CT_CURRENT_IDC_FILEPATH_ and hanlding _NBL_DXC_CT_CURRENT_IDC_FILEPATH_'s deps by custom command
640
-
641
- # Compile command
642
- string (APPEND _NBL_DXC_CT_WRAPPER_COMPILE_COMMAND_ "${_TMP_CLEAN_ENV_} \" ${DXC_EXECUTABLE} \" -HV 2021 -T lib_6_7 -I\" ${_NBL_DXC_CT_INCLUDE_ROOT_} \" -Zi -Fo \" ${_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_} \" \" ${_SHADER_FILE_PATH_} \" " )
643
- set (_NBL_DXC_CT_CURRENT_SHADER_COMPILE_FILEPATH_ "${_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_} /compile.cmd" )
644
- file (WRITE "${_NBL_DXC_CT_CURRENT_SHADER_COMPILE_FILEPATH_} " "${_NBL_DXC_CT_WRAPPER_COMPILE_COMMAND_} " )
645
-
646
- unset (_NBL_DXC_CT_WRAPPER_COMPILE_COMMAND_ )
647
- unset (_TMP_CLEAN_ENV_ )
648
-
649
- if (_NBL_DXC_COMPILE_TESTS_ENABLE_CMAKE_LOG_ )
650
- 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" )
651
- endif ()
652
-
653
- ###############################################################
654
- # scans include files of particular hlsl file to compile by DXC
655
- # performs validation of include files and adds them as DEPENDS
656
- # of custom command to keep track of modifications of any
657
- # dependency file
658
- #
659
- # TODO: add recursive scanning of ALL includes, right now it
660
- # doesn't scan recursivly but sinks only with include depth = 1
661
- ###############################################################
662
-
663
- set (_NBL_DXC_CT_CURRENT_ROOT_COMPILE_FILE_ISSUER_ "${_SHADER_FILE_PATH_} " )
664
- list (APPEND _TMP_CURRENT_DEPS_LIST_ "${_NBL_DXC_CT_CURRENT_ROOT_COMPILE_FILE_ISSUER_} " )
665
- file (STRINGS "${_NBL_DXC_CT_CURRENT_ROOT_COMPILE_FILE_ISSUER_} " _NBL_DXC_CT_INPUT_SCAN_INCLUDE_LINES_ REGEX "#include <|#include \" " )
662
+ set (_NBL_DXC_CT_CURRENT_ROOT_COMPILE_FILE_ISSUER_ "${_SHADER_FILE_PATH_} " )
663
+ list (APPEND _TMP_CURRENT_DEPS_LIST_ "${_NBL_DXC_CT_CURRENT_ROOT_COMPILE_FILE_ISSUER_} " )
664
+ file (STRINGS "${_NBL_DXC_CT_CURRENT_ROOT_COMPILE_FILE_ISSUER_} " _NBL_DXC_CT_INPUT_SCAN_INCLUDE_LINES_ REGEX "#include <|#include \" " )
666
665
667
- foreach (_NBL_DXC_CT_CURRENT_INPUT_SCAN_LINE_ IN LISTS _NBL_DXC_CT_INPUT_SCAN_INCLUDE_LINES_ )
668
- string (REGEX MATCH "<.*>|\" .*\" " _TMP_INCLUDE_WITH_SHEATH_CHARS_ "${_NBL_DXC_CT_CURRENT_INPUT_SCAN_LINE_} " )
669
- string (REGEX REPLACE <|>|\" "" _TMP_INCLUDE_WITHOUT_SHEATH_CHARS_ "${_TMP_INCLUDE_WITH_SHEATH_CHARS_} " )
670
-
671
- set (_NBL_DXC_CT_CURRENT_HANDLED_INCLUDE_PATH_ "${_NBL_DXC_CT_INCLUDE_ROOT_} /${_TMP_INCLUDE_WITHOUT_SHEATH_CHARS_} " )
672
-
673
- if (NOT EXISTS "${_NBL_DXC_CT_CURRENT_HANDLED_INCLUDE_PATH_} " )
674
- # NOTE: this won't work for shaders included that are registered on fly by asset manager, but let's assume we won't test shaders including another files stored in virtual file system
675
- message (FATAL_ERROR "${_NBL_DXC_CT_PREFIX_CMAKE_LOG_DEBUG_} File '${_NBL_DXC_CT_CURRENT_HANDLED_INCLUDE_PATH_} ' included by '${_NBL_DXC_CT_CURRENT_ROOT_COMPILE_FILE_ISSUER_} ' doesn't exist!" )
676
- endif ()
677
-
678
- list (APPEND _TMP_CURRENT_DEPS_LIST_ "${_NBL_DXC_CT_CURRENT_HANDLED_INCLUDE_PATH_} " ) # add scanned include files as DEPENDS of a add_custom_command
679
- endforeach ()
680
-
681
- list (APPEND _NBL_DXC_CT_BIN_OUTPUTS_ "${_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_} " )
666
+ foreach (_NBL_DXC_CT_CURRENT_INPUT_SCAN_LINE_ IN LISTS _NBL_DXC_CT_INPUT_SCAN_INCLUDE_LINES_ )
667
+ string (REGEX MATCH "<.*>|\" .*\" " _TMP_INCLUDE_WITH_SHEATH_CHARS_ "${_NBL_DXC_CT_CURRENT_INPUT_SCAN_LINE_} " )
668
+ string (REGEX REPLACE <|>|\" "" _TMP_INCLUDE_WITHOUT_SHEATH_CHARS_ "${_TMP_INCLUDE_WITH_SHEATH_CHARS_} " )
669
+
670
+ set (_NBL_DXC_CT_CURRENT_HANDLED_INCLUDE_PATH_ "${_NBL_DXC_CT_INCLUDE_ROOT_} /${_TMP_INCLUDE_WITHOUT_SHEATH_CHARS_} " )
682
671
683
- add_custom_command (
684
- OUTPUT "${_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_} "
685
- COMMAND "${_NBL_DXC_CT_CURRENT_SHADER_COMPILE_FILEPATH_} "
686
- DEPENDS ${_TMP_CURRENT_DEPS_LIST_}
687
- WORKING_DIRECTORY "${_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_} "
688
- USES_TERMINAL
689
- VERBATIM
690
- )
672
+ if (NOT EXISTS "${_NBL_DXC_CT_CURRENT_HANDLED_INCLUDE_PATH_} " )
673
+ # NOTE: this won't work for shaders included that are registered on fly by asset manager, but let's assume we won't test shaders including another files stored in virtual file system
674
+ message (FATAL_ERROR "${_NBL_DXC_CT_PREFIX_CMAKE_LOG_DEBUG_} File '${_NBL_DXC_CT_CURRENT_HANDLED_INCLUDE_PATH_} ' included by '${_NBL_DXC_CT_CURRENT_ROOT_COMPILE_FILE_ISSUER_} ' doesn't exist!" )
675
+ endif ()
691
676
692
- unset (_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_ )
693
- unset (_NBL_DXC_CT_CURRENT_SHADER_COMPILE_FILEPATH_ )
694
- unset (_TMP_CURRENT_DEPS_LIST_ )
677
+ list (APPEND _TMP_CURRENT_DEPS_LIST_ "${_NBL_DXC_CT_CURRENT_HANDLED_INCLUDE_PATH_} " ) # add scanned include files as DEPENDS of a add_custom_command
695
678
endforeach ()
696
-
697
- add_custom_target (HLSL_NABLA_COMPILE_TEST DEPENDS ${_NBL_DXC_CT_BIN_OUTPUTS_}
698
- COMMENT "${CMAKE_COMMAND} " -E echo "Launching Nabla HLSL compile test..."
699
- )
700
679
701
- add_dependencies ( HLSL_NABLA_COMPILE_TEST dxc )
680
+ list ( APPEND _NBL_DXC_CT_BIN_OUTPUTS_ " ${_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_} " )
702
681
703
- unset (_NBL_DXC_CT_BIN_OUTPUTS_ )
704
- unset (_NBL_DXC_CT_BINARY_BIN_ )
705
- unset (_NBL_DXC_CT_SHADER_FILES_ )
706
- unset (_NBL_DXC_CT_INCLUDE_ROOT_ )
707
- endif ()
682
+ add_custom_command (
683
+ OUTPUT "${_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_} "
684
+ COMMAND "${_NBL_DXC_CT_CURRENT_SHADER_COMPILE_FILEPATH_} "
685
+ DEPENDS ${_TMP_CURRENT_DEPS_LIST_}
686
+ WORKING_DIRECTORY "${_NBL_DXC_CT_CURRENT_OUTPUT_BIN_DIR_} "
687
+ USES_TERMINAL
688
+ VERBATIM
689
+ )
690
+
691
+ unset (_NBL_DXC_CT_CURRENT_OUTPUT_FILEPATH_ )
692
+ unset (_NBL_DXC_CT_CURRENT_SHADER_COMPILE_FILEPATH_ )
693
+ unset (_TMP_CURRENT_DEPS_LIST_ )
694
+ endforeach ()
695
+
696
+ add_custom_target (HLSL_NABLA_COMPILE_TEST DEPENDS ${_NBL_DXC_CT_BIN_OUTPUTS_}
697
+ COMMENT "${CMAKE_COMMAND} " -E echo "Launching Nabla HLSL compile test..."
698
+ )
699
+
700
+ add_dependencies (HLSL_NABLA_COMPILE_TEST dxc )
708
701
702
+ unset (_NBL_DXC_CT_BIN_OUTPUTS_ )
703
+ unset (_NBL_DXC_CT_BINARY_BIN_ )
704
+ unset (_NBL_DXC_CT_SHADER_FILES_ )
705
+ unset (_NBL_DXC_CT_INCLUDE_ROOT_ )
709
706
endif ()
710
707
711
708
# Linux Display Systems
0 commit comments