File src/graphics/shaders/CMakeLists.txt changed (mode: 100644) (index 5171840..ad29e46) |
17 |
17 |
cmake_minimum_required(VERSION 3.5) |
cmake_minimum_required(VERSION 3.5) |
18 |
18 |
|
|
19 |
19 |
set(SPIRV_COMPILER "glslangValidator" CACHE |
set(SPIRV_COMPILER "glslangValidator" CACHE |
20 |
|
STRING "Path to glslangValidator, compiler from GLSL to SPIR-V") |
|
21 |
|
set(DST ${CMAKE_CURRENT_BINARY_DIR}) |
|
|
20 |
|
STRING "Path to glslangValidator, compiler from GLSL to SPIR-V" |
|
21 |
|
) |
|
22 |
|
set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}) |
|
23 |
|
set(BIN_DIR ${CMAKE_CURRENT_BINARY_DIR}) |
22 |
24 |
|
|
|
25 |
|
set(SHADER_SRC_PATHS) |
|
26 |
|
set(SHADER_SPV_PATHS) |
|
27 |
|
set(SHADER_OBJ_PATHS) |
|
28 |
|
|
|
29 |
|
#for template.h -> shader.h configuration: |
23 |
30 |
set(SHADERS_EXTERN "") |
set(SHADERS_EXTERN "") |
24 |
31 |
set(SHADERS_IDS "\n ") |
set(SHADERS_IDS "\n ") |
25 |
32 |
set(SHADERS_RARRAYS "\n ") |
set(SHADERS_RARRAYS "\n ") |
26 |
|
set(SHADER_LIBS) |
|
27 |
33 |
|
|
28 |
|
function(add_shader_extra NAME FORMAT NAME2 PARAMS) |
|
29 |
|
set(SHADER_IN ${NAME}.${FORMAT}) |
|
30 |
|
set(SHADER_SPV ${NAME}${NAME2}_${FORMAT}) |
|
31 |
|
set(SHADER_OBJ ${NAME}${NAME2}_${FORMAT}.o) |
|
|
34 |
|
function(add_shader NAME FORMAT) |
|
35 |
|
set(FUNC_ARGS ${ARGN}) |
|
36 |
|
list(LENGTH FUNC_ARGS FUNC_NARGS) |
|
37 |
|
if (${FUNC_NARGS} GREATER 0) |
|
38 |
|
list(GET FUNC_ARGS 0 ARGS) |
|
39 |
|
list(GET FUNC_ARGS 1 NAME_SUFFIX) |
|
40 |
|
endif() |
|
41 |
|
|
|
42 |
|
set(SHADER_SRC ${NAME}.${FORMAT}) |
|
43 |
|
set(SHADER_SPV ${NAME}${NAME_SUFFIX}_${FORMAT}) |
|
44 |
|
set(SHADER_OBJ ${NAME}${NAME_SUFFIX}_${FORMAT}.o) |
|
45 |
|
set(SHADER_SRC_PATH ${SRC_DIR}/${SHADER_SRC}) |
|
46 |
|
set(SHADER_SPV_PATH ${BIN_DIR}/${SHADER_SPV}) |
|
47 |
|
set(SHADER_OBJ_PATH ${BIN_DIR}/${SHADER_OBJ}) |
|
48 |
|
|
|
49 |
|
set(SHADER_SRC_PATHS "${SHADER_SRC_PATHS}${SHADER_SRC_PATH};" PARENT_SCOPE) |
|
50 |
|
set(SHADER_SPV_PATHS "${SHADER_SPV_PATHS}${SHADER_SPV_PATH};" PARENT_SCOPE) |
|
51 |
|
set(SHADER_OBJ_PATHS "${SHADER_OBJ_PATHS}${SHADER_OBJ_PATH};" PARENT_SCOPE) |
|
52 |
|
|
32 |
53 |
add_custom_command( |
add_custom_command( |
33 |
|
OUTPUT ${DST}/${SHADER_SPV} |
|
34 |
|
COMMAND ${SPIRV_COMPILER} -V ${SHADER_IN} -o ${DST}/${SHADER_SPV} ${PARAMS} |
|
35 |
|
DEPENDS ${SHADER_IN} |
|
36 |
|
COMMENT "Compiling shader ${SHADER_SPV}" |
|
37 |
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} |
|
|
54 |
|
COMMENT "Compiling shader: ${SHADER_SPV}." |
|
55 |
|
DEPENDS ${SHADER_SRC_PATH} |
|
56 |
|
COMMAND ${SPIRV_COMPILER} -V ${SHADER_SRC} -o ${SHADER_SPV_PATH} ${ARGS} |
|
57 |
|
OUTPUT ${SHADER_SPV_PATH} |
|
58 |
|
WORKING_DIRECTORY ${SRC_DIR} |
38 |
59 |
) |
) |
39 |
60 |
add_custom_command( |
add_custom_command( |
40 |
|
OUTPUT ${DST}/${SHADER_OBJ} |
|
|
61 |
|
COMMENT "Shader binary object: ${SHADER_OBJ}." |
|
62 |
|
DEPENDS ${SHADER_SPV_PATH} |
41 |
63 |
COMMAND ld -r -b binary ${SHADER_SPV} -o ${SHADER_OBJ} |
COMMAND ld -r -b binary ${SHADER_SPV} -o ${SHADER_OBJ} |
42 |
|
DEPENDS ${DST}/${SHADER_SPV} |
|
43 |
|
COMMENT "Making binary object from binary shader ${SHADER_OBJ}" |
|
44 |
|
WORKING_DIRECTORY ${DST} |
|
|
64 |
|
OUTPUT ${SHADER_OBJ_PATH} |
|
65 |
|
WORKING_DIRECTORY ${BIN_DIR} |
45 |
66 |
) |
) |
46 |
|
add_custom_target(${SHADER_OBJ}t ALL DEPENDS ${DST}/${SHADER_OBJ}) |
|
47 |
|
add_dependencies(JEN_GRAPHICS ${SHADER_OBJ}t) |
|
48 |
|
set(SHADER_LIBS ${SHADER_LIBS} ${DST}/${SHADER_OBJ} PARENT_SCOPE) |
|
49 |
|
set(SHADER_DECL ${SHADER_SPV}) |
|
|
67 |
|
|
50 |
68 |
set(SHADERS_EXTERN "${SHADERS_EXTERN}\ |
set(SHADERS_EXTERN "${SHADERS_EXTERN}\ |
51 |
|
extern const uint8_t _binary_${SHADER_DECL}_start[];\n\ |
|
52 |
|
extern const uint8_t _binary_${SHADER_DECL}_end[];\n" |
|
|
69 |
|
extern const uint8_t _binary_${SHADER_SPV}_start[];\n\ |
|
70 |
|
extern const uint8_t _binary_${SHADER_SPV}_end[];\n" |
53 |
71 |
PARENT_SCOPE |
PARENT_SCOPE |
54 |
72 |
) |
) |
55 |
73 |
set(SHADERS_IDS "${SHADERS_IDS}\ |
set(SHADERS_IDS "${SHADERS_IDS}\ |
56 |
|
${SHADER_DECL},\n " |
|
|
74 |
|
${SHADER_SPV},\n " |
57 |
75 |
PARENT_SCOPE |
PARENT_SCOPE |
58 |
76 |
) |
) |
59 |
77 |
set(SHADERS_RARRAYS "${SHADERS_RARRAYS}\ |
set(SHADERS_RARRAYS "${SHADERS_RARRAYS}\ |
60 |
|
{_binary_${SHADER_DECL}_start,_binary_${SHADER_DECL}_end},\n " |
|
|
78 |
|
{_binary_${SHADER_SPV}_start,_binary_${SHADER_SPV}_end},\n " |
61 |
79 |
PARENT_SCOPE |
PARENT_SCOPE |
62 |
80 |
) |
) |
63 |
81 |
endfunction() |
endfunction() |
64 |
|
macro(add_shader NAME FORMAT) |
|
65 |
|
add_shader_extra(${NAME} ${FORMAT} "" "") |
|
66 |
|
endmacro() |
|
67 |
82 |
|
|
|
83 |
|
add_shader(default vert) |
|
84 |
|
add_shader(default frag) |
|
85 |
|
add_shader(default vert "-DMIX_TEXTURES" "_terrain") |
|
86 |
|
add_shader(default frag "-DMIX_TEXTURES" "_terrain") |
68 |
87 |
add_shader(debug_normals vert) |
add_shader(debug_normals vert) |
69 |
88 |
add_shader(debug_normals geom) |
add_shader(debug_normals geom) |
70 |
89 |
add_shader(debug_normals frag) |
add_shader(debug_normals frag) |
71 |
|
add_shader(default vert) |
|
72 |
|
add_shader(default frag) |
|
73 |
|
add_shader_extra(default vert "_terrain" "-DMIX_TEXTURES") |
|
74 |
|
add_shader_extra(default frag "_terrain" "-DMIX_TEXTURES") |
|
75 |
90 |
add_shader(composition vert) |
add_shader(composition vert) |
76 |
91 |
add_shader(composition frag) |
add_shader(composition frag) |
77 |
92 |
add_shader(fonts vert) |
add_shader(fonts vert) |
|
... |
... |
add_shader(shadow_cube frag) |
82 |
97 |
add_shader(debug_depth_cube vert) |
add_shader(debug_depth_cube vert) |
83 |
98 |
add_shader(debug_depth_cube frag) |
add_shader(debug_depth_cube frag) |
84 |
99 |
|
|
85 |
|
configure_file(template.h ${CMAKE_CURRENT_SOURCE_DIR}/shaders.h) |
|
86 |
|
set(SHADER_LIBS ${SHADER_LIBS} PARENT_SCOPE) |
|
|
100 |
|
add_custom_target(JEN_GRAPHICS_SHADERS_SPV |
|
101 |
|
DEPENDS ${SHADER_SPV_PATHS} |
|
102 |
|
COMMENT "Compile shaders for graphics module." |
|
103 |
|
SOURCES ${SHADER_SRC_PATHS} |
|
104 |
|
) |
|
105 |
|
add_custom_target(JEN_GRAPHICS_SHADERS_OBJ |
|
106 |
|
DEPENDS ${SHADER_OBJ_PATHS} |
|
107 |
|
COMMENT "Creating obj files from shaders with ld linker for graphics module." |
|
108 |
|
) |
|
109 |
|
add_dependencies(JEN_GRAPHICS JEN_GRAPHICS_SHADERS_OBJ) |
|
110 |
|
|
|
111 |
|
configure_file(template.h ${SRC_DIR}/shaders.h) |
|
112 |
|
set(SHADER_LIBS ${SHADER_OBJ_PATHS} PARENT_SCOPE) |