blob: 4aab8e41f4ae182711a2d23f631c724132dc113a [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
vkPipelineConstructionUtil.hpp
vkPipelineConstructionUtil.cpp
vkSafetyCriticalUtil.hpp
vkSafetyCriticalUtil.cpp
vkResourceInterface.hpp
vkResourceInterface.cpp
)
set(VKUTILNOSHADER_INLS
generated/vulkan/vkDeviceFeatures.inl
generated/vulkan/vkDeviceFeatureTest.inl
generated/vulkan/vkDeviceProperties.inl
)
set(VKSCUTILNOSHADER_INLS
generated/vulkansc/vkDeviceFeatures.inl
generated/vulkansc/vkDeviceFeatureTest.inl
generated/vulkansc/vkDeviceProperties.inl
generated/vulkansc/vulkan_json_data.hpp
generated/vulkansc/vulkan_json_parser.hpp
generated/vulkansc/tlsWrapper.hpp
)
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 ()
# \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 ()
if(DEQP_HAVE_RENDERDOC_HEADER)
add_definitions(-DDEQP_HAVE_RENDERDOC_HEADER=1)
endif()
add_definitions(-DDISABLE_SHADERCACHE_IPC)
PCH(VKUTILNOSHADER_SRCS ../../modules/vulkan/pch.cpp)
PCH(VKUTIL_SRCS ../../modules/vulkan/pch.cpp)
PCH(VKUTILNOSHADER_INLS ../../modules/vulkan/pch.cpp)
PCH(VKSCUTILNOSHADER_INLS ../../modules/vulkan/pch.cpp)
add_library(vkutilnoshader STATIC ${VKUTILNOSHADER_SRCS} ${VKUTILNOSHADER_INLS})
target_compile_definitions(vkutilnoshader PUBLIC CTS_USES_VULKAN)
target_link_libraries(vkutilnoshader PUBLIC ${VKUTILNOSHADER_LIBS})
add_dependencies(vkutilnoshader deqp-vk-inl)
add_library(vkscutilnoshader STATIC ${VKUTILNOSHADER_SRCS} ${VKSCUTILNOSHADER_INLS})
target_include_directories(vkscutilnoshader BEFORE PUBLIC generated/vulkansc)
target_include_directories(vkscutilnoshader BEFORE PUBLIC ${CMAKE_SOURCE_DIR}/external/vulkancts/vkscserver)
target_compile_definitions(vkscutilnoshader PUBLIC CTS_USES_VULKANSC)
target_link_libraries(vkscutilnoshader PUBLIC ${VKUTILNOSHADER_LIBS} jsoncpp_static vksc-server-util)
if (DEQP_USE_X11)
find_package(X11 REQUIRED)
target_compile_definitions(vkutilnoshader PUBLIC DEQP_SUPPORT_X11=1)
target_link_libraries(vkutilnoshader PUBLIC ${X11_LIBRARIES})
target_compile_definitions(vkscutilnoshader PUBLIC DEQP_SUPPORT_X11=1)
target_link_libraries(vkscutilnoshader PUBLIC ${X11_LIBRARIES})
if (DEQP_USE_XCB)
find_package(XCB REQUIRED)
target_compile_definitions(vkutilnoshader PUBLIC DEQP_SUPPORT_XCB=1)
target_link_libraries(vkutilnoshader PUBLIC ${XCB_LIBRARIES})
target_compile_definitions(vkscutilnoshader PUBLIC DEQP_SUPPORT_XCB=1)
target_link_libraries(vkscutilnoshader PUBLIC ${XCB_LIBRARIES})
endif ()
endif()
add_library(vkutil STATIC ${VKUTIL_SRCS})
target_include_directories(vkutil PUBLIC ${GLSLANG_INCLUDE_PATH} ${spirv-tools_SOURCE_DIR}/include ${spirv-tools_SOURCE_DIR}/external/include )
target_link_libraries(vkutil PUBLIC vkutilnoshader ${GLSLANG_LIBRARIES} SPIRV-Tools SPIRV-Tools-opt)
add_library(vkscutil STATIC ${VKUTIL_SRCS})
target_include_directories(vkscutil BEFORE PUBLIC generated/vulkansc)
target_include_directories(vkscutil PUBLIC ${GLSLANG_INCLUDE_PATH} ${spirv-tools_SOURCE_DIR}/include ${spirv-tools_SOURCE_DIR}/external/include )
target_link_libraries(vkscutil PUBLIC vkscutilnoshader ${GLSLANG_LIBRARIES} SPIRV-Tools SPIRV-Tools-opt)