Split Vulkan backend-specific unit tests
This commit is contained in:
@@ -7,6 +7,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
add_subdirectory(D3D12)
|
||||
add_subdirectory(OpenGL)
|
||||
add_subdirectory(Vulkan)
|
||||
add_subdirectory(unit)
|
||||
add_subdirectory(integration)
|
||||
|
||||
@@ -34,6 +35,7 @@ add_custom_target(rhi_backend_unit_tests
|
||||
DEPENDS
|
||||
rhi_d3d12_tests
|
||||
rhi_opengl_tests
|
||||
rhi_vulkan_tests
|
||||
)
|
||||
|
||||
add_custom_target(rhi_backend_integration_tests
|
||||
|
||||
8
tests/RHI/Vulkan/CMakeLists.txt
Normal file
8
tests/RHI/Vulkan/CMakeLists.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
cmake_minimum_required(VERSION 3.15)
|
||||
|
||||
project(rhi_vulkan_tests)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
add_subdirectory(unit)
|
||||
45
tests/RHI/Vulkan/TEST_SPEC.md
Normal file
45
tests/RHI/Vulkan/TEST_SPEC.md
Normal file
@@ -0,0 +1,45 @@
|
||||
# Vulkan 测试专项规范
|
||||
|
||||
本文档是 [tests/TEST_SPEC.md](../TEST_SPEC.md) 在 Vulkan 后端上的补充入口,描述当前已经落地的 Vulkan 专项测试树。
|
||||
|
||||
## 1. 当前结构
|
||||
|
||||
```text
|
||||
tests/RHI/Vulkan/
|
||||
|- CMakeLists.txt
|
||||
|- TEST_SPEC.md
|
||||
\- unit/
|
||||
|- CMakeLists.txt
|
||||
\- test_backend_specific.cpp
|
||||
```
|
||||
|
||||
## 2. 当前目标
|
||||
|
||||
| 类别 | target |
|
||||
| --- | --- |
|
||||
| Vulkan 后端单元测试 | `rhi_vulkan_tests` |
|
||||
|
||||
## 3. 当前覆盖
|
||||
|
||||
`rhi_vulkan_tests` 当前覆盖 Vulkan 后端专属语义,包括:
|
||||
|
||||
- RenderPass / Framebuffer clear 到真实 Vulkan 纹理后的像素结果验证
|
||||
- `CopyResource` 纹理复制后的像素回读验证
|
||||
- SPIR-V / GLSL 两条 shader 创建路径
|
||||
- 基于 GLSL 的 graphics pipeline 创建
|
||||
- UAV 视图创建与 compute dispatch 写纹理链路
|
||||
|
||||
这些测试允许直接依赖 Vulkan 具体类型、原生句柄和 Vulkan API;这类断言不应再回流到 `tests/RHI/unit/`。
|
||||
|
||||
## 4. 分层约束
|
||||
|
||||
- `tests/RHI/unit/` 继续只承载 RHI 抽象层统一语义测试。
|
||||
- `tests/RHI/Vulkan/unit/` 承载 Vulkan 专属断言、原生对象检查和需要直接调用 Vulkan API 的测试。
|
||||
- 如果后续增加 Vulkan 后端集成测试,应在 `tests/RHI/Vulkan/integration/` 下单独建树,而不是继续堆进 generic abstraction suite。
|
||||
|
||||
## 5. 推荐执行方式
|
||||
|
||||
```bash
|
||||
cmake --build build --config Debug --target rhi_vulkan_tests
|
||||
build\tests\RHI\Vulkan\unit\Debug\rhi_vulkan_tests.exe --gtest_brief=1
|
||||
```
|
||||
38
tests/RHI/Vulkan/unit/CMakeLists.txt
Normal file
38
tests/RHI/Vulkan/unit/CMakeLists.txt
Normal file
@@ -0,0 +1,38 @@
|
||||
cmake_minimum_required(VERSION 3.15)
|
||||
|
||||
get_filename_component(PROJECT_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../.. ABSOLUTE)
|
||||
|
||||
find_package(GTest REQUIRED)
|
||||
|
||||
if(NOT TARGET Vulkan::Vulkan)
|
||||
find_package(Vulkan REQUIRED)
|
||||
endif()
|
||||
|
||||
set(TEST_SOURCES
|
||||
test_backend_specific.cpp
|
||||
)
|
||||
|
||||
add_executable(rhi_vulkan_tests ${TEST_SOURCES})
|
||||
|
||||
target_compile_definitions(rhi_vulkan_tests PRIVATE
|
||||
XCENGINE_SUPPORT_VULKAN
|
||||
)
|
||||
|
||||
target_link_libraries(rhi_vulkan_tests PRIVATE
|
||||
d3d12
|
||||
dxgi
|
||||
d3dcompiler
|
||||
opengl32
|
||||
XCEngine
|
||||
GTest::gtest
|
||||
GTest::gtest_main
|
||||
Vulkan::Vulkan
|
||||
)
|
||||
|
||||
target_include_directories(rhi_vulkan_tests PRIVATE
|
||||
${PROJECT_ROOT_DIR}/engine/include
|
||||
${PROJECT_ROOT_DIR}/engine/src
|
||||
)
|
||||
|
||||
include(GoogleTest)
|
||||
gtest_discover_tests(rhi_vulkan_tests)
|
||||
@@ -36,7 +36,9 @@ std::wstring ResolveShaderPath(const wchar_t* relativePath) {
|
||||
const DWORD length = GetModuleFileNameW(nullptr, exePath, MAX_PATH);
|
||||
std::filesystem::path rootPath =
|
||||
length > 0 ? std::filesystem::path(exePath).parent_path() : std::filesystem::current_path();
|
||||
for (int i = 0; i < 5; ++i) {
|
||||
while (!rootPath.empty() &&
|
||||
!(std::filesystem::exists(rootPath / "tests" / "RHI") &&
|
||||
std::filesystem::exists(rootPath / "engine" / "include" / "XCEngine"))) {
|
||||
rootPath = rootPath.parent_path();
|
||||
}
|
||||
return (rootPath / relativePath).wstring();
|
||||
@@ -503,7 +505,7 @@ void main() {
|
||||
|
||||
ShaderCompileDesc shaderDesc = {};
|
||||
shaderDesc.sourceLanguage = ShaderLanguage::GLSL;
|
||||
shaderDesc.profile = L"vs_4_50";
|
||||
shaderDesc.profile = L"vs";
|
||||
shaderDesc.source.assign(vertexSource, vertexSource + std::strlen(vertexSource));
|
||||
|
||||
RHIShader* shader = m_device->CreateShader(shaderDesc);
|
||||
@@ -519,7 +521,7 @@ TEST_F(VulkanGraphicsFixture, CreateShaderFromGlslFileProducesValidVertexShader)
|
||||
ShaderCompileDesc shaderDesc = {};
|
||||
shaderDesc.fileName = ResolveShaderPath(L"tests/RHI/integration/triangle/Res/Shader/triangle_vulkan.vert");
|
||||
shaderDesc.entryPoint = L"main";
|
||||
shaderDesc.profile = L"vs_4_50";
|
||||
shaderDesc.profile = L"vs";
|
||||
|
||||
RHIShader* shader = m_device->CreateShader(shaderDesc);
|
||||
ASSERT_NE(shader, nullptr);
|
||||
@@ -26,7 +26,6 @@ set(TEST_SOURCES
|
||||
test_capabilities.cpp
|
||||
test_views.cpp
|
||||
test_screenshot.cpp
|
||||
test_vulkan_graphics.cpp
|
||||
${CMAKE_SOURCE_DIR}/tests/opengl/package/src/glad.c
|
||||
)
|
||||
|
||||
|
||||
@@ -112,14 +112,14 @@ RHI 当前分为四层测试:
|
||||
| 抽象层集成测试 | `tests/RHI/integration/` / `rhi_integration_*` | 用同一套 RHI 抽象代码驱动三后端完成真实渲染并做 GT 图比对 |
|
||||
| D3D12 后端测试 | `tests/RHI/D3D12/` | 验证 D3D12 封装本身 |
|
||||
| OpenGL 后端测试 | `tests/RHI/OpenGL/` | 验证 OpenGL 封装本身 |
|
||||
| Vulkan 后端测试 | `tests/RHI/Vulkan/` | 验证 Vulkan 封装本身 |
|
||||
|
||||
补充说明:
|
||||
|
||||
- Vulkan 目前没有独立的 `tests/RHI/Vulkan/` 子树。
|
||||
- Vulkan 的后端专项覆盖当前由两部分承担:
|
||||
- `rhi_unit_tests` 中的三后端参数化通用测试
|
||||
- `tests/RHI/unit/test_vulkan_graphics.cpp` 中的 Vulkan 专项测试
|
||||
- 如果未来出现明显只属于 Vulkan 的后端语义,应新增独立 Vulkan 测试树,而不是把通用抽象测试继续稀释成后端特判集合。
|
||||
- Vulkan 现在已经拥有独立的 `tests/RHI/Vulkan/` 子树。
|
||||
- `tests/RHI/unit/` 继续只保留三后端参数化的抽象层统一语义测试。
|
||||
- Vulkan 专属断言、原生句柄检查与直接依赖 Vulkan API 的测试,统一收敛到 `tests/RHI/Vulkan/unit/`。
|
||||
- Vulkan 目前尚未建立独立的后端 integration 子树;如后续需要,应在 `tests/RHI/Vulkan/integration/` 下继续扩展,而不是再回流到 abstraction suite。
|
||||
|
||||
设计边界:
|
||||
|
||||
@@ -146,6 +146,7 @@ RHI 当前分为四层测试:
|
||||
| --- | --- |
|
||||
| D3D12 后端单元测试 | `rhi_d3d12_tests` |
|
||||
| OpenGL 后端单元测试 | `rhi_opengl_tests` |
|
||||
| Vulkan 后端单元测试 | `rhi_vulkan_tests` |
|
||||
| D3D12 后端集成测试 | `d3d12_minimal_test` `d3d12_triangle_test` `d3d12_quad_test` `d3d12_sphere_test` |
|
||||
| OpenGL 后端集成测试 | `opengl_minimal_test` `opengl_triangle_test` `opengl_quad_test` `opengl_sphere_test` |
|
||||
|
||||
@@ -251,7 +252,7 @@ build\tests\RHI\integration\backpack\Debug\rhi_integration_backpack.exe --gtest_
|
||||
|
||||
仍需继续完善:
|
||||
|
||||
- 为 Vulkan 增加独立的后端测试树
|
||||
- 为 Vulkan 增加后端 integration 测试树
|
||||
- 把仍然合理存在的后端专属断言与 skip 场景继续收敛
|
||||
- 补充 `resize / swapchain 重建 / 长时间 soak / 多线程录制 / validation layer 负例` 等更工程化的测试
|
||||
- 保持文档、CMake target 与实际测试状态同步
|
||||
|
||||
Reference in New Issue
Block a user