forked from suyu/suyu
932c0184a7
yuzu requires CMake 3.15 yet find_program was using REQUIRED, which is only available on 3.18 and later. Instead, we check for "<VAR>-NOTFOUND". In addition, check for additional requirements before building libusb or FFmpeg with autotools. Otherwise, CMake configuration will pass yet compilation will fail.
93 lines
3.1 KiB
CMake
93 lines
3.1 KiB
CMake
set(SHADER_FILES
|
|
astc_decoder.comp
|
|
block_linear_unswizzle_2d.comp
|
|
block_linear_unswizzle_3d.comp
|
|
convert_depth_to_float.frag
|
|
convert_float_to_depth.frag
|
|
full_screen_triangle.vert
|
|
opengl_copy_bc4.comp
|
|
opengl_copy_bgra.comp
|
|
opengl_present.frag
|
|
opengl_present.vert
|
|
pitch_unswizzle.comp
|
|
vulkan_blit_color_float.frag
|
|
vulkan_blit_depth_stencil.frag
|
|
vulkan_present.frag
|
|
vulkan_present.vert
|
|
vulkan_quad_indexed.comp
|
|
vulkan_uint8.comp
|
|
)
|
|
|
|
find_program(GLSLANGVALIDATOR "glslangValidator")
|
|
if ("${GLSLANGVALIDATOR}" STREQUAL "GLSLANGVALIDATOR-NOTFOUND")
|
|
message(FATAL_ERROR "Required program `glslangValidator` not found.")
|
|
endif()
|
|
|
|
set(GLSL_FLAGS "")
|
|
set(QUIET_FLAG "--quiet")
|
|
|
|
set(SHADER_INCLUDE ${CMAKE_CURRENT_BINARY_DIR}/include)
|
|
set(SHADER_DIR ${SHADER_INCLUDE}/video_core/host_shaders)
|
|
set(HOST_SHADERS_INCLUDE ${SHADER_INCLUDE} PARENT_SCOPE)
|
|
|
|
set(INPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/source_shader.h.in)
|
|
set(HEADER_GENERATOR ${CMAKE_CURRENT_SOURCE_DIR}/StringShaderHeader.cmake)
|
|
|
|
# Check if `--quiet` is available on host's glslangValidator version
|
|
# glslangValidator prints to STDERR iff an unrecognized flag is passed to it
|
|
execute_process(
|
|
COMMAND
|
|
${GLSLANGVALIDATOR} ${QUIET_FLAG}
|
|
ERROR_VARIABLE
|
|
GLSLANG_ERROR
|
|
# STDOUT variable defined to silence unnecessary output during CMake configuration
|
|
OUTPUT_VARIABLE
|
|
GLSLANG_OUTPUT
|
|
)
|
|
|
|
if (NOT GLSLANG_ERROR STREQUAL "")
|
|
message(WARNING "Refusing to use unavailable flag `${QUIET_FLAG}` on `${GLSLANGVALIDATOR}`")
|
|
set(QUIET_FLAG "")
|
|
endif()
|
|
|
|
foreach(FILENAME IN ITEMS ${SHADER_FILES})
|
|
string(REPLACE "." "_" SHADER_NAME ${FILENAME})
|
|
set(SOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/${FILENAME})
|
|
# Skip generating source headers on Vulkan exclusive files
|
|
if (NOT ${FILENAME} MATCHES "vulkan.*")
|
|
set(SOURCE_HEADER_FILE ${SHADER_DIR}/${SHADER_NAME}.h)
|
|
add_custom_command(
|
|
OUTPUT
|
|
${SOURCE_HEADER_FILE}
|
|
COMMAND
|
|
${CMAKE_COMMAND} -P ${HEADER_GENERATOR} ${SOURCE_FILE} ${SOURCE_HEADER_FILE} ${INPUT_FILE}
|
|
MAIN_DEPENDENCY
|
|
${SOURCE_FILE}
|
|
DEPENDS
|
|
${INPUT_FILE}
|
|
# HEADER_GENERATOR should be included here but msbuild seems to assume it's always modified
|
|
)
|
|
set(SHADER_HEADERS ${SHADER_HEADERS} ${SOURCE_HEADER_FILE})
|
|
endif()
|
|
# Skip compiling to SPIR-V OpenGL exclusive files
|
|
if (NOT ${FILENAME} MATCHES "opengl.*")
|
|
string(TOUPPER ${SHADER_NAME}_SPV SPIRV_VARIABLE_NAME)
|
|
set(SPIRV_HEADER_FILE ${SHADER_DIR}/${SHADER_NAME}_spv.h)
|
|
add_custom_command(
|
|
OUTPUT
|
|
${SPIRV_HEADER_FILE}
|
|
COMMAND
|
|
${GLSLANGVALIDATOR} -V ${QUIET_FLAG} ${GLSL_FLAGS} --variable-name ${SPIRV_VARIABLE_NAME} -o ${SPIRV_HEADER_FILE} ${SOURCE_FILE}
|
|
MAIN_DEPENDENCY
|
|
${SOURCE_FILE}
|
|
)
|
|
set(SHADER_HEADERS ${SHADER_HEADERS} ${SPIRV_HEADER_FILE})
|
|
endif()
|
|
endforeach()
|
|
|
|
add_custom_target(host_shaders
|
|
DEPENDS
|
|
${SHADER_HEADERS}
|
|
SOURCES
|
|
${SHADER_FILES}
|
|
)
|