From 8d660b6994d9388cafcef36b71defff57667104f Mon Sep 17 00:00:00 2001 From: Jakob Bornecrantz Date: Mon, 21 Mar 2022 22:42:27 +0000 Subject: [PATCH] cmake: Make it possible to select SPIR-V version to target --- cmake/SPIR-V.cmake | 35 +++++++++++++++---------------- src/xrt/compositor/CMakeLists.txt | 2 ++ 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/cmake/SPIR-V.cmake b/cmake/SPIR-V.cmake index 13218725e..3c6c2987d 100644 --- a/cmake/SPIR-V.cmake +++ b/cmake/SPIR-V.cmake @@ -7,30 +7,29 @@ if(NOT GLSLANGVALIDATOR_COMMAND) message(FATAL_ERROR "glslangValidator required - source maintained at https://github.com/KhronosGroup/glslang") endif() -# -# Generate a SPIR-V header file, with the given var name. Returns the header. -# -function(spirv_shader ret GLSL VAR) - set(HEADER "${CMAKE_CURRENT_BINARY_DIR}/${GLSL}.h") - set(GLSL "${CMAKE_CURRENT_SOURCE_DIR}/${GLSL}") - - add_custom_command( - OUTPUT ${HEADER} - COMMAND ${GLSLANGVALIDATOR_COMMAND} -V ${GLSL} --vn ${VAR} -o ${HEADER} - DEPENDS ${GLSL}) - - - set(${ret} "${HEADER}" PARENT_SCOPE) -endfunction(spirv_shader) - # # Generate SPIR-V header files from the arguments. Returns a list of headers. # function(spirv_shaders ret) + set(options) + set(oneValueArgs SPIRV_VERSION) + set(multiValueArgs SOURCES) + cmake_parse_arguments(_spirvshaders "${options}" "${oneValueArgs}" + "${multiValueArgs}" ${ARGN}) - foreach(GLSL ${ARGN}) + if(NOT _spirvshaders_SPIRV_VERSION) + set(_spirvshaders_SPIRV_VERSION 1.0) + endif() + + foreach(GLSL ${_spirvshaders_SOURCES}) string(MAKE_C_IDENTIFIER ${GLSL} IDENTIFIER) - spirv_shader(HEADER ${GLSL} ${IDENTIFIER}) + set(HEADER "${CMAKE_CURRENT_BINARY_DIR}/${GLSL}.h") + set(GLSL "${CMAKE_CURRENT_SOURCE_DIR}/${GLSL}") + + add_custom_command( + OUTPUT ${HEADER} + COMMAND ${GLSLANGVALIDATOR_COMMAND} -V --target-env spirv${_spirvshaders_SPIRV_VERSION} ${GLSL} --vn ${IDENTIFIER} -o ${HEADER} + DEPENDS ${GLSL}) list(APPEND HEADERS ${HEADER}) endforeach() diff --git a/src/xrt/compositor/CMakeLists.txt b/src/xrt/compositor/CMakeLists.txt index 5583bb660..09cec259c 100644 --- a/src/xrt/compositor/CMakeLists.txt +++ b/src/xrt/compositor/CMakeLists.txt @@ -91,6 +91,8 @@ endif() if(XRT_HAVE_VULKAN) spirv_shaders( SHADER_HEADERS + SPIRV_VERSION 1.0 # Currently targeting Vulkan 1.0 + SOURCES shaders/clear.comp shaders/distortion.comp shaders/distortion_timewarp.comp