cmake_minimum_required(VERSION 3.15) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) project(rhi_integration_quad) set(ENGINE_ROOT_DIR ${CMAKE_SOURCE_DIR}/engine) set(PACKAGE_DIR ${CMAKE_SOURCE_DIR}/tests/opengl/package) get_filename_component(PROJECT_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../.. ABSOLUTE) find_package(Vulkan QUIET) add_executable(rhi_integration_quad main.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../fixtures/RHIIntegrationFixture.cpp ${PACKAGE_DIR}/src/glad.c ) target_include_directories(rhi_integration_quad PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../fixtures ${ENGINE_ROOT_DIR}/include ${PACKAGE_DIR}/include ${PROJECT_ROOT_DIR}/engine/src ) target_link_libraries(rhi_integration_quad PRIVATE d3d12 dxgi d3dcompiler winmm opengl32 XCEngine GTest::gtest ) if(Vulkan_FOUND) set(XCENGINE_GLSLANG_VALIDATOR_HINT "$ENV{VULKAN_SDK}") find_program( XCENGINE_GLSLANG_VALIDATOR NAMES glslangValidator glslangValidator.exe HINTS "${XCENGINE_GLSLANG_VALIDATOR_HINT}/Bin" "${Vulkan_ROOT}/Bin") if(NOT XCENGINE_GLSLANG_VALIDATOR) file(GLOB XCENGINE_VULKAN_BIN_DIRS "D:/VulkanSDK/*/Bin") if(XCENGINE_VULKAN_BIN_DIRS) list(SORT XCENGINE_VULKAN_BIN_DIRS COMPARE NATURAL ORDER DESCENDING) foreach(XCENGINE_VULKAN_BIN_DIR IN LISTS XCENGINE_VULKAN_BIN_DIRS) find_program( XCENGINE_GLSLANG_VALIDATOR NAMES glslangValidator glslangValidator.exe PATHS "${XCENGINE_VULKAN_BIN_DIR}" NO_DEFAULT_PATH) if(XCENGINE_GLSLANG_VALIDATOR) break() endif() endforeach() endif() endif() if(NOT XCENGINE_GLSLANG_VALIDATOR) message(FATAL_ERROR "glslangValidator not found for Vulkan quad shaders") endif() set(QUAD_VULKAN_VERTEX_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/Res/Shader/quad_vulkan.vert) set(QUAD_VULKAN_FRAGMENT_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/Res/Shader/quad_vulkan.frag) add_custom_command(TARGET rhi_integration_quad PRE_BUILD COMMAND ${XCENGINE_GLSLANG_VALIDATOR} -V -S vert -o $/quad_vulkan.vert.spv ${QUAD_VULKAN_VERTEX_SOURCE} COMMAND ${XCENGINE_GLSLANG_VALIDATOR} -V -S frag -o $/quad_vulkan.frag.spv ${QUAD_VULKAN_FRAGMENT_SOURCE} VERBATIM) target_link_libraries(rhi_integration_quad PRIVATE Vulkan::Vulkan) target_compile_definitions(rhi_integration_quad PRIVATE XCENGINE_SUPPORT_VULKAN) endif() target_compile_definitions(rhi_integration_quad PRIVATE UNICODE _UNICODE XCENGINE_SUPPORT_OPENGL XCENGINE_SUPPORT_D3D12 ) add_custom_command(TARGET rhi_integration_quad POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/Res $/Res COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/tests/RHI/integration/compare_ppm.py $/ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/GT.ppm $/GT.ppm COMMAND ${CMAKE_COMMAND} -E copy_if_different ${ENGINE_ROOT_DIR}/third_party/renderdoc/renderdoc.dll $/ ) include(GoogleTest) gtest_discover_tests(rhi_integration_quad)