1+ nbl_create_executable_project("" "" "" "" "${NBL_EXECUTABLE_PROJECT_CREATION_PCH_TARGET} " )
12
2- include (common RESULT_VARIABLE RES)
3- if (NOT RES)
4- message (FATAL_ERROR "common.cmake not found. Should be in {repo_root}/cmake directory" )
5- endif ()
3+ # shaders IO directories
4+ set (NBL_THIS_EXAMPLE_INPUT_SHADERS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR} /shaders" )
5+ get_filename_component (_THIS_EXAMPLE_SPIRV_BR_BUNDLE_SEARCH_DIRECTORY_ "${CMAKE_CURRENT_BINARY_DIR} /shaders/include" ABSOLUTE )
6+ get_filename_component (_THIS_EXAMPLE_SPIRV_BR_OUTPUT_DIRECTORY_HEADER_ "${CMAKE_CURRENT_BINARY_DIR} /builtin/include" ABSOLUTE )
7+ get_filename_component (_THIS_EXAMPLE_SPIRV_BR_OUTPUT_DIRECTORY_SOURCE_ "${CMAKE_CURRENT_BINARY_DIR} /builtin/src" ABSOLUTE )
8+ set (NBL_THIS_EXAMPLE_OUTPUT_SPIRV_DIRECTORY "${_THIS_EXAMPLE_SPIRV_BR_BUNDLE_SEARCH_DIRECTORY_} /nbl/geometryCreator/spirv" )
69
7- nbl_create_executable_project("" "" "" "" "${NBL_EXECUTABLE_PROJECT_CREATION_PCH_TARGET} " )
10+ # list of input source shaders
11+ set (NBL_THIS_EXAMPLE_INPUT_SHADERS
12+ # geometry creator
13+ "${NBL_THIS_EXAMPLE_INPUT_SHADERS_DIRECTORY} /gc.basic.fragment.hlsl"
14+ "${NBL_THIS_EXAMPLE_INPUT_SHADERS_DIRECTORY} /gc.basic.vertex.hlsl"
15+ "${NBL_THIS_EXAMPLE_INPUT_SHADERS_DIRECTORY} /gc.cone.vertex.hlsl"
16+ "${NBL_THIS_EXAMPLE_INPUT_SHADERS_DIRECTORY} /gc.ico.vertex.hlsl"
17+
18+ # grid
19+ "${NBL_THIS_EXAMPLE_INPUT_SHADERS_DIRECTORY} /grid.vertex.hlsl"
20+ "${NBL_THIS_EXAMPLE_INPUT_SHADERS_DIRECTORY} /grid.fragment.hlsl"
21+ )
22+
23+ file (GLOB_RECURSE NBL_THIS_EXAMPLE_INPUT_COMMONS CONFIGURE_DEPENDS "${NBL_THIS_EXAMPLE_INPUT_SHADERS_DIRECTORY} /template/*.hlsl" )
24+
25+ include ("${NBL_ROOT_PATH} /src/nbl/builtin/utils.cmake" )
26+
27+ foreach (NBL_INPUT_SHADER IN LISTS NBL_THIS_EXAMPLE_INPUT_SHADERS)
28+ cmake_path(GET NBL_INPUT_SHADER FILENAME NBL_INPUT_SHADER_FILENAME)
29+ cmake_path(GET NBL_INPUT_SHADER_FILENAME STEM LAST_ONLY NBL_SHADER_STEM) # filename without .hlsl extension
30+ cmake_path(GET NBL_SHADER_STEM EXTENSION LAST_ONLY NBL_SHADER_TYPE) # .<shader type>
31+
32+ set (NBL_OUTPUT_SPIRV_FILENAME "${NBL_SHADER_STEM} .spv" )
33+ set (NBL_OUTPUT_SPIRV_PATH "${NBL_THIS_EXAMPLE_OUTPUT_SPIRV_DIRECTORY} /${NBL_OUTPUT_SPIRV_FILENAME} " )
34+
35+ if (NBL_SHADER_TYPE STREQUAL .vertex)
36+ set (NBL_NSC_COMPILE_OPTIONS -T vs_6_7 -E VSMain)
37+ elseif (NBL_SHADER_TYPE STREQUAL .fragment)
38+ set (NBL_NSC_COMPILE_OPTIONS -T ps_6_7 -E PSMain)
39+ else ()
40+ message (FATAL_ERROR "Input shader is supposed to be <name>.<shader type>.hlsl!" )
41+ endif ()
42+
43+ set (NBL_NSC_COMPILE_COMMAND
44+ "$<TARGET_FILE:nsc>"
45+ -Fc "${NBL_OUTPUT_SPIRV_PATH} "
46+ ${NBL_NSC_COMPILE_OPTIONS} # this should come from shader's [#pragma WAVE <compile options>] but our NSC doesn't seem to work properly currently
47+ "${NBL_INPUT_SHADER} "
48+ )
49+
50+ set (NBL_DEPENDS
51+ "${NBL_INPUT_SHADER} "
52+ ${NBL_THIS_EXAMPLE_INPUT_COMMONS}
53+ )
54+
55+ add_custom_command (OUTPUT "${NBL_OUTPUT_SPIRV_PATH} "
56+ COMMAND ${NBL_NSC_COMPILE_COMMAND}
57+ DEPENDS ${NBL_DEPENDS}
58+ WORKING_DIRECTORY "${NBL_THIS_EXAMPLE_INPUT_SHADERS_DIRECTORY} "
59+ COMMENT "Generating \" ${NBL_OUTPUT_SPIRV_PATH} \" "
60+ VERBATIM
61+ COMMAND_EXPAND_LISTS
62+ )
63+
64+ list (APPEND NBL_THIS_EXAMPLE_OUTPUT_SPIRV_BUILTINS "${NBL_OUTPUT_SPIRV_PATH} " )
65+ LIST_BUILTIN_RESOURCE(IMGUI_EXT_SPIRV_RESOURCES_TO_EMBED "geometryCreator/spirv/${NBL_OUTPUT_SPIRV_FILENAME} " )
66+ endforeach ()
67+
68+ ADD_CUSTOM_BUILTIN_RESOURCES(extGizmoSpirvBuiltinResourceData IMGUI_EXT_SPIRV_RESOURCES_TO_EMBED "${_THIS_EXAMPLE_SPIRV_BR_BUNDLE_SEARCH_DIRECTORY_} " "nbl" "this_example::spirv::builtin" "${_THIS_EXAMPLE_SPIRV_BR_OUTPUT_DIRECTORY_HEADER_} " "${_THIS_EXAMPLE_SPIRV_BR_OUTPUT_DIRECTORY_SOURCE_} " "STATIC" "INTERNAL" )
69+ LINK_BUILTIN_RESOURCES_TO_TARGET(${EXECUTABLE_NAME} extGizmoSpirvBuiltinResourceData)
0 commit comments