1# vk - Vulkan utilites 2# Split into two libraries - one that depends on spirv/glslang libraries 3# which have long build times, and one that can build in parallel with those. 4 5include(CheckIncludeFileCXX) 6check_include_file_cxx( 7 ${CMAKE_SOURCE_DIR}/external/renderdoc/src/renderdoc_app.h 8 HAVE_RENDERDOC_APP_H) 9if(HAVE_RENDERDOC_APP_H) 10 set(VKRENDERDOC_SRC vkRenderDocUtil.cpp) 11else() 12 set(VKRENDERDOC_SRC vkNoRenderDocUtil.cpp) 13endif(HAVE_RENDERDOC_APP_H) 14 15 16# Build inl files 17set(DEQP_VULKAN_INL_GEN_INPUT ${PROJECT_SOURCE_DIR}/external/vulkan-docs/src/xml/vk.xml) 18set(DEQP_VULKAN_INL_GEN_OUTPUTS_DIR ${PROJECT_SOURCE_DIR}/external/vulkancts/framework/vulkan) 19set(DEQP_VULKAN_INL_GEN_OUTPUTS 20 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkApiExtensionDependencyInfo.inl 21 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkBasicTypes.inl 22 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkConcreteDeviceInterface.inl 23 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkConcreteInstanceInterface.inl 24 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkConcretePlatformInterface.inl 25 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkCoreFunctionalities.inl 26 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceDriverImpl.inl 27 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceExtensions.inl 28 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceFeatures.inl 29 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceFeatures2.inl 30 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceFeaturesForContextDecl.inl 31 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceFeaturesForContextDefs.inl 32 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceFeaturesForDefaultDeviceDefs.inl 33 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceFunctionPointers.inl 34 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceProperties.inl 35 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDevicePropertiesForContextDecl.inl 36 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDevicePropertiesForContextDefs.inl 37 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDevicePropertiesForDefaultDeviceDefs.inl 38 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkExtensionFunctions.inl 39 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkFunctionPointerTypes.inl 40 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkGetDeviceProcAddr.inl 41 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkGetStructureTypeImpl.inl 42 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkHandleType.inl 43 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkInitDeviceFunctionPointers.inl 44 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkInitInstanceFunctionPointers.inl 45 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkInitPlatformFunctionPointers.inl 46 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkInstanceDriverImpl.inl 47 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkInstanceExtensions.inl 48 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkInstanceFunctionPointers.inl 49 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkKnownDriverIds.inl 50 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkMandatoryFeatures.inl 51 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkNullDriverImpl.inl 52 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkObjTypeImpl.inl 53 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkPlatformDriverImpl.inl 54 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkPlatformFunctionPointers.inl 55 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkRefUtil.inl 56 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkRefUtilImpl.inl 57 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkStrUtil.inl 58 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkStrUtilImpl.inl 59 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkStructTypes.inl 60 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkSupportedExtensions.inl 61 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkTypeUtil.inl 62 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkVirtualDeviceInterface.inl 63 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkVirtualInstanceInterface.inl 64 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkVirtualPlatformInterface.inl 65 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkEntryPointValidation.inl 66 # NOTE: when new file is generated by gen_framework it should be added to this list. 67 ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkVulkan_c.inl) 68 69# If .inl files are generated to build directory add custom command that will build them. 70if (DEQP_VULKAN_INL_GEN_OUTPUTS_DIR MATCHES ^${PROJECT_BINARY_DIR}) 71 add_custom_command( 72 # Remove all outputs to help detect missing outputs. 73 COMMAND cmake -E remove ${DEQP_VULKAN_INL_GEN_OUTPUTS} 74 75 # Generate all inl files. 76 COMMAND ${PYTHON_EXECUTABLE} ARGS ${PROJECT_SOURCE_DIR}/external/vulkancts/scripts/gen_framework.py -o ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR} 77 COMMAND ${PYTHON_EXECUTABLE} ARGS ${PROJECT_SOURCE_DIR}/external/vulkancts/scripts/gen_framework_c.py -o ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR} 78 79 # Check all outputs exist, as CMake does not do this. 80 COMMAND cmake -E md5sum ${DEQP_VULKAN_INL_GEN_OUTPUTS} 81 82 DEPENDS ${DEQP_VULKAN_INL_GEN_INPUT} 83 OUTPUT ${DEQP_VULKAN_INL_GEN_OUTPUTS}) 84 85 add_custom_target( 86 deqp-vk-inl ALL 87 DEPENDS ${DEQP_VULKAN_INL_GEN_OUTPUTS}) 88else() 89 add_custom_target(deqp-vk-inl) 90endif() 91 92set(VKUTILNOSHADER_SRCS 93 vkApiVersion.cpp 94 vkApiVersion.hpp 95 vkAppParamsUtil.cpp 96 vkAppParamsUtil.hpp 97 vkBuilderUtil.cpp 98 vkBuilderUtil.hpp 99 vkBarrierUtil.cpp 100 vkBarrierUtil.hpp 101 vkCmdUtil.cpp 102 vkCmdUtil.hpp 103 vkDefs.cpp 104 vkDefs.hpp 105 vkRef.cpp 106 vkRef.hpp 107 vkRefUtil.cpp 108 vkRefUtil.hpp 109 vkPlatform.cpp 110 vkPlatform.hpp 111 vkStrUtil.cpp 112 vkStrUtil.hpp 113 vkQueryUtil.cpp 114 vkQueryUtil.hpp 115 vkMemUtil.cpp 116 vkMemUtil.hpp 117 vkDeviceUtil.cpp 118 vkDeviceUtil.hpp 119 vkBinaryRegistry.cpp 120 vkBinaryRegistry.hpp 121 vkNullDriver.cpp 122 vkNullDriver.hpp 123 vkImageUtil.cpp 124 vkImageUtil.hpp 125 vkTypeUtil.cpp 126 vkTypeUtil.hpp 127 vkAllocationCallbackUtil.cpp 128 vkAllocationCallbackUtil.hpp 129 vkWsiPlatform.cpp 130 vkWsiPlatform.hpp 131 vkWsiUtil.cpp 132 vkWsiUtil.hpp 133 vkDebugReportUtil.cpp 134 vkDebugReportUtil.hpp 135 vkBufferWithMemory.cpp 136 vkBufferWithMemory.hpp 137 vkImageWithMemory.cpp 138 vkImageWithMemory.hpp 139 vkImageWithMemory.cpp 140 vkImageWithMemory.hpp 141 vkShaderProgram.cpp 142 vkShaderProgram.hpp 143 vkValidatorOptions.hpp 144 vkYCbCrImageWithMemory.cpp 145 vkYCbCrImageWithMemory.hpp 146 vkObjUtil.cpp 147 vkObjUtil.hpp 148 ${VKRENDERDOC_SRC} 149 vkRenderDocUtil.hpp 150 vkDeviceFeatures.hpp 151 vkDeviceFeatures.cpp 152 vkDeviceProperties.hpp 153 vkDeviceProperties.cpp 154 vkRayTracingUtil.hpp 155 vkRayTracingUtil.cpp 156 vkPipelineConstructionUtil.hpp 157 vkPipelineConstructionUtil.cpp 158 vkSafetyCriticalUtil.hpp 159 vkSafetyCriticalUtil.cpp 160 vkResourceInterface.hpp 161 vkResourceInterface.cpp 162 vkMd5Sum.hpp 163 vkMd5Sum.cpp 164 vkComputePipelineConstructionUtil.hpp 165 vkComputePipelineConstructionUtil.cpp 166 vkShaderObjectUtil.hpp 167 vkShaderObjectUtil.cpp 168 ) 169 170set(VKUTILNOSHADER_INLS 171 generated/vulkan/vkDeviceFeatures.inl 172 generated/vulkan/vkDeviceFeatureTest.inl 173 generated/vulkan/vkDeviceProperties.inl 174 ) 175 176set(VKSCUTILNOSHADER_INLS 177 generated/vulkansc/vkDeviceFeatures.inl 178 generated/vulkansc/vkDeviceFeatureTest.inl 179 generated/vulkansc/vkDeviceProperties.inl 180 generated/vulkansc/vulkan_json_data.hpp 181 generated/vulkansc/vulkan_json_parser.hpp 182 ) 183 184set(VKUTIL_SRCS 185 vkPrograms.cpp 186 vkPrograms.hpp 187 vkShaderToSpirV.cpp 188 vkShaderToSpirV.hpp 189 vkSpirVAsm.hpp 190 vkSpirVAsm.cpp 191 vkSpirVProgram.hpp 192 vkSpirVProgram.cpp 193 ) 194 195set(VKUTILNOSHADER_LIBS 196 glutil 197 tcutil 198 ) 199 200include_directories(${GLSLANG_INCLUDE_PATH}) 201include_directories(${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}) 202 203# \note Code interfacing with glslang needs to include third-party headers 204# that cause all sorts of warnings to appear. 205if (DE_COMPILER_IS_GCC OR DE_COMPILER_IS_CLANG) 206 set_source_files_properties( 207 FILES vkShaderToSpirV.cpp 208 PROPERTIES COMPILE_FLAGS "${DE_3RD_PARTY_CXX_FLAGS}") 209endif () 210 211 212# \note Code interfacing with spirv-opt needs to include third-party headers 213# that cause all sorts of warnings to appear. 214if (DE_COMPILER_IS_GCC OR DE_COMPILER_IS_CLANG) 215 set_source_files_properties( 216 FILES vkPrograms.cpp 217 PROPERTIES COMPILE_FLAGS "${DE_3RD_PARTY_CXX_FLAGS}") 218endif () 219 220if(DEQP_HAVE_RENDERDOC_HEADER) 221 add_definitions(-DDEQP_HAVE_RENDERDOC_HEADER=1) 222endif() 223 224add_definitions(-DDISABLE_SHADERCACHE_IPC) 225 226PCH(VKUTILNOSHADER_SRCS ../../modules/vulkan/pch.cpp) 227PCH(VKUTIL_SRCS ../../modules/vulkan/pch.cpp) 228PCH(VKUTILNOSHADER_INLS ../../modules/vulkan/pch.cpp) 229PCH(VKSCUTILNOSHADER_INLS ../../modules/vulkan/pch.cpp) 230 231add_library(vkutilnoshader STATIC ${VKUTILNOSHADER_SRCS} ${VKUTILNOSHADER_INLS}) 232target_compile_definitions(vkutilnoshader PUBLIC CTS_USES_VULKAN) 233target_include_directories(vkutilnoshader PUBLIC generated/vulkan) 234target_link_libraries(vkutilnoshader PUBLIC ${VKUTILNOSHADER_LIBS}) 235add_dependencies(vkutilnoshader deqp-vk-inl) 236 237add_library(vkscutilnoshader STATIC ${VKUTILNOSHADER_SRCS} ${VKSCUTILNOSHADER_INLS}) 238target_compile_definitions(vkscutilnoshader PUBLIC CTS_USES_VULKANSC) 239target_include_directories(vkscutilnoshader BEFORE PUBLIC generated/vulkansc) 240target_include_directories(vkscutilnoshader BEFORE PUBLIC ${PROJECT_SOURCE_DIR}/external/vulkancts/vkscserver) 241target_link_libraries(vkscutilnoshader PUBLIC ${VKUTILNOSHADER_LIBS} jsoncpp_static vksc-server-util) 242 243if (DEQP_USE_X11) 244 find_package(X11 REQUIRED) 245 246 target_compile_definitions(vkutilnoshader PUBLIC DEQP_SUPPORT_X11=1) 247 target_link_libraries(vkutilnoshader PUBLIC ${X11_LIBRARIES}) 248 249 target_compile_definitions(vkscutilnoshader PUBLIC DEQP_SUPPORT_X11=1) 250 target_link_libraries(vkscutilnoshader PUBLIC ${X11_LIBRARIES}) 251 252 if (DEQP_USE_XCB) 253 find_package(XCB REQUIRED) 254 255 target_compile_definitions(vkutilnoshader PUBLIC DEQP_SUPPORT_XCB=1) 256 target_link_libraries(vkutilnoshader PUBLIC ${XCB_LIBRARIES}) 257 258 target_compile_definitions(vkscutilnoshader PUBLIC DEQP_SUPPORT_XCB=1) 259 target_link_libraries(vkscutilnoshader PUBLIC ${XCB_LIBRARIES}) 260 261 endif () 262endif() 263 264add_library(vkutil STATIC ${VKUTIL_SRCS}) 265target_include_directories(vkutil PUBLIC ${GLSLANG_INCLUDE_PATH} ${spirv-tools_SOURCE_DIR}/include ${spirv-tools_SOURCE_DIR}/external/include ) 266target_link_libraries(vkutil PUBLIC vkutilnoshader ${GLSLANG_LIBRARIES} SPIRV-Tools SPIRV-Tools-opt) 267 268add_library(vkscutil STATIC ${VKUTIL_SRCS}) 269target_include_directories(vkscutil PUBLIC ${GLSLANG_INCLUDE_PATH} ${spirv-tools_SOURCE_DIR}/include ${spirv-tools_SOURCE_DIR}/external/include ) 270target_link_libraries(vkscutil PUBLIC vkscutilnoshader ${GLSLANG_LIBRARIES} SPIRV-Tools SPIRV-Tools-opt) 271