From 7404108a4be733bb6f6acc846fcad7c88b37f497 Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Thu, 2 Apr 2026 04:00:58 +0800 Subject: [PATCH] test: add vulkan renderer scene coverage --- .../Pipelines/BuiltinForwardPipeline.cpp | 71 +++++++++++++++++++ .../fixtures/RHIIntegrationFixture.cpp | 2 +- .../fixtures/RHIIntegrationFixture.h | 1 + .../backpack_lit_scene/CMakeLists.txt | 7 ++ .../integration/backpack_lit_scene/main.cpp | 16 ++++- .../integration/backpack_scene/CMakeLists.txt | 7 ++ .../integration/backpack_scene/main.cpp | 16 ++++- .../camera_stack_scene/CMakeLists.txt | 7 ++ .../integration/camera_stack_scene/main.cpp | 16 ++++- .../cull_material_scene/CMakeLists.txt | 7 ++ .../integration/cull_material_scene/main.cpp | 14 +++- .../depth_sort_scene/CMakeLists.txt | 7 ++ .../integration/depth_sort_scene/main.cpp | 14 +++- .../material_state_scene/CMakeLists.txt | 7 ++ .../integration/material_state_scene/main.cpp | 14 +++- .../offscreen_scene/CMakeLists.txt | 7 ++ .../integration/offscreen_scene/main.cpp | 15 +++- .../textured_quad_scene/CMakeLists.txt | 7 ++ .../integration/textured_quad_scene/main.cpp | 16 ++++- .../transparent_material_scene/CMakeLists.txt | 7 ++ .../transparent_material_scene/main.cpp | 14 +++- 21 files changed, 258 insertions(+), 14 deletions(-) diff --git a/engine/src/Rendering/Pipelines/BuiltinForwardPipeline.cpp b/engine/src/Rendering/Pipelines/BuiltinForwardPipeline.cpp index 66c7dc10..82d6bd64 100644 --- a/engine/src/Rendering/Pipelines/BuiltinForwardPipeline.cpp +++ b/engine/src/Rendering/Pipelines/BuiltinForwardPipeline.cpp @@ -160,6 +160,65 @@ void main() { } )"; +const char kBuiltinForwardVulkanVertexShader[] = R"(#version 450 +layout(location = 0) in vec3 aPosition; +layout(location = 1) in vec3 aNormal; +layout(location = 2) in vec2 aTexCoord; + +layout(set = 1, binding = 0, std140) uniform PerObjectConstants { + mat4 gProjectionMatrix; + mat4 gViewMatrix; + mat4 gModelMatrix; + mat4 gNormalMatrix; + vec4 gMainLightDirectionAndIntensity; + vec4 gMainLightColorAndFlags; +}; + +layout(location = 0) out vec3 vNormalWS; +layout(location = 1) out vec2 vTexCoord; + +void main() { + vec4 positionWS = gModelMatrix * vec4(aPosition, 1.0); + vec4 positionVS = gViewMatrix * positionWS; + gl_Position = gProjectionMatrix * positionVS; + vNormalWS = mat3(gNormalMatrix) * aNormal; + vTexCoord = aTexCoord; +} +)"; + +const char kBuiltinForwardVulkanFragmentShader[] = R"(#version 450 +layout(set = 2, binding = 0) uniform texture2D uBaseColorTexture; +layout(set = 3, binding = 0) uniform sampler uLinearSampler; + +layout(set = 1, binding = 0, std140) uniform PerObjectConstants { + mat4 gProjectionMatrix; + mat4 gViewMatrix; + mat4 gModelMatrix; + mat4 gNormalMatrix; + vec4 gMainLightDirectionAndIntensity; + vec4 gMainLightColorAndFlags; +}; + +layout(location = 0) in vec3 vNormalWS; +layout(location = 1) in vec2 vTexCoord; + +layout(location = 0) out vec4 fragColor; + +void main() { + vec4 baseColor = texture(sampler2D(uBaseColorTexture, uLinearSampler), vTexCoord); + if (gMainLightColorAndFlags.w < 0.5) { + fragColor = baseColor; + return; + } + + vec3 normalWS = normalize(vNormalWS); + vec3 directionToLightWS = normalize(gMainLightDirectionAndIntensity.xyz); + float diffuse = max(dot(normalWS, directionToLightWS), 0.0); + vec3 lighting = vec3(0.28) + + gMainLightColorAndFlags.rgb * (diffuse * gMainLightDirectionAndIntensity.w); + fragColor = vec4(baseColor.rgb * lighting, baseColor.a); +} +)"; RHI::GraphicsPipelineDesc CreatePipelineDesc( RHI::RHIType backendType, RHI::RHIPipelineLayout* pipelineLayout, @@ -189,6 +248,18 @@ RHI::GraphicsPipelineDesc CreatePipelineDesc( pipelineDesc.fragmentShader.sourceLanguage = RHI::ShaderLanguage::HLSL; pipelineDesc.fragmentShader.entryPoint = L"MainPS"; pipelineDesc.fragmentShader.profile = L"ps_5_0"; + } else if (backendType == RHI::RHIType::Vulkan) { + pipelineDesc.vertexShader.source.assign( + kBuiltinForwardVulkanVertexShader, + kBuiltinForwardVulkanVertexShader + std::strlen(kBuiltinForwardVulkanVertexShader)); + pipelineDesc.vertexShader.sourceLanguage = RHI::ShaderLanguage::GLSL; + pipelineDesc.vertexShader.profile = L"vs_4_50"; + + pipelineDesc.fragmentShader.source.assign( + kBuiltinForwardVulkanFragmentShader, + kBuiltinForwardVulkanFragmentShader + std::strlen(kBuiltinForwardVulkanFragmentShader)); + pipelineDesc.fragmentShader.sourceLanguage = RHI::ShaderLanguage::GLSL; + pipelineDesc.fragmentShader.profile = L"fs_4_50"; } else { pipelineDesc.vertexShader.source.assign( kBuiltinForwardVertexShader, diff --git a/tests/RHI/integration/fixtures/RHIIntegrationFixture.cpp b/tests/RHI/integration/fixtures/RHIIntegrationFixture.cpp index 2b663356..e1c3d15e 100644 --- a/tests/RHI/integration/fixtures/RHIIntegrationFixture.cpp +++ b/tests/RHI/integration/fixtures/RHIIntegrationFixture.cpp @@ -178,7 +178,7 @@ void RHIIntegrationFixture::SetUp() { } void RHIIntegrationFixture::BeginRender() { - if (GetParam() == RHIType::Vulkan) { + if (GetParam() == RHIType::Vulkan && RequiresSwapChainAcquire()) { #if defined(XCENGINE_SUPPORT_VULKAN) auto* vulkanSwapChain = static_cast(mSwapChain); ASSERT_NE(vulkanSwapChain, nullptr); diff --git a/tests/RHI/integration/fixtures/RHIIntegrationFixture.h b/tests/RHI/integration/fixtures/RHIIntegrationFixture.h index 51b1d82e..d9bf5a61 100644 --- a/tests/RHI/integration/fixtures/RHIIntegrationFixture.h +++ b/tests/RHI/integration/fixtures/RHIIntegrationFixture.h @@ -57,6 +57,7 @@ protected: void SetRenderTargetForClear(bool includeDepthStencil = false); virtual void RenderFrame() {} + virtual bool RequiresSwapChainAcquire() const { return true; } bool TakeScreenshot(const char* filename); bool CompareWithGoldenTemplate(const char* outputPpm, const char* gtPpm, float threshold = 0.0f); diff --git a/tests/Rendering/integration/backpack_lit_scene/CMakeLists.txt b/tests/Rendering/integration/backpack_lit_scene/CMakeLists.txt index 011c7a80..a34151d6 100644 --- a/tests/Rendering/integration/backpack_lit_scene/CMakeLists.txt +++ b/tests/Rendering/integration/backpack_lit_scene/CMakeLists.txt @@ -9,6 +9,8 @@ set(PACKAGE_DIR ${CMAKE_SOURCE_DIR}/mvs/OpenGL/package) get_filename_component(PROJECT_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../.. ABSOLUTE) +find_package(Vulkan QUIET) + add_executable(rendering_integration_backpack_lit_scene main.cpp ${CMAKE_SOURCE_DIR}/tests/RHI/integration/fixtures/RHIIntegrationFixture.cpp @@ -33,6 +35,11 @@ target_link_libraries(rendering_integration_backpack_lit_scene PRIVATE GTest::gtest ) +if(TARGET Vulkan::Vulkan) + target_link_libraries(rendering_integration_backpack_lit_scene PRIVATE Vulkan::Vulkan) + target_compile_definitions(rendering_integration_backpack_lit_scene PRIVATE XCENGINE_SUPPORT_VULKAN) +endif() + target_compile_definitions(rendering_integration_backpack_lit_scene PRIVATE UNICODE _UNICODE diff --git a/tests/Rendering/integration/backpack_lit_scene/main.cpp b/tests/Rendering/integration/backpack_lit_scene/main.cpp index d23e063c..0ef74f0d 100644 --- a/tests/Rendering/integration/backpack_lit_scene/main.cpp +++ b/tests/Rendering/integration/backpack_lit_scene/main.cpp @@ -41,6 +41,7 @@ namespace { constexpr const char* kD3D12Screenshot = "backpack_lit_scene_d3d12.ppm"; constexpr const char* kOpenGLScreenshot = "backpack_lit_scene_opengl.ppm"; +constexpr const char* kVulkanScreenshot = "backpack_lit_scene_vulkan.ppm"; constexpr uint32_t kFrameWidth = 1280; constexpr uint32_t kFrameHeight = 720; @@ -59,11 +60,19 @@ std::filesystem::path ResolveRuntimePath(const char* relativePath) { } const char* GetScreenshotFilename(RHIType backendType) { - return backendType == RHIType::D3D12 ? kD3D12Screenshot : kOpenGLScreenshot; + switch (backendType) { + case RHIType::D3D12: + return kD3D12Screenshot; + case RHIType::Vulkan: + return kVulkanScreenshot; + case RHIType::OpenGL: + default: + return kOpenGLScreenshot; + } } int GetComparisonThreshold(RHIType backendType) { - return backendType == RHIType::OpenGL ? 10 : 10; + return backendType == RHIType::D3D12 ? 10 : 10; } class BackpackLitSceneTest : public RHIIntegrationFixture { @@ -308,6 +317,9 @@ TEST_P(BackpackLitSceneTest, RenderBackpackLitScene) { INSTANTIATE_TEST_SUITE_P(D3D12, BackpackLitSceneTest, ::testing::Values(RHIType::D3D12)); INSTANTIATE_TEST_SUITE_P(OpenGL, BackpackLitSceneTest, ::testing::Values(RHIType::OpenGL)); +#if defined(XCENGINE_SUPPORT_VULKAN) +INSTANTIATE_TEST_SUITE_P(Vulkan, BackpackLitSceneTest, ::testing::Values(RHIType::Vulkan)); +#endif GTEST_API_ int main(int argc, char** argv) { Logger::Get().Initialize(); diff --git a/tests/Rendering/integration/backpack_scene/CMakeLists.txt b/tests/Rendering/integration/backpack_scene/CMakeLists.txt index 5e0916e1..50e04269 100644 --- a/tests/Rendering/integration/backpack_scene/CMakeLists.txt +++ b/tests/Rendering/integration/backpack_scene/CMakeLists.txt @@ -9,6 +9,8 @@ set(PACKAGE_DIR ${CMAKE_SOURCE_DIR}/mvs/OpenGL/package) get_filename_component(PROJECT_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../.. ABSOLUTE) +find_package(Vulkan QUIET) + add_executable(rendering_integration_backpack_scene main.cpp ${CMAKE_SOURCE_DIR}/tests/RHI/integration/fixtures/RHIIntegrationFixture.cpp @@ -33,6 +35,11 @@ target_link_libraries(rendering_integration_backpack_scene PRIVATE GTest::gtest ) +if(TARGET Vulkan::Vulkan) + target_link_libraries(rendering_integration_backpack_scene PRIVATE Vulkan::Vulkan) + target_compile_definitions(rendering_integration_backpack_scene PRIVATE XCENGINE_SUPPORT_VULKAN) +endif() + target_compile_definitions(rendering_integration_backpack_scene PRIVATE UNICODE _UNICODE diff --git a/tests/Rendering/integration/backpack_scene/main.cpp b/tests/Rendering/integration/backpack_scene/main.cpp index 89b3ebaa..c6736956 100644 --- a/tests/Rendering/integration/backpack_scene/main.cpp +++ b/tests/Rendering/integration/backpack_scene/main.cpp @@ -42,6 +42,7 @@ namespace { constexpr const char* kD3D12Screenshot = "backpack_scene_d3d12.ppm"; constexpr const char* kOpenGLScreenshot = "backpack_scene_opengl.ppm"; +constexpr const char* kVulkanScreenshot = "backpack_scene_vulkan.ppm"; constexpr uint32_t kFrameWidth = 1280; constexpr uint32_t kFrameHeight = 720; @@ -60,11 +61,19 @@ std::filesystem::path ResolveRuntimePath(const char* relativePath) { } const char* GetScreenshotFilename(RHIType backendType) { - return backendType == RHIType::D3D12 ? kD3D12Screenshot : kOpenGLScreenshot; + switch (backendType) { + case RHIType::D3D12: + return kD3D12Screenshot; + case RHIType::Vulkan: + return kVulkanScreenshot; + case RHIType::OpenGL: + default: + return kOpenGLScreenshot; + } } int GetComparisonThreshold(RHIType backendType) { - return backendType == RHIType::OpenGL ? 8 : 8; + return backendType == RHIType::D3D12 ? 8 : 8; } class BackpackSceneTest : public RHIIntegrationFixture { @@ -302,6 +311,9 @@ TEST_P(BackpackSceneTest, RenderBackpackScene) { INSTANTIATE_TEST_SUITE_P(D3D12, BackpackSceneTest, ::testing::Values(RHIType::D3D12)); INSTANTIATE_TEST_SUITE_P(OpenGL, BackpackSceneTest, ::testing::Values(RHIType::OpenGL)); +#if defined(XCENGINE_SUPPORT_VULKAN) +INSTANTIATE_TEST_SUITE_P(Vulkan, BackpackSceneTest, ::testing::Values(RHIType::Vulkan)); +#endif GTEST_API_ int main(int argc, char** argv) { Logger::Get().Initialize(); diff --git a/tests/Rendering/integration/camera_stack_scene/CMakeLists.txt b/tests/Rendering/integration/camera_stack_scene/CMakeLists.txt index 6e0728ab..d20c8e99 100644 --- a/tests/Rendering/integration/camera_stack_scene/CMakeLists.txt +++ b/tests/Rendering/integration/camera_stack_scene/CMakeLists.txt @@ -9,6 +9,8 @@ set(PACKAGE_DIR ${CMAKE_SOURCE_DIR}/mvs/OpenGL/package) get_filename_component(PROJECT_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../.. ABSOLUTE) +find_package(Vulkan QUIET) + add_executable(rendering_integration_camera_stack_scene main.cpp ${CMAKE_SOURCE_DIR}/tests/RHI/integration/fixtures/RHIIntegrationFixture.cpp @@ -33,6 +35,11 @@ target_link_libraries(rendering_integration_camera_stack_scene PRIVATE GTest::gtest ) +if(TARGET Vulkan::Vulkan) + target_link_libraries(rendering_integration_camera_stack_scene PRIVATE Vulkan::Vulkan) + target_compile_definitions(rendering_integration_camera_stack_scene PRIVATE XCENGINE_SUPPORT_VULKAN) +endif() + target_compile_definitions(rendering_integration_camera_stack_scene PRIVATE UNICODE _UNICODE diff --git a/tests/Rendering/integration/camera_stack_scene/main.cpp b/tests/Rendering/integration/camera_stack_scene/main.cpp index 409f1d83..235256fa 100644 --- a/tests/Rendering/integration/camera_stack_scene/main.cpp +++ b/tests/Rendering/integration/camera_stack_scene/main.cpp @@ -44,6 +44,7 @@ namespace { constexpr const char* kD3D12Screenshot = "camera_stack_scene_d3d12.ppm"; constexpr const char* kOpenGLScreenshot = "camera_stack_scene_opengl.ppm"; +constexpr const char* kVulkanScreenshot = "camera_stack_scene_vulkan.ppm"; constexpr uint32_t kFrameWidth = 1280; constexpr uint32_t kFrameHeight = 720; constexpr uint8_t kBaseLayer = 0; @@ -139,11 +140,19 @@ Material* CreateQuadMaterial(Texture* texture) { } const char* GetScreenshotFilename(RHIType backendType) { - return backendType == RHIType::D3D12 ? kD3D12Screenshot : kOpenGLScreenshot; + switch (backendType) { + case RHIType::D3D12: + return kD3D12Screenshot; + case RHIType::Vulkan: + return kVulkanScreenshot; + case RHIType::OpenGL: + default: + return kOpenGLScreenshot; + } } int GetComparisonThreshold(RHIType backendType) { - return backendType == RHIType::OpenGL ? 8 : 8; + return backendType == RHIType::D3D12 ? 8 : 8; } class CameraStackSceneTest : public RHIIntegrationFixture { @@ -426,6 +435,9 @@ TEST_P(CameraStackSceneTest, RenderCameraStackScene) { INSTANTIATE_TEST_SUITE_P(D3D12, CameraStackSceneTest, ::testing::Values(RHIType::D3D12)); INSTANTIATE_TEST_SUITE_P(OpenGL, CameraStackSceneTest, ::testing::Values(RHIType::OpenGL)); +#if defined(XCENGINE_SUPPORT_VULKAN) +INSTANTIATE_TEST_SUITE_P(Vulkan, CameraStackSceneTest, ::testing::Values(RHIType::Vulkan)); +#endif GTEST_API_ int main(int argc, char** argv) { Logger::Get().Initialize(); diff --git a/tests/Rendering/integration/cull_material_scene/CMakeLists.txt b/tests/Rendering/integration/cull_material_scene/CMakeLists.txt index 56f7a7db..f2a618ec 100644 --- a/tests/Rendering/integration/cull_material_scene/CMakeLists.txt +++ b/tests/Rendering/integration/cull_material_scene/CMakeLists.txt @@ -9,6 +9,8 @@ set(PACKAGE_DIR ${CMAKE_SOURCE_DIR}/mvs/OpenGL/package) get_filename_component(PROJECT_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../.. ABSOLUTE) +find_package(Vulkan QUIET) + add_executable(rendering_integration_cull_material_scene main.cpp ${CMAKE_SOURCE_DIR}/tests/RHI/integration/fixtures/RHIIntegrationFixture.cpp @@ -33,6 +35,11 @@ target_link_libraries(rendering_integration_cull_material_scene PRIVATE GTest::gtest ) +if(TARGET Vulkan::Vulkan) + target_link_libraries(rendering_integration_cull_material_scene PRIVATE Vulkan::Vulkan) + target_compile_definitions(rendering_integration_cull_material_scene PRIVATE XCENGINE_SUPPORT_VULKAN) +endif() + target_compile_definitions(rendering_integration_cull_material_scene PRIVATE UNICODE _UNICODE diff --git a/tests/Rendering/integration/cull_material_scene/main.cpp b/tests/Rendering/integration/cull_material_scene/main.cpp index bd140312..c4db564f 100644 --- a/tests/Rendering/integration/cull_material_scene/main.cpp +++ b/tests/Rendering/integration/cull_material_scene/main.cpp @@ -37,6 +37,7 @@ namespace { constexpr const char* kD3D12Screenshot = "cull_material_scene_d3d12.ppm"; constexpr const char* kOpenGLScreenshot = "cull_material_scene_opengl.ppm"; +constexpr const char* kVulkanScreenshot = "cull_material_scene_vulkan.ppm"; constexpr uint32_t kFrameWidth = 1280; constexpr uint32_t kFrameHeight = 720; @@ -134,7 +135,15 @@ GameObject* CreateQuadObject( } const char* GetScreenshotFilename(RHIType backendType) { - return backendType == RHIType::D3D12 ? kD3D12Screenshot : kOpenGLScreenshot; + switch (backendType) { + case RHIType::D3D12: + return kD3D12Screenshot; + case RHIType::Vulkan: + return kVulkanScreenshot; + case RHIType::OpenGL: + default: + return kOpenGLScreenshot; + } } int GetComparisonThreshold(RHIType backendType) { @@ -432,6 +441,9 @@ TEST_P(CullMaterialSceneTest, RenderCullMaterialScene) { INSTANTIATE_TEST_SUITE_P(D3D12, CullMaterialSceneTest, ::testing::Values(RHIType::D3D12)); INSTANTIATE_TEST_SUITE_P(OpenGL, CullMaterialSceneTest, ::testing::Values(RHIType::OpenGL)); +#if defined(XCENGINE_SUPPORT_VULKAN) +INSTANTIATE_TEST_SUITE_P(Vulkan, CullMaterialSceneTest, ::testing::Values(RHIType::Vulkan)); +#endif GTEST_API_ int main(int argc, char** argv) { Logger::Get().Initialize(); diff --git a/tests/Rendering/integration/depth_sort_scene/CMakeLists.txt b/tests/Rendering/integration/depth_sort_scene/CMakeLists.txt index a9f37afb..42f4f1f4 100644 --- a/tests/Rendering/integration/depth_sort_scene/CMakeLists.txt +++ b/tests/Rendering/integration/depth_sort_scene/CMakeLists.txt @@ -9,6 +9,8 @@ set(PACKAGE_DIR ${CMAKE_SOURCE_DIR}/mvs/OpenGL/package) get_filename_component(PROJECT_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../.. ABSOLUTE) +find_package(Vulkan QUIET) + add_executable(rendering_integration_depth_sort_scene main.cpp ${CMAKE_SOURCE_DIR}/tests/RHI/integration/fixtures/RHIIntegrationFixture.cpp @@ -33,6 +35,11 @@ target_link_libraries(rendering_integration_depth_sort_scene PRIVATE GTest::gtest ) +if(TARGET Vulkan::Vulkan) + target_link_libraries(rendering_integration_depth_sort_scene PRIVATE Vulkan::Vulkan) + target_compile_definitions(rendering_integration_depth_sort_scene PRIVATE XCENGINE_SUPPORT_VULKAN) +endif() + target_compile_definitions(rendering_integration_depth_sort_scene PRIVATE UNICODE _UNICODE diff --git a/tests/Rendering/integration/depth_sort_scene/main.cpp b/tests/Rendering/integration/depth_sort_scene/main.cpp index de228f4f..35225316 100644 --- a/tests/Rendering/integration/depth_sort_scene/main.cpp +++ b/tests/Rendering/integration/depth_sort_scene/main.cpp @@ -37,6 +37,7 @@ namespace { constexpr const char* kD3D12Screenshot = "depth_sort_scene_d3d12.ppm"; constexpr const char* kOpenGLScreenshot = "depth_sort_scene_opengl.ppm"; +constexpr const char* kVulkanScreenshot = "depth_sort_scene_vulkan.ppm"; constexpr uint32_t kFrameWidth = 1280; constexpr uint32_t kFrameHeight = 720; @@ -135,7 +136,15 @@ GameObject* CreateQuadObject( } const char* GetScreenshotFilename(RHIType backendType) { - return backendType == RHIType::D3D12 ? kD3D12Screenshot : kOpenGLScreenshot; + switch (backendType) { + case RHIType::D3D12: + return kD3D12Screenshot; + case RHIType::Vulkan: + return kVulkanScreenshot; + case RHIType::OpenGL: + default: + return kOpenGLScreenshot; + } } int GetComparisonThreshold(RHIType backendType) { @@ -439,6 +448,9 @@ TEST_P(DepthSortSceneTest, RenderDepthSortScene) { INSTANTIATE_TEST_SUITE_P(D3D12, DepthSortSceneTest, ::testing::Values(RHIType::D3D12)); INSTANTIATE_TEST_SUITE_P(OpenGL, DepthSortSceneTest, ::testing::Values(RHIType::OpenGL)); +#if defined(XCENGINE_SUPPORT_VULKAN) +INSTANTIATE_TEST_SUITE_P(Vulkan, DepthSortSceneTest, ::testing::Values(RHIType::Vulkan)); +#endif GTEST_API_ int main(int argc, char** argv) { Logger::Get().Initialize(); diff --git a/tests/Rendering/integration/material_state_scene/CMakeLists.txt b/tests/Rendering/integration/material_state_scene/CMakeLists.txt index 2130a7e9..b660c6d0 100644 --- a/tests/Rendering/integration/material_state_scene/CMakeLists.txt +++ b/tests/Rendering/integration/material_state_scene/CMakeLists.txt @@ -9,6 +9,8 @@ set(PACKAGE_DIR ${CMAKE_SOURCE_DIR}/mvs/OpenGL/package) get_filename_component(PROJECT_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../.. ABSOLUTE) +find_package(Vulkan QUIET) + add_executable(rendering_integration_material_state_scene main.cpp ${CMAKE_SOURCE_DIR}/tests/RHI/integration/fixtures/RHIIntegrationFixture.cpp @@ -33,6 +35,11 @@ target_link_libraries(rendering_integration_material_state_scene PRIVATE GTest::gtest ) +if(TARGET Vulkan::Vulkan) + target_link_libraries(rendering_integration_material_state_scene PRIVATE Vulkan::Vulkan) + target_compile_definitions(rendering_integration_material_state_scene PRIVATE XCENGINE_SUPPORT_VULKAN) +endif() + target_compile_definitions(rendering_integration_material_state_scene PRIVATE UNICODE _UNICODE diff --git a/tests/Rendering/integration/material_state_scene/main.cpp b/tests/Rendering/integration/material_state_scene/main.cpp index 37ceb9f6..664219ed 100644 --- a/tests/Rendering/integration/material_state_scene/main.cpp +++ b/tests/Rendering/integration/material_state_scene/main.cpp @@ -37,6 +37,7 @@ namespace { constexpr const char* kD3D12Screenshot = "material_state_scene_d3d12.ppm"; constexpr const char* kOpenGLScreenshot = "material_state_scene_opengl.ppm"; +constexpr const char* kVulkanScreenshot = "material_state_scene_vulkan.ppm"; constexpr uint32_t kFrameWidth = 1280; constexpr uint32_t kFrameHeight = 720; constexpr float kPi = 3.1415926535f; @@ -136,7 +137,15 @@ GameObject* CreateQuadObject( } const char* GetScreenshotFilename(RHIType backendType) { - return backendType == RHIType::D3D12 ? kD3D12Screenshot : kOpenGLScreenshot; + switch (backendType) { + case RHIType::D3D12: + return kD3D12Screenshot; + case RHIType::Vulkan: + return kVulkanScreenshot; + case RHIType::OpenGL: + default: + return kOpenGLScreenshot; + } } int GetComparisonThreshold(RHIType backendType) { @@ -532,6 +541,9 @@ TEST_P(MaterialStateSceneTest, RenderMaterialStateScene) { INSTANTIATE_TEST_SUITE_P(D3D12, MaterialStateSceneTest, ::testing::Values(RHIType::D3D12)); INSTANTIATE_TEST_SUITE_P(OpenGL, MaterialStateSceneTest, ::testing::Values(RHIType::OpenGL)); +#if defined(XCENGINE_SUPPORT_VULKAN) +INSTANTIATE_TEST_SUITE_P(Vulkan, MaterialStateSceneTest, ::testing::Values(RHIType::Vulkan)); +#endif GTEST_API_ int main(int argc, char** argv) { Logger::Get().Initialize(); diff --git a/tests/Rendering/integration/offscreen_scene/CMakeLists.txt b/tests/Rendering/integration/offscreen_scene/CMakeLists.txt index 62b2ad57..d1ad17a4 100644 --- a/tests/Rendering/integration/offscreen_scene/CMakeLists.txt +++ b/tests/Rendering/integration/offscreen_scene/CMakeLists.txt @@ -9,6 +9,8 @@ set(PACKAGE_DIR ${CMAKE_SOURCE_DIR}/mvs/OpenGL/package) get_filename_component(PROJECT_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../.. ABSOLUTE) +find_package(Vulkan QUIET) + add_executable(rendering_integration_offscreen_scene main.cpp ${CMAKE_SOURCE_DIR}/tests/RHI/integration/fixtures/RHIIntegrationFixture.cpp @@ -33,6 +35,11 @@ target_link_libraries(rendering_integration_offscreen_scene PRIVATE GTest::gtest ) +if(TARGET Vulkan::Vulkan) + target_link_libraries(rendering_integration_offscreen_scene PRIVATE Vulkan::Vulkan) + target_compile_definitions(rendering_integration_offscreen_scene PRIVATE XCENGINE_SUPPORT_VULKAN) +endif() + target_compile_definitions(rendering_integration_offscreen_scene PRIVATE UNICODE _UNICODE diff --git a/tests/Rendering/integration/offscreen_scene/main.cpp b/tests/Rendering/integration/offscreen_scene/main.cpp index f960b5f5..735ed669 100644 --- a/tests/Rendering/integration/offscreen_scene/main.cpp +++ b/tests/Rendering/integration/offscreen_scene/main.cpp @@ -37,6 +37,7 @@ namespace { constexpr const char* kD3D12Screenshot = "offscreen_scene_d3d12.ppm"; constexpr const char* kOpenGLScreenshot = "offscreen_scene_opengl.ppm"; +constexpr const char* kVulkanScreenshot = "offscreen_scene_vulkan.ppm"; constexpr uint32_t kFrameWidth = 1280; constexpr uint32_t kFrameHeight = 720; @@ -135,7 +136,15 @@ GameObject* CreateQuadObject( } const char* GetScreenshotFilename(RHIType backendType) { - return backendType == RHIType::D3D12 ? kD3D12Screenshot : kOpenGLScreenshot; + switch (backendType) { + case RHIType::D3D12: + return kD3D12Screenshot; + case RHIType::Vulkan: + return kVulkanScreenshot; + case RHIType::OpenGL: + default: + return kOpenGLScreenshot; + } } int GetComparisonThreshold(RHIType backendType) { @@ -148,6 +157,7 @@ protected: void SetUp() override; void TearDown() override; void RenderFrame() override; + bool RequiresSwapChainAcquire() const override { return false; } private: void BuildScene(); @@ -486,6 +496,9 @@ TEST_P(OffscreenSceneTest, RenderOffscreenScene) { INSTANTIATE_TEST_SUITE_P(D3D12, OffscreenSceneTest, ::testing::Values(RHIType::D3D12)); INSTANTIATE_TEST_SUITE_P(OpenGL, OffscreenSceneTest, ::testing::Values(RHIType::OpenGL)); +#if defined(XCENGINE_SUPPORT_VULKAN) +INSTANTIATE_TEST_SUITE_P(Vulkan, OffscreenSceneTest, ::testing::Values(RHIType::Vulkan)); +#endif GTEST_API_ int main(int argc, char** argv) { Logger::Get().Initialize(); diff --git a/tests/Rendering/integration/textured_quad_scene/CMakeLists.txt b/tests/Rendering/integration/textured_quad_scene/CMakeLists.txt index 7b7f1ac4..6251eda3 100644 --- a/tests/Rendering/integration/textured_quad_scene/CMakeLists.txt +++ b/tests/Rendering/integration/textured_quad_scene/CMakeLists.txt @@ -9,6 +9,8 @@ set(PACKAGE_DIR ${CMAKE_SOURCE_DIR}/mvs/OpenGL/package) get_filename_component(PROJECT_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../.. ABSOLUTE) +find_package(Vulkan QUIET) + add_executable(rendering_integration_textured_quad_scene main.cpp ${CMAKE_SOURCE_DIR}/tests/RHI/integration/fixtures/RHIIntegrationFixture.cpp @@ -33,6 +35,11 @@ target_link_libraries(rendering_integration_textured_quad_scene PRIVATE GTest::gtest ) +if(TARGET Vulkan::Vulkan) + target_link_libraries(rendering_integration_textured_quad_scene PRIVATE Vulkan::Vulkan) + target_compile_definitions(rendering_integration_textured_quad_scene PRIVATE XCENGINE_SUPPORT_VULKAN) +endif() + target_compile_definitions(rendering_integration_textured_quad_scene PRIVATE UNICODE _UNICODE diff --git a/tests/Rendering/integration/textured_quad_scene/main.cpp b/tests/Rendering/integration/textured_quad_scene/main.cpp index 074dcb97..982814ee 100644 --- a/tests/Rendering/integration/textured_quad_scene/main.cpp +++ b/tests/Rendering/integration/textured_quad_scene/main.cpp @@ -36,6 +36,7 @@ namespace { constexpr const char* kD3D12Screenshot = "textured_quad_scene_d3d12.ppm"; constexpr const char* kOpenGLScreenshot = "textured_quad_scene_opengl.ppm"; +constexpr const char* kVulkanScreenshot = "textured_quad_scene_vulkan.ppm"; constexpr uint32_t kFrameWidth = 1280; constexpr uint32_t kFrameHeight = 720; @@ -115,11 +116,19 @@ Material* CreateMaterial(Texture* texture) { } const char* GetScreenshotFilename(RHIType backendType) { - return backendType == RHIType::D3D12 ? kD3D12Screenshot : kOpenGLScreenshot; + switch (backendType) { + case RHIType::D3D12: + return kD3D12Screenshot; + case RHIType::Vulkan: + return kVulkanScreenshot; + case RHIType::OpenGL: + default: + return kOpenGLScreenshot; + } } int GetComparisonThreshold(RHIType backendType) { - return backendType == RHIType::OpenGL ? 5 : 0; + return backendType == RHIType::D3D12 ? 0 : 5; } class TexturedQuadSceneTest : public RHIIntegrationFixture { @@ -300,6 +309,9 @@ TEST_P(TexturedQuadSceneTest, RenderTexturedQuadScene) { INSTANTIATE_TEST_SUITE_P(D3D12, TexturedQuadSceneTest, ::testing::Values(RHIType::D3D12)); INSTANTIATE_TEST_SUITE_P(OpenGL, TexturedQuadSceneTest, ::testing::Values(RHIType::OpenGL)); +#if defined(XCENGINE_SUPPORT_VULKAN) +INSTANTIATE_TEST_SUITE_P(Vulkan, TexturedQuadSceneTest, ::testing::Values(RHIType::Vulkan)); +#endif GTEST_API_ int main(int argc, char** argv) { Logger::Get().Initialize(); diff --git a/tests/Rendering/integration/transparent_material_scene/CMakeLists.txt b/tests/Rendering/integration/transparent_material_scene/CMakeLists.txt index 6f3808bd..61fb44cb 100644 --- a/tests/Rendering/integration/transparent_material_scene/CMakeLists.txt +++ b/tests/Rendering/integration/transparent_material_scene/CMakeLists.txt @@ -9,6 +9,8 @@ set(PACKAGE_DIR ${CMAKE_SOURCE_DIR}/mvs/OpenGL/package) get_filename_component(PROJECT_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../.. ABSOLUTE) +find_package(Vulkan QUIET) + add_executable(rendering_integration_transparent_material_scene main.cpp ${CMAKE_SOURCE_DIR}/tests/RHI/integration/fixtures/RHIIntegrationFixture.cpp @@ -33,6 +35,11 @@ target_link_libraries(rendering_integration_transparent_material_scene PRIVATE GTest::gtest ) +if(TARGET Vulkan::Vulkan) + target_link_libraries(rendering_integration_transparent_material_scene PRIVATE Vulkan::Vulkan) + target_compile_definitions(rendering_integration_transparent_material_scene PRIVATE XCENGINE_SUPPORT_VULKAN) +endif() + target_compile_definitions(rendering_integration_transparent_material_scene PRIVATE UNICODE _UNICODE diff --git a/tests/Rendering/integration/transparent_material_scene/main.cpp b/tests/Rendering/integration/transparent_material_scene/main.cpp index 9129f603..5c9dab01 100644 --- a/tests/Rendering/integration/transparent_material_scene/main.cpp +++ b/tests/Rendering/integration/transparent_material_scene/main.cpp @@ -37,6 +37,7 @@ namespace { constexpr const char* kD3D12Screenshot = "transparent_material_scene_d3d12.ppm"; constexpr const char* kOpenGLScreenshot = "transparent_material_scene_opengl.ppm"; +constexpr const char* kVulkanScreenshot = "transparent_material_scene_vulkan.ppm"; constexpr uint32_t kFrameWidth = 1280; constexpr uint32_t kFrameHeight = 720; @@ -135,7 +136,15 @@ GameObject* CreateQuadObject( } const char* GetScreenshotFilename(RHIType backendType) { - return backendType == RHIType::D3D12 ? kD3D12Screenshot : kOpenGLScreenshot; + switch (backendType) { + case RHIType::D3D12: + return kD3D12Screenshot; + case RHIType::Vulkan: + return kVulkanScreenshot; + case RHIType::OpenGL: + default: + return kOpenGLScreenshot; + } } int GetComparisonThreshold(RHIType backendType) { @@ -384,6 +393,9 @@ TEST_P(TransparentMaterialSceneTest, RenderTransparentMaterialScene) { INSTANTIATE_TEST_SUITE_P(D3D12, TransparentMaterialSceneTest, ::testing::Values(RHIType::D3D12)); INSTANTIATE_TEST_SUITE_P(OpenGL, TransparentMaterialSceneTest, ::testing::Values(RHIType::OpenGL)); +#if defined(XCENGINE_SUPPORT_VULKAN) +INSTANTIATE_TEST_SUITE_P(Vulkan, TransparentMaterialSceneTest, ::testing::Values(RHIType::Vulkan)); +#endif GTEST_API_ int main(int argc, char** argv) { Logger::Get().Initialize();