diff options
| author | 2020-12-30 01:29:04 -0300 | |
|---|---|---|
| committer | 2020-12-30 01:29:07 -0300 | |
| commit | 95d156a1502ca46b8301e1527ad14db9790495e7 (patch) | |
| tree | 3095da05bd8efc091bc9f817c5300807cbc67386 /src | |
| parent | Merge pull request #5247 from comex/xx-concepts (diff) | |
| download | yuzu-95d156a1502ca46b8301e1527ad14db9790495e7.tar.gz yuzu-95d156a1502ca46b8301e1527ad14db9790495e7.tar.xz yuzu-95d156a1502ca46b8301e1527ad14db9790495e7.zip | |
video_core/host_shaders: Add support for prebuilt SPIR-V shaders
Add support for building SPIR-V shaders from GLSL and generating headers
to include the text of those same GLSL shaders to consume from OpenGL.
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/host_shaders/CMakeLists.txt | 53 |
1 files changed, 37 insertions, 16 deletions
diff --git a/src/video_core/host_shaders/CMakeLists.txt b/src/video_core/host_shaders/CMakeLists.txt index c157724a9..ff20bc93b 100644 --- a/src/video_core/host_shaders/CMakeLists.txt +++ b/src/video_core/host_shaders/CMakeLists.txt | |||
| @@ -1,8 +1,12 @@ | |||
| 1 | set(SHADER_SOURCES | 1 | set(SHADER_FILES |
| 2 | opengl_present.frag | 2 | opengl_present.frag |
| 3 | opengl_present.vert | 3 | opengl_present.vert |
| 4 | ) | 4 | ) |
| 5 | 5 | ||
| 6 | find_program(GLSLANGVALIDATOR "glslangValidator" REQUIRED) | ||
| 7 | |||
| 8 | set(GLSL_FLAGS "") | ||
| 9 | |||
| 6 | set(SHADER_INCLUDE ${CMAKE_CURRENT_BINARY_DIR}/include) | 10 | set(SHADER_INCLUDE ${CMAKE_CURRENT_BINARY_DIR}/include) |
| 7 | set(SHADER_DIR ${SHADER_INCLUDE}/video_core/host_shaders) | 11 | set(SHADER_DIR ${SHADER_INCLUDE}/video_core/host_shaders) |
| 8 | set(HOST_SHADERS_INCLUDE ${SHADER_INCLUDE} PARENT_SCOPE) | 12 | set(HOST_SHADERS_INCLUDE ${SHADER_INCLUDE} PARENT_SCOPE) |
| @@ -10,27 +14,44 @@ set(HOST_SHADERS_INCLUDE ${SHADER_INCLUDE} PARENT_SCOPE) | |||
| 10 | set(INPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/source_shader.h.in) | 14 | set(INPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/source_shader.h.in) |
| 11 | set(HEADER_GENERATOR ${CMAKE_CURRENT_SOURCE_DIR}/StringShaderHeader.cmake) | 15 | set(HEADER_GENERATOR ${CMAKE_CURRENT_SOURCE_DIR}/StringShaderHeader.cmake) |
| 12 | 16 | ||
| 13 | foreach(FILENAME IN ITEMS ${SHADER_SOURCES}) | 17 | foreach(FILENAME IN ITEMS ${SHADER_FILES}) |
| 14 | string(REPLACE "." "_" SHADER_NAME ${FILENAME}) | 18 | string(REPLACE "." "_" SHADER_NAME ${FILENAME}) |
| 15 | set(SOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/${FILENAME}) | 19 | set(SOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/${FILENAME}) |
| 16 | set(HEADER_FILE ${SHADER_DIR}/${SHADER_NAME}.h) | 20 | # Skip generating source headers on Vulkan exclusive files |
| 17 | add_custom_command( | 21 | if (NOT ${FILENAME} MATCHES "vulkan.*") |
| 18 | OUTPUT | 22 | set(SOURCE_HEADER_FILE ${SHADER_DIR}/${SHADER_NAME}.h) |
| 19 | ${HEADER_FILE} | 23 | add_custom_command( |
| 20 | COMMAND | 24 | OUTPUT |
| 21 | ${CMAKE_COMMAND} -P ${HEADER_GENERATOR} ${SOURCE_FILE} ${HEADER_FILE} ${INPUT_FILE} | 25 | ${SOURCE_HEADER_FILE} |
| 22 | MAIN_DEPENDENCY | 26 | COMMAND |
| 23 | ${SOURCE_FILE} | 27 | ${CMAKE_COMMAND} -P ${HEADER_GENERATOR} ${SOURCE_FILE} ${SOURCE_HEADER_FILE} ${INPUT_FILE} |
| 24 | DEPENDS | 28 | MAIN_DEPENDENCY |
| 25 | ${INPUT_FILE} | 29 | ${SOURCE_FILE} |
| 26 | # HEADER_GENERATOR should be included here but msbuild seems to assume it's always modified | 30 | DEPENDS |
| 27 | ) | 31 | ${INPUT_FILE} |
| 28 | set(SHADER_HEADERS ${SHADER_HEADERS} ${HEADER_FILE}) | 32 | # HEADER_GENERATOR should be included here but msbuild seems to assume it's always modified |
| 33 | ) | ||
| 34 | set(SHADER_HEADERS ${SHADER_HEADERS} ${SOURCE_HEADER_FILE}) | ||
| 35 | endif() | ||
| 36 | # Skip compiling to SPIR-V OpenGL exclusive files | ||
| 37 | if (NOT ${FILENAME} MATCHES "opengl.*") | ||
| 38 | string(TOUPPER ${SHADER_NAME}_SPV SPIRV_VARIABLE_NAME) | ||
| 39 | set(SPIRV_HEADER_FILE ${SHADER_DIR}/${SHADER_NAME}_spv.h) | ||
| 40 | add_custom_command( | ||
| 41 | OUTPUT | ||
| 42 | ${SPIRV_HEADER_FILE} | ||
| 43 | COMMAND | ||
| 44 | ${GLSLANGVALIDATOR} -V ${GLSL_FLAGS} --variable-name ${SPIRV_VARIABLE_NAME} -o ${SPIRV_HEADER_FILE} ${SOURCE_FILE} | ||
| 45 | MAIN_DEPENDENCY | ||
| 46 | ${SOURCE_FILE} | ||
| 47 | ) | ||
| 48 | set(SHADER_HEADERS ${SHADER_HEADERS} ${SPIRV_HEADER_FILE}) | ||
| 49 | endif() | ||
| 29 | endforeach() | 50 | endforeach() |
| 30 | 51 | ||
| 31 | add_custom_target(host_shaders | 52 | add_custom_target(host_shaders |
| 32 | DEPENDS | 53 | DEPENDS |
| 33 | ${SHADER_HEADERS} | 54 | ${SHADER_HEADERS} |
| 34 | SOURCES | 55 | SOURCES |
| 35 | ${SHADER_SOURCES} | 56 | ${SHADER_FILES} |
| 36 | ) | 57 | ) |