summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2020-12-30 01:29:04 -0300
committerGravatar ReinUsesLisp2020-12-30 01:29:07 -0300
commit95d156a1502ca46b8301e1527ad14db9790495e7 (patch)
tree3095da05bd8efc091bc9f817c5300807cbc67386 /src
parentMerge pull request #5247 from comex/xx-concepts (diff)
downloadyuzu-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.txt53
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 @@
1set(SHADER_SOURCES 1set(SHADER_FILES
2 opengl_present.frag 2 opengl_present.frag
3 opengl_present.vert 3 opengl_present.vert
4) 4)
5 5
6find_program(GLSLANGVALIDATOR "glslangValidator" REQUIRED)
7
8set(GLSL_FLAGS "")
9
6set(SHADER_INCLUDE ${CMAKE_CURRENT_BINARY_DIR}/include) 10set(SHADER_INCLUDE ${CMAKE_CURRENT_BINARY_DIR}/include)
7set(SHADER_DIR ${SHADER_INCLUDE}/video_core/host_shaders) 11set(SHADER_DIR ${SHADER_INCLUDE}/video_core/host_shaders)
8set(HOST_SHADERS_INCLUDE ${SHADER_INCLUDE} PARENT_SCOPE) 12set(HOST_SHADERS_INCLUDE ${SHADER_INCLUDE} PARENT_SCOPE)
@@ -10,27 +14,44 @@ set(HOST_SHADERS_INCLUDE ${SHADER_INCLUDE} PARENT_SCOPE)
10set(INPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/source_shader.h.in) 14set(INPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/source_shader.h.in)
11set(HEADER_GENERATOR ${CMAKE_CURRENT_SOURCE_DIR}/StringShaderHeader.cmake) 15set(HEADER_GENERATOR ${CMAKE_CURRENT_SOURCE_DIR}/StringShaderHeader.cmake)
12 16
13foreach(FILENAME IN ITEMS ${SHADER_SOURCES}) 17foreach(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()
29endforeach() 50endforeach()
30 51
31add_custom_target(host_shaders 52add_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)