shadPS4/src/video_core/host_shaders/StringShaderHeader.cmake
Vinicius Rangel f663176a5d
FidelityFX FSR implementation (#2624)
* host_shaders: support for includes

* video_core: add a simpler vulkan asserts

* video_core: refactored post processing pipeline to another file

* renderer_vulkan: add define param to compile shader utility

* video_core: fsr implementation

* devtools: show resolution & fsr state
2025-03-12 20:33:30 +02:00

40 lines
1.6 KiB
CMake

# SPDX-FileCopyrightText: 2020 yuzu Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
set(SOURCE_FILE ${CMAKE_ARGV3})
set(HEADER_FILE ${CMAKE_ARGV4})
set(INPUT_FILE ${CMAKE_ARGV5})
get_filename_component(CONTENTS_NAME ${SOURCE_FILE} NAME)
string(REPLACE "." "_" CONTENTS_NAME ${CONTENTS_NAME})
string(TOUPPER ${CONTENTS_NAME} CONTENTS_NAME)
# Function to recursively parse #include directives and replace them with file contents
function(parse_includes file_path output_content)
file(READ ${file_path} file_content)
# This regex includes \n at the begin to (hackish) avoid including comments
string(REGEX MATCHALL "\n#include +\"[^\"]+\"" includes "${file_content}")
set(parsed_content "${file_content}")
foreach (include_match ${includes})
string(REGEX MATCH "\"([^\"]+)\"" _ "${include_match}")
set(include_file ${CMAKE_MATCH_1})
get_filename_component(include_full_path "${file_path}" DIRECTORY)
set(include_full_path "${include_full_path}/${include_file}")
if (NOT EXISTS "${include_full_path}")
message(FATAL_ERROR "Included file not found: ${include_full_path} from ${file_path}")
endif ()
parse_includes("${include_full_path}" sub_content)
string(REPLACE "${include_match}" "\n${sub_content}" parsed_content "${parsed_content}")
endforeach ()
set(${output_content} "${parsed_content}" PARENT_SCOPE)
endfunction()
parse_includes("${SOURCE_FILE}" CONTENTS)
get_filename_component(OUTPUT_DIR ${HEADER_FILE} DIRECTORY)
file(MAKE_DIRECTORY ${OUTPUT_DIR})
configure_file(${INPUT_FILE} ${HEADER_FILE} @ONLY)