3030#
3131# ===========================================================================
3232
33- find_package ( Vulkan REQUIRED COMPONENTS glslangValidator glslang )
34-
35- if ( NOT Vulkan_FOUND )
36- message ( FATAL_ERROR "Could NOT find libVulkan" )
37- endif ()
38-
39- set ( generatorPath ${CMAKE_SOURCE_DIR} /cmake/DaemonVulkan/VulkanHeaders/ )
40- set ( vulkanLoaderPath ${CMAKE_SOURCE_DIR} /src/engine/renderer-vulkan/VulkanLoader/vulkan/ )
41-
42- macro ( GenerateVulkanHeader target mode )
43- add_custom_command (
44- COMMAND ${PYTHON_EXECUTABLE} ${Python_EXECUTABLE} ${generatorPath} /genvk.py -registry ${generatorPath} /vk.xml -o ${vulkanLoaderPath} -apiname vulkan -mode ${mode} ${target} .h
45- DEPENDS
46- ${generatorPath} /vk.xml
47- ${generatorPath} /genvk.py
48- ${generatorPath} /reg.py
49- ${generatorPath} /generator.py
50- ${generatorPath} /cgenerator.py
51- OUTPUT
52- ${vulkanLoaderPath} /${target} .h
53- COMMENT "Generating Vulkan header: ${target} .h"
54- )
55- endmacro ()
56-
57- set ( vulkanHeaders
58- # vulkan_core
59- "vulkan_beta"
60- "vulkan_win32"
61- "vulkan_wayland"
62- "vulkan_xlib"
63- "vulkan_xlib_xrandr"
64- )
65-
66- function ( GenerateVulkanHeaders )
67- find_package ( Python REQUIRED )
68-
69- if ( EXISTS ${generatorPath} /vulkan_core.h )
70- configure_file ( ${vulkanLoaderPath} /vulkan_core.h ${generatorPath} /vulkan_core.h.tmp COPYONLY )
71- else ()
72- set ( REGENERATE )
73- endif ()
74-
75- foreach ( header ${vulkanHeaders} )
76- if ( EXISTS ${vulkanLoaderPath} /${header} .h )
77- configure_file ( ${vulkanLoaderPath} /${header} .h ${generatorPath} /${header} .h.tmp COPYONLY )
78- else ()
79- set ( REGENERATE )
80- endif ()
81- endforeach ()
82-
83- if ( REGENERATE OR ${generatorPath} /vk.xml IS_NEWER_THAN ${generatorPath} /vk.xml.tmp OR NOT EXISTS ${generatorPath} /vk.xml.tmp )
84- configure_file ( ${generatorPath} /vk.xml ${generatorPath} /vk.xml.tmp COPYONLY )
85-
86- GenerateVulkanHeader( "vulkan_core" "w" )
87-
88- foreach ( header ${vulkanHeaders} )
89- GenerateVulkanHeader( ${header} "a" )
90- endforeach ()
91-
92- add_custom_target (vht ALL
93- DEPENDS ${vulkanLoaderPath} /vulkan_core.h ${vulkanHeaders}
94- )
95- endif ()
96- endfunction ()
97-
98- function ( GenerateVulkanHeaders2 )
99- GenerateVulkanHeader( "vulkan_core" "w" )
100- GenerateVulkanHeader( "vulkan_beta" "a" )
101- GenerateVulkanHeader( "vulkan_win32" "a" )
102- GenerateVulkanHeader( "vulkan_wayland" "a" )
103- GenerateVulkanHeader( "vulkan_xlib" "a" )
104- GenerateVulkanHeader( "vulkan_xlib_xrandr" "a" )
105-
106- foreach ( header ${vulkanHeaders} )
107- GenerateVulkanHeader( ${header} "a" )
108- endforeach ()
109-
110- add_custom_target (vht ALL
111- DEPENDS ${vulkanLoaderPath} /vulkan_core.h ${vulkanHeaders}
112- )
113- endfunction ()
114-
115- # GenerateVulkanHeaders()
116-
11733option ( VULKAN_SPIRV_OUT "Output text SPIR-V files alongside the binary format." ON )
11834option ( VULKAN_SPIRV_OPTIMISE "Enable SPIR-V optimisations." ON )
11935option ( VULKAN_SPIRV_LTO "Enable link-time SPIR-V optimisations." ON )
12036
37+ set ( VULKAN_SPIRV_DEBUG "default" CACHE STRING "glslangValidator debug options (remove: g0, non-semantic: gV)" )
38+ set_property ( CACHE VULKAN_SPIRV_DEBUG PROPERTY STRINGS default remove non-semantic )
39+
12140if ( USE_VULKAN )
12241 add_executable ( VulkanShaderParser "${DAEMON_DIR} /cmake/DaemonVulkan/VulkanShaderParser.cpp" )
12342
@@ -131,17 +50,14 @@ if( USE_VULKAN )
13150 file ( MAKE_DIRECTORY ${DAEMON_GENERATED_DIR} /DaemonVulkan/GraphicsEngine/processed/ )
13251 file ( MAKE_DIRECTORY ${DAEMON_GENERATED_DIR} /DaemonVulkan/GraphicsEngine/spirv/ )
13352 file ( MAKE_DIRECTORY ${DAEMON_GENERATED_DIR} /DaemonVulkan/GraphicsEngine/bin/ )
134-
135- set ( VULKAN_SPIRV_DEBUG "default" CACHE STRING "glslangValidator debug options (remove: g0, non-semantic: gV)" )
136- set_property ( CACHE VULKAN_SPIRV_DEBUG PROPERTY STRINGS default remove non-semantic )
13753endif ()
13854
13955include ( DaemonEmbed )
14056
14157macro ( GenerateVulkanShaders target )
14258 # Pre-processing for #insert/#include
14359 foreach ( src IN LISTS graphicsEngineList )
144- set ( graphicsProcessedList ${graphicsProcessedList } ${src} )
60+ set ( graphicsEngineProcessedList ${graphicsEngineProcessedList } ${src} )
14561 list ( APPEND graphicsEngineOutputList ${GRAPHICS_ENGINE_PROCESSED_PATH} processed/${src} )
14662
14763 get_filename_component ( name "${src} " NAME_WE )
@@ -161,6 +77,10 @@ macro( GenerateVulkanShaders target )
16177 # glslangValidator
16278 find_program ( glslangV glslangValidator HINTS /usr/bin /usr/local/bin $ENV{VULKAN_SDK} /Bin/ $ENV{VULKAN_SDK} /Bin32/ )
16379
80+ if ( glslangV STREQUAL "glslangValidator-NOTFOUND" )
81+ message ( FATAL_ERROR "glslangValidator not found; make sure you have the Vulkan SDK installed" )
82+ endif ()
83+
16484 set ( spirvOptions --target -env vulkan1.3 --glsl-version 460 -e main -l -t )
16585
16686 if ( VULKAN_SPIRV_OUT )
@@ -184,10 +104,10 @@ macro( GenerateVulkanShaders target )
184104 endif ()
185105
186106 add_custom_command (
187- COMMAND VulkanShaderParser \"${glslangV} ${spirvOptions} \" ${spirvOut} ${graphicsProcessedList }
188- DEPENDS ${graphicsEngineIDEList}
107+ COMMAND VulkanShaderParser \"${glslangV} ${spirvOptions} \" ${spirvOut} ${graphicsEngineProcessedList }
108+ DEPENDS ${graphicsEngineIDEList} ${CMAKE_CURRENT_SOURCE_DIR} /cmake/DaemonVulkan.cmake
189109 OUTPUT ${graphicsEngineOutputList}
190- COMMENT "Generating Vulkan graphics engine : ${graphicsProcessedList } "
110+ COMMENT "Generating Vulkan Graphics Engine : ${graphicsEngineProcessedList } "
191111 )
192112
193113 add_custom_target ( VulkanShaderParserTarget ALL
@@ -217,10 +137,10 @@ macro( GenerateVulkanShaders target )
217137 list ( APPEND spirvBinList ${spirvBinPath} )
218138 endforeach ()
219139
220- GenerateEmbedFileH ( "${spirvBinList} " ${DAEMON_GENERATED_DIR} /DaemonVulkan/GraphicsEngine/spirv/spirv.h BINARY client-objects )
140+ GenerateEmbedFilesConstexpr ( "${spirvBinList} " ${DAEMON_GENERATED_DIR} /DaemonVulkan/GraphicsEngine/spirv/spirv.h BINARY client-objects )
221141
222142 add_custom_target ( VulkanShaderBin ALL
223- DEPENDS ${spirvBinList}
143+ DEPENDS ${spirvBinList} ${CMAKE_CURRENT_SOURCE_DIR} /cmake/DaemonVulkan.cmake
224144 )
225145
226146 target_sources ( ${target} PRIVATE ${graphicsEngineOutputList} )
0 commit comments