1
+ nbl_create_executable_project ("" "" "" "" "${NBL_EXECUTABLE_PROJECT_CREATION_PCH_TARGET} " )
1
2
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" )
6
9
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