@@ -64,60 +64,43 @@ find_program(SLANGC_EXECUTABLE slangc HINTS $ENV{VULKAN_SDK}/bin REQUIRED)
6464function (add_shaders_target TARGET )
6565 cmake_parse_arguments ("SHADER" "" "CHAPTER_NAME" "SOURCES" ${ARGN} )
6666 set (SHADERS_DIR ${SHADER_CHAPTER_NAME} /shaders)
67- set (SHADERS_FULL_DIR ${CMAKE_CURRENT_BINARY_DIR} /${SHADERS_DIR} )
6867 add_custom_command (
69- OUTPUT ${SHADERS_FULL_DIR }
70- COMMAND ${CMAKE_COMMAND} -E make_directory ${SHADERS_FULL_DIR }
68+ OUTPUT ${SHADERS_DIR }
69+ COMMAND ${CMAKE_COMMAND} -E make_directory ${SHADERS_DIR }
7170 )
72- # Create a list to store the output files
73- set (SHADER_OUTPUTS "" )
74-
75- # Create separate commands for each shader file to ensure they are compiled to the correct location
76- foreach (SHADER_SOURCE ${SHADER_SOURCES} )
77- get_filename_component (SHADER_NAME ${SHADER_SOURCE} NAME_WE )
78- get_filename_component (SHADER_EXT ${SHADER_SOURCE} EXT )
79- string (REPLACE "." "" SHADER_EXT ${SHADER_EXT} )
80-
81- # Add the output file to the list
82- list (APPEND SHADER_OUTPUTS ${SHADERS_FULL_DIR} /${SHADER_EXT} .spv)
83-
84- add_custom_command (
85- OUTPUT ${SHADERS_FULL_DIR} /${SHADER_EXT} .spv
86- COMMAND glslang::validator
87- ARGS --target -env vulkan1.0 ${SHADER_SOURCE} --quiet -o ${SHADERS_FULL_DIR} /${SHADER_EXT} .spv
88- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
89- DEPENDS ${SHADERS_FULL_DIR} ${SHADER_SOURCE}
90- COMMENT "Compiling ${SHADER_EXT} Shader"
91- VERBATIM
71+ add_custom_command (
72+ OUTPUT ${SHADERS_DIR} /frag.spv ${SHADERS_DIR} /vert.spv
73+ COMMAND glslang::validator
74+ ARGS --target -env vulkan1.0 ${SHADER_SOURCES} --quiet
75+ WORKING_DIRECTORY ${SHADERS_DIR}
76+ DEPENDS ${SHADERS_DIR} ${SHADER_SOURCES}
77+ COMMENT "Compiling Shaders"
78+ VERBATIM
9279 )
93- endforeach ()
94-
95- # Create the custom target that depends on all output files
96- add_custom_target (${TARGET} DEPENDS ${SHADER_OUTPUTS} )
80+ add_custom_target (${TARGET} DEPENDS ${SHADERS_DIR} /frag.spv ${SHADERS_DIR} /vert.spv)
9781endfunction ()
9882
9983function (add_slang_shader_target TARGET )
10084 cmake_parse_arguments ("SHADER" "" "CHAPTER_NAME" "SOURCES" ${ARGN} )
10185 set (SHADERS_DIR ${SHADER_CHAPTER_NAME} /shaders)
102- set (SHADERS_FULL_DIR ${CMAKE_CURRENT_BINARY_DIR} /${SHADERS_DIR} )
10386 file (GLOB HAS_COMPUTE ${CHAPTER_SHADER} .comp)
10487 set (ENTRY_POINTS -entry vertMain -entry fragMain)
10588 if (HAS_COMPUTE)
10689 list (APPEND ENTRY_POINTS -entry compMain)
10790 endif ()
10891 add_custom_command (
109- OUTPUT ${SHADERS_FULL_DIR }
110- COMMAND ${CMAKE_COMMAND} -E make_directory ${SHADERS_FULL_DIR }
92+ OUTPUT ${SHADERS_DIR }
93+ COMMAND ${CMAKE_COMMAND} -E make_directory ${SHADERS_DIR }
11194 )
11295 add_custom_command (
113- OUTPUT ${SHADERS_FULL_DIR } /slang.spv
114- COMMAND ${CMAKE_COMMAND} -E make_directory ${SHADERS_FULL_DIR}
115- COMMAND ${SLANGC_EXECUTABLE} ${SHADER_SOURCES} - target spirv -profile spirv_1_4 -emit-spirv-directly -fvk-use-entrypoint- name ${ENTRY_POINTS} -o ${CMAKE_CURRENT_BINARY_DIR} / ${ SHADERS_DIR}/slang.spv
116- DEPENDS ${SHADER_SOURCES}
96+ OUTPUT ${SHADERS_DIR } /slang.spv
97+ COMMAND ${SLANGC_EXECUTABLE} ${SHADER_SOURCES} - target spirv -profile spirv_1_4 -emit-spirv-directly -fvk-use-entrypoint- name ${ENTRY_POINTS} -o slang.spv
98+ WORKING_DIRECTORY ${SHADERS_DIR}
99+ DEPENDS ${SHADERS_DIR} ${ SHADER_SOURCES}
117100 COMMENT "Compiling Slang Shaders"
118101 VERBATIM
119102 )
120- add_custom_target (${TARGET} DEPENDS ${SHADERS_FULL_DIR } /slang.spv)
103+ add_custom_target (${TARGET} DEPENDS ${SHADERS_DIR } /slang.spv)
121104endfunction ()
122105
123106function (add_chapter CHAPTER_NAME)
0 commit comments