blob: 44a8f116d45cbcb536bfa6fedba0e0c066aeb873 [file] [log] [blame]
# vk - Vulkan utilites
# Split into two libraries - one that depends on spirv/glslang libraries
# which have long build times, and one that can build in parallel with those.
include(CheckIncludeFileCXX)
check_include_file_cxx(
${CMAKE_SOURCE_DIR}/external/renderdoc/src/renderdoc_app.h
HAVE_RENDERDOC_APP_H)
if(HAVE_RENDERDOC_APP_H)
set(VKRENDERDOC_SRC vkRenderDocUtil.cpp)
else()
set(VKRENDERDOC_SRC vkNoRenderDocUtil.cpp)
endif(HAVE_RENDERDOC_APP_H)
# Build inl files
set(DEQP_VULKAN_INL_GEN_INPUT ${PROJECT_SOURCE_DIR}/external/vulkan-docs/src/xml/vk.xml)
set(DEQP_VULKAN_INL_GEN_OUTPUTS_DIR ${PROJECT_SOURCE_DIR}/external/vulkancts/framework/vulkan)
set(DEQP_VULKAN_INL_GEN_OUTPUTS
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkApiExtensionDependencyInfo.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkBasicTypes.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkConcreteDeviceInterface.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkConcreteInstanceInterface.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkConcretePlatformInterface.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkCoreFunctionalities.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceDriverImpl.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceExtensions.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceFeatures.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceFeatures2.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceFeaturesForContextDecl.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceFeaturesForContextDefs.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceFeaturesForDefaultDeviceDefs.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceFunctionPointers.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDeviceProperties.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDevicePropertiesForContextDecl.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDevicePropertiesForContextDefs.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkDevicePropertiesForDefaultDeviceDefs.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkExtensionFunctions.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkFunctionPointerTypes.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkGetStructureTypeImpl.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkHandleType.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkInitDeviceFunctionPointers.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkInitInstanceFunctionPointers.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkInitPlatformFunctionPointers.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkInstanceDriverImpl.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkInstanceExtensions.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkInstanceFunctionPointers.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkKnownDriverIds.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkMandatoryFeatures.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkNullDriverImpl.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkObjTypeImpl.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkPlatformDriverImpl.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkPlatformFunctionPointers.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkRefUtil.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkRefUtilImpl.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkStrUtil.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkStrUtilImpl.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkStructTypes.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkSupportedExtensions.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkTypeUtil.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkVirtualDeviceInterface.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkVirtualInstanceInterface.inl
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkVirtualPlatformInterface.inl
# NOTE: when new file is generated by gen_framework it should be added to this list.
${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}/vkVulkan_c.inl)
# If .inl files are generated to build directory add custom command that will build them.
if (DEQP_VULKAN_INL_GEN_OUTPUTS_DIR MATCHES ^${PROJECT_BINARY_DIR})
add_custom_command(
# Remove all outputs to help detect missing outputs.
COMMAND cmake -E remove ${DEQP_VULKAN_INL_GEN_OUTPUTS}
# Generate all inl files.
COMMAND ${PYTHON_EXECUTABLE} ARGS ${PROJECT_SOURCE_DIR}/external/vulkancts/scripts/gen_ext_deps.py ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}
COMMAND ${PYTHON_EXECUTABLE} ARGS ${PROJECT_SOURCE_DIR}/external/vulkancts/scripts/gen_framework.py ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}
COMMAND ${PYTHON_EXECUTABLE} ARGS ${PROJECT_SOURCE_DIR}/external/vulkancts/scripts/gen_framework_c.py ${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR}
# Check all outputs exist, as CMake does not do this.
COMMAND cmake -E md5sum ${DEQP_VULKAN_INL_GEN_OUTPUTS}
DEPENDS ${DEQP_VULKAN_INL_GEN_INPUT}
OUTPUT ${DEQP_VULKAN_INL_GEN_OUTPUTS})
add_custom_target(
deqp-vk-inl ALL
DEPENDS ${DEQP_VULKAN_INL_GEN_OUTPUTS})
else()
add_custom_target(deqp-vk-inl)
endif()
set(VKUTILNOSHADER_SRCS
vkApiVersion.cpp
vkApiVersion.hpp
vkBuilderUtil.cpp
vkBuilderUtil.hpp
vkBarrierUtil.cpp
vkBarrierUtil.hpp
vkCmdUtil.cpp
vkCmdUtil.hpp
vkDefs.cpp
vkDefs.hpp
vkRef.cpp
vkRef.hpp
vkRefUtil.cpp
vkRefUtil.hpp
vkPlatform.cpp
vkPlatform.hpp
vkStrUtil.cpp
vkStrUtil.hpp
vkQueryUtil.cpp
vkQueryUtil.hpp
vkMemUtil.cpp
vkMemUtil.hpp
vkDeviceUtil.cpp
vkDeviceUtil.hpp
vkBinaryRegistry.cpp
vkBinaryRegistry.hpp
vkNullDriver.cpp
vkNullDriver.hpp
vkImageUtil.cpp
vkImageUtil.hpp
vkTypeUtil.cpp
vkTypeUtil.hpp
vkAllocationCallbackUtil.cpp
vkAllocationCallbackUtil.hpp
vkWsiPlatform.cpp
vkWsiPlatform.hpp
vkWsiUtil.cpp
vkWsiUtil.hpp
vkDebugReportUtil.cpp
vkDebugReportUtil.hpp
vkBufferWithMemory.cpp
vkBufferWithMemory.hpp
vkImageWithMemory.cpp
vkImageWithMemory.hpp
vkImageWithMemory.cpp
vkImageWithMemory.hpp
vkShaderProgram.cpp
vkShaderProgram.hpp
vkValidatorOptions.hpp
vkYCbCrImageWithMemory.cpp
vkYCbCrImageWithMemory.hpp
vkObjUtil.cpp
vkObjUtil.hpp
${VKRENDERDOC_SRC}
vkRenderDocUtil.hpp
vkDeviceFeatures.hpp
vkDeviceFeatures.cpp
vkDeviceProperties.hpp
vkDeviceProperties.cpp
vkRayTracingUtil.hpp
vkRayTracingUtil.cpp
)
set(VKUTIL_SRCS
vkPrograms.cpp
vkPrograms.hpp
vkShaderToSpirV.cpp
vkShaderToSpirV.hpp
vkSpirVAsm.hpp
vkSpirVAsm.cpp
vkSpirVProgram.hpp
vkSpirVProgram.cpp
)
set(VKUTILNOSHADER_LIBS
glutil
tcutil
)
set(VKUTIL_LIBS
glutil
tcutil
vkutilnoshader
)
include_directories(${GLSLANG_INCLUDE_PATH})
include_directories(${DEQP_VULKAN_INL_GEN_OUTPUTS_DIR})
# \note Code interfacing with glslang needs to include third-party headers
# that cause all sorts of warnings to appear.
if (DE_COMPILER_IS_GCC OR DE_COMPILER_IS_CLANG)
set_source_files_properties(
FILES vkShaderToSpirV.cpp
PROPERTIES COMPILE_FLAGS "${DE_3RD_PARTY_CXX_FLAGS}")
endif ()
set(VKUTIL_LIBS ${VKUTIL_LIBS} ${GLSLANG_LIBRARIES})
include_directories(${spirv-tools_SOURCE_DIR}/include)
include_directories(${spirv-tools_SOURCE_DIR}/external/include)
# \note Code interfacing with spirv-opt needs to include third-party headers
# that cause all sorts of warnings to appear.
if (DE_COMPILER_IS_GCC OR DE_COMPILER_IS_CLANG)
set_source_files_properties(
FILES vkPrograms.cpp
PROPERTIES COMPILE_FLAGS "${DE_3RD_PARTY_CXX_FLAGS}")
endif ()
set(VKUTIL_LIBS ${VKUTIL_LIBS} SPIRV-Tools SPIRV-Tools-opt)
if(DEQP_HAVE_RENDERDOC_HEADER)
add_definitions(-DDEQP_HAVE_RENDERDOC_HEADER=1)
endif()
PCH(VKUTILNOSHADER_SRCS ../../modules/vulkan/pch.cpp)
PCH(VKUTIL_SRCS ../../modules/vulkan/pch.cpp)
add_library(vkutilnoshader STATIC ${VKUTILNOSHADER_SRCS})
target_link_libraries(vkutilnoshader ${VKUTILNOSHADER_LIBS})
add_dependencies(vkutilnoshader deqp-vk-inl)
if (DEQP_USE_X11)
find_package(X11 REQUIRED)
target_link_libraries(vkutilnoshader ${X11_LIBRARIES})
add_definitions(-DDEQP_SUPPORT_X11=1)
if (DEQP_USE_XCB)
find_package(XCB REQUIRED)
target_link_libraries(vkutilnoshader ${XCB_LIBRARIES})
add_definitions(-DDEQP_SUPPORT_XCB=1)
endif ()
endif()
add_library(vkutil STATIC ${VKUTIL_SRCS})
target_link_libraries(vkutil ${VKUTIL_LIBS})