Skip to content

Commit dcbc930

Browse files
committed
Fixes and clean-up for shader parser
1 parent c8a28fa commit dcbc930

2 files changed

Lines changed: 44 additions & 19 deletions

File tree

cmake/DaemonVulkan.cmake

Lines changed: 37 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -114,40 +114,61 @@ endfunction()
114114

115115
# GenerateVulkanHeaders()
116116

117-
add_executable( VulkanShaderParser "${DAEMON_DIR}/cmake/DaemonVulkan/VulkanShaderParser.cpp" )
118-
119-
set( GRAPHICS_ENGINE_PATH ${DAEMON_DIR}/src/engine/renderer-vulkan/GraphicsEngine/ )
120-
set( GRAPHICS_ENGINE_PROCESSED_PATH ${DAEMON_GENERATED_DIR}/DaemonVulkan/GraphicsEngine/ )
121-
target_compile_definitions( VulkanShaderParser PRIVATE "-DDAEMON_VULKAN_GRAPHICS_ENGINE_PATH=\"${GRAPHICS_ENGINE_PATH}\"" )
122-
target_compile_definitions( VulkanShaderParser PRIVATE "-DDAEMON_VULKAN_GRAPHICS_ENGINE_PROCESSED_PATH=\"${GRAPHICS_ENGINE_PROCESSED_PATH}\"" )
123-
124-
file( MAKE_DIRECTORY ${GRAPHICS_ENGINE_PROCESSED_PATH} )
125-
126-
option( VULKAN_SPIRV_OUT "Output human-readable SPIR-V files alongside the binary format." ON )
117+
option( VULKAN_SPIRV_OUT "Output text SPIR-V files alongside the binary format." ON )
127118
option( VULKAN_SPIRV_OPTIMISE "Enable SPIR-V optimisations." ON )
128119
option( VULKAN_SPIRV_LTO "Enable link-time SPIR-V optimisations." ON )
129120

130-
set( VULKAN_SPIRV_DEBUG "default" CACHE STRING "glslangValidator debug options (remove: g0, non-semantic: gV)")
131-
set_property( CACHE VULKAN_SPIRV_DEBUG PROPERTY STRINGS default remove non-semantic )
121+
if( USE_VULKAN )
122+
add_executable( VulkanShaderParser "${DAEMON_DIR}/cmake/DaemonVulkan/VulkanShaderParser.cpp" )
132123

133-
include( DaemonEmbed )
124+
set( GRAPHICS_ENGINE_PATH ${DAEMON_DIR}/src/engine/renderer-vulkan/GraphicsEngine/ )
125+
set( GRAPHICS_ENGINE_PROCESSED_PATH ${DAEMON_GENERATED_DIR}/DaemonVulkan/GraphicsEngine/ )
126+
target_compile_definitions( VulkanShaderParser PRIVATE "-DDAEMON_VULKAN_GRAPHICS_ENGINE_PATH=\"${GRAPHICS_ENGINE_PATH}\"" )
127+
target_compile_definitions( VulkanShaderParser PRIVATE "-DDAEMON_VULKAN_GRAPHICS_ENGINE_PROCESSED_PATH=\"${GRAPHICS_ENGINE_PROCESSED_PATH}\"" )
134128

135-
macro( GenerateVulkanShaders target )
129+
file( MAKE_DIRECTORY ${GRAPHICS_ENGINE_PROCESSED_PATH} )
130+
136131
file( MAKE_DIRECTORY ${DAEMON_GENERATED_DIR}/DaemonVulkan/GraphicsEngine/processed/ )
137132
file( MAKE_DIRECTORY ${DAEMON_GENERATED_DIR}/DaemonVulkan/GraphicsEngine/spirv/ )
138133
file( MAKE_DIRECTORY ${DAEMON_GENERATED_DIR}/DaemonVulkan/GraphicsEngine/bin/ )
139134

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 )
137+
endif()
138+
139+
include( DaemonEmbed )
140+
141+
macro( GenerateVulkanShaders target )
140142
# Pre-processing for #insert/#include
141143
foreach( src IN LISTS graphicsEngineList )
142144
set( graphicsProcessedList ${graphicsProcessedList} ${src} )
143145
list( APPEND graphicsEngineOutputList ${GRAPHICS_ENGINE_PROCESSED_PATH}processed/${src} )
146+
147+
get_filename_component( name "${src}" NAME_WE )
148+
149+
if( VULKAN_SPIRV_OUT )
150+
set( spirvAsmPath ${DAEMON_GENERATED_DIR}/DaemonVulkan/GraphicsEngine/spirv/${name}.spirv )
151+
endif()
152+
153+
set( spirvBinPath ${DAEMON_GENERATED_DIR}/DaemonVulkan/GraphicsEngine/bin/${name}.spirvBin )
154+
155+
list( APPEND graphicsEngineOutputList ${spirvAsmPath} )
156+
list( APPEND graphicsEngineOutputList ${spirvBinPath} )
144157
endforeach()
158+
159+
list( APPEND graphicsEngineOutputList ${DAEMON_GENERATED_DIR}/DaemonVulkan/GraphicsEngine/spirv/spirv.h )
145160

146161
# glslangValidator
147162
find_program( glslangV glslangValidator HINTS /usr/bin /usr/local/bin $ENV{VULKAN_SDK}/Bin/ $ENV{VULKAN_SDK}/Bin32/ )
148163

149164
set( spirvOptions --target-env vulkan1.3 --glsl-version 460 -e main -l -t )
150165

166+
if( VULKAN_SPIRV_OUT )
167+
set( spirvOut "ON" )
168+
else()
169+
set( spirvOut "OFF" )
170+
endif()
171+
151172
if( NOT VULKAN_SPIRV_OPTIMISE )
152173
set( spirvOptions ${spirvOptions} -Od )
153174
endif()
@@ -163,7 +184,7 @@ macro( GenerateVulkanShaders target )
163184
endif()
164185

165186
add_custom_command(
166-
COMMAND VulkanShaderParser \"${glslangV} ${spirvOptions}\" ${graphicsProcessedList}
187+
COMMAND VulkanShaderParser \"${glslangV} ${spirvOptions}\" ${spirvOut} ${graphicsProcessedList}
167188
DEPENDS ${graphicsEngineIDEList}
168189
OUTPUT ${graphicsEngineOutputList}
169190
COMMENT "Generating Vulkan graphics engine: ${graphicsProcessedList}"
@@ -182,8 +203,7 @@ macro( GenerateVulkanShaders target )
182203
183204
set( spirvAsmPath ${DAEMON_GENERATED_DIR}/DaemonVulkan/GraphicsEngine/spirv/${name}.spirv )
184205
185-
set( spirvBinPath ${DAEMON_GENERATED_DIR}/DaemonVulkan/GraphicsEngine/bin/${src} )
186-
string( REGEX REPLACE "[.]glsl$" ".spirvBin" spirvBinPath ${spirvBinPath} )
206+
set( spirvBinPath ${DAEMON_GENERATED_DIR}/DaemonVulkan/GraphicsEngine/bin/${name}.spirvBin )
187207
188208
list( POP_FRONT stagesList stage )
189209

cmake/DaemonVulkan/VulkanShaderParser.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,9 @@ int main( int argc, char** argv ) {
169169

170170
const std::string baseSpirvOptions = argv[1];
171171

172-
for( int i = 2; i < argc; i++ ) {
172+
const bool spirvAsm = !stricmp( argv[2], "ON" );
173+
174+
for( int i = 3; i < argc; i++ ) {
173175
std::string path = argv[i];
174176

175177
FILE* glslSource = fopen( ( graphicsEnginePath + path ).c_str(), "r" );
@@ -224,7 +226,10 @@ int main( int argc, char** argv ) {
224226
fclose( glslSource );
225227
fclose( processedGLSL );
226228

227-
spirvOptions += " -V " + srcPath + name + " -o " + spirvBinPath + nameNoExt + ".spirvBin -H > " + spirvPath + name + ".spirv";
229+
spirvOptions += " -V " + srcPath + name + " -o " + spirvBinPath + nameNoExt + ".spirvBin";
230+
if ( spirvAsm ) {
231+
spirvOptions += " -H > " + spirvPath + nameNoExt + ".spirv";
232+
}
228233

229234
int r = system( spirvOptions.c_str() );
230235

0 commit comments

Comments
 (0)