2021-05-09 19:10:23 -04:00
|
|
|
# add custom command to output compiled shader
|
|
|
|
function(add_shader_command)
|
2022-02-21 18:07:22 -05:00
|
|
|
cmake_parse_arguments(ARGS "" "FILENAME;OUT;LANG" "" ${ARGN})
|
2020-08-11 12:07:21 -04:00
|
|
|
|
2021-05-09 19:10:23 -04:00
|
|
|
cmake_path(REMOVE_EXTENSION ARGS_FILENAME LAST_ONLY OUTPUT_VARIABLE FILENAME_WITHOUT_EXT)
|
2020-08-11 12:07:21 -04:00
|
|
|
|
2021-05-09 19:10:23 -04:00
|
|
|
set(SRC_FILENAME ${CMAKE_CURRENT_SOURCE_DIR}/${ARGS_FILENAME})
|
2022-02-21 18:07:22 -05:00
|
|
|
set(OUTPUT_FILENAME ${CMAKE_BINARY_DIR}/bin/${FILENAME_WITHOUT_EXT}.${ARGS_LANG})
|
|
|
|
|
|
|
|
message(${SRC_FILENAME})
|
|
|
|
message("new output filename " .. ${OUTPUT_FILENAME})
|
2021-05-09 19:10:23 -04:00
|
|
|
|
2022-02-20 22:51:05 -05:00
|
|
|
if(NEEDS_HOSTED_SHADER_COMPILER)
|
|
|
|
set(SHADER_COMPILER_COMMAND ${SHADER_COMPILER_LOCATION})
|
|
|
|
else()
|
|
|
|
set(SHADER_COMPILER_COMMAND $<TARGET_FILE:ShaderCompilerTool>)
|
|
|
|
endif()
|
|
|
|
|
2020-08-11 12:07:21 -04:00
|
|
|
add_custom_command(
|
2021-05-09 19:10:23 -04:00
|
|
|
OUTPUT ${OUTPUT_FILENAME}
|
2022-02-21 18:07:22 -05:00
|
|
|
COMMAND ${SHADER_COMPILER_COMMAND} ${SRC_FILENAME} ${OUTPUT_FILENAME} ${ARGS_LANG} ${EXTRA_PLATFORM_ARG}
|
2021-05-09 19:10:23 -04:00
|
|
|
DEPENDS ${SRC_FILENAME}
|
|
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/shaders)
|
2020-08-11 12:07:21 -04:00
|
|
|
|
2021-05-09 19:10:23 -04:00
|
|
|
# return the actual filename
|
|
|
|
set(${ARGS_OUT} ${OUTPUT_FILENAME} PARENT_SCOPE)
|
|
|
|
endfunction()
|
2020-08-11 12:07:21 -04:00
|
|
|
|
2021-05-09 19:10:23 -04:00
|
|
|
# add shaders to target
|
|
|
|
function(add_shaders)
|
2022-02-20 22:51:05 -05:00
|
|
|
cmake_parse_arguments(ARGS "" "TARGET" "SHADERS" ${ARGN})
|
2020-08-11 12:07:21 -04:00
|
|
|
|
2022-02-21 18:07:22 -05:00
|
|
|
foreach(SHADER_LANG ${SHADER_LANGUAGES})
|
|
|
|
message(${SHADER_LANG})
|
|
|
|
foreach(SHADER_FILENAME ${ARGS_SHADERS})
|
|
|
|
cmake_path(REMOVE_EXTENSION SHADER_FILENAME LAST_ONLY OUTPUT_VARIABLE FILENAME_WITHOUT_EXT)
|
|
|
|
|
|
|
|
# we want to remove the .nocompile extension just like the tool does, if it exists
|
|
|
|
cmake_path(GET FILENAME_WITHOUT_EXT EXTENSION LAST_ONLY LAST_EXT)
|
2020-08-11 12:07:21 -04:00
|
|
|
|
2022-02-21 18:07:22 -05:00
|
|
|
set(NEW_SHADER_LANG ${SHADER_LANG})
|
|
|
|
if(LAST_EXT STREQUAL ".nocompile")
|
|
|
|
set(NEW_SHADER_LANG glsl)
|
|
|
|
cmake_path(REPLACE_EXTENSION FILENAME_WITHOUT_EXT LAST_ONLY glsl)
|
|
|
|
endif()
|
2020-09-22 16:21:35 -04:00
|
|
|
|
2022-02-21 18:07:22 -05:00
|
|
|
add_shader_command(FILENAME ${SHADER_FILENAME} OUT DST_FILENAME LANG ${NEW_SHADER_LANG})
|
|
|
|
|
|
|
|
list(APPEND SRC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/${SHADER_FILENAME})
|
|
|
|
list(APPEND DST_FILES ${DST_FILENAME})
|
|
|
|
endforeach()
|
2022-02-20 22:51:05 -05:00
|
|
|
endforeach()
|
2020-08-11 12:07:21 -04:00
|
|
|
|
2022-02-20 22:51:05 -05:00
|
|
|
if(NOT NEEDS_HOSTED_SHADER_COMPILER)
|
2021-05-09 19:10:23 -04:00
|
|
|
add_custom_target(BuildShaders DEPENDS ShaderCompilerTool ${DST_FILES})
|
2022-02-20 22:51:05 -05:00
|
|
|
else()
|
|
|
|
add_custom_target(BuildShaders DEPENDS ${DST_FILES})
|
2020-08-11 12:07:21 -04:00
|
|
|
endif()
|
2022-02-20 22:51:05 -05:00
|
|
|
|
|
|
|
add_dependencies(${ARGS_TARGET} BuildShaders)
|
2020-08-11 12:07:21 -04:00
|
|
|
endfunction()
|
2021-05-09 19:10:23 -04:00
|
|
|
|
|
|
|
# make the shader directory if it doesnt exist already
|
2022-02-21 18:07:22 -05:00
|
|
|
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bin/shaders)
|