2026-03-20 03:33:40 +08:00
|
|
|
|
# D3D12 测试专项规范
|
2026-03-20 03:14:55 +08:00
|
|
|
|
|
2026-03-22 21:41:56 +08:00
|
|
|
|
## 1. 构建命令
|
2026-03-20 03:14:55 +08:00
|
|
|
|
|
2026-03-22 21:41:56 +08:00
|
|
|
|
```bash
|
|
|
|
|
|
# 构建所有
|
|
|
|
|
|
cmake --build <build> --config Debug
|
2026-03-20 03:14:55 +08:00
|
|
|
|
|
2026-03-22 21:41:56 +08:00
|
|
|
|
# 只构建单元测试
|
|
|
|
|
|
cmake --build <build> --target d3d12_engine_tests --config Debug
|
2026-03-20 03:14:55 +08:00
|
|
|
|
|
2026-03-22 21:41:56 +08:00
|
|
|
|
# 只构建集成测试
|
|
|
|
|
|
cmake --build <build> --target D3D12_Sphere D3D12_Triangle D3D12_Quad D3D12_Minimal --config Debug
|
2026-03-20 03:14:55 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-03-22 21:41:56 +08:00
|
|
|
|
## 2. 运行测试
|
2026-03-20 03:14:55 +08:00
|
|
|
|
|
2026-03-22 21:41:56 +08:00
|
|
|
|
```bash
|
|
|
|
|
|
# 运行所有已注册的测试(单元 + 集成)
|
|
|
|
|
|
cd <build>
|
|
|
|
|
|
ctest -C Debug --output-on-failure
|
2026-03-20 16:33:35 +08:00
|
|
|
|
|
2026-03-22 21:41:56 +08:00
|
|
|
|
# 只运行单元测试
|
|
|
|
|
|
cd <build>/tests/RHI/D3D12/unit
|
|
|
|
|
|
ctest -C Debug --output-on-failure
|
2026-03-20 16:33:35 +08:00
|
|
|
|
|
2026-03-22 21:41:56 +08:00
|
|
|
|
# 只运行集成测试
|
|
|
|
|
|
cd <build>/tests/RHI/D3D12/integration
|
|
|
|
|
|
ctest -C Debug --output-on-failure
|
2026-03-20 16:33:35 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-03-22 21:41:56 +08:00
|
|
|
|
## 3. 集成测试列表
|
2026-03-20 03:14:55 +08:00
|
|
|
|
|
2026-03-22 21:41:56 +08:00
|
|
|
|
| 测试名 | Target | Golden Image |
|
|
|
|
|
|
|--------|--------|-------------|
|
|
|
|
|
|
| D3D12_Minimal_Integration | D3D12_Minimal | `minimal/GT.ppm` |
|
|
|
|
|
|
| D3D12_Quad_Integration | D3D12_Quad | `quad/GT.ppm` |
|
|
|
|
|
|
| D3D12_Sphere_Integration | D3D12_Sphere | `sphere/GT.ppm` |
|
|
|
|
|
|
| D3D12_Triangle_Integration | D3D12_Triangle | `triangle/GT.ppm` |
|
2026-03-20 03:14:55 +08:00
|
|
|
|
|
2026-03-22 21:41:56 +08:00
|
|
|
|
## 4. CTest 注册机制
|
2026-03-20 03:14:55 +08:00
|
|
|
|
|
2026-03-22 21:41:56 +08:00
|
|
|
|
集成测试通过 `add_test()` 注册到 CTest:
|
2026-03-20 03:14:55 +08:00
|
|
|
|
|
|
|
|
|
|
```cmake
|
2026-03-22 21:41:56 +08:00
|
|
|
|
add_test(NAME D3D12_Sphere_Integration
|
|
|
|
|
|
COMMAND ${Python3_EXECUTABLE} $<TARGET_FILE_DIR:D3D12_Sphere>/run_integration_test.py
|
|
|
|
|
|
$<TARGET_FILE:D3D12_Sphere>
|
|
|
|
|
|
sphere.ppm
|
|
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/GT.ppm
|
|
|
|
|
|
0
|
|
|
|
|
|
WORKING_DIRECTORY $<TARGET_FILE_DIR:D3D12_Sphere>
|
2026-03-20 03:14:55 +08:00
|
|
|
|
)
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-03-22 21:41:56 +08:00
|
|
|
|
`run_integration_test.py` 负责:
|
|
|
|
|
|
1. 启动 exe
|
|
|
|
|
|
2. 等待完成
|
|
|
|
|
|
3. 调用 `compare_ppm.py` 比对图像
|
|
|
|
|
|
4. 返回 0(通过)/ 1(失败)
|
2026-03-20 03:14:55 +08:00
|
|
|
|
|
2026-03-22 21:41:56 +08:00
|
|
|
|
## 5. CI 配置
|
2026-03-20 03:33:40 +08:00
|
|
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
|
|
name: D3D12 Tests
|
|
|
|
|
|
on: [push, pull_request]
|
|
|
|
|
|
|
|
|
|
|
|
jobs:
|
|
|
|
|
|
test:
|
|
|
|
|
|
runs-on: windows-latest
|
|
|
|
|
|
steps:
|
|
|
|
|
|
- uses: actions/checkout@v4
|
|
|
|
|
|
|
|
|
|
|
|
- name: Configure CMake
|
|
|
|
|
|
run: cmake -B build -DCMAKE_BUILD_TYPE=Debug
|
|
|
|
|
|
|
2026-03-22 21:41:56 +08:00
|
|
|
|
- name: Build D3D12
|
|
|
|
|
|
run: cmake --build build --config Debug
|
2026-03-20 03:33:40 +08:00
|
|
|
|
|
2026-03-22 21:41:56 +08:00
|
|
|
|
- name: Run Tests
|
|
|
|
|
|
run: cd build && ctest -C Debug --output-on-failure
|
2026-03-20 03:14:55 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-03-22 21:41:56 +08:00
|
|
|
|
## 6. 目录结构
|
2026-03-20 03:14:55 +08:00
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
tests/RHI/D3D12/
|
|
|
|
|
|
├── unit/
|
|
|
|
|
|
│ ├── CMakeLists.txt
|
|
|
|
|
|
│ ├── fixtures/
|
|
|
|
|
|
│ │ ├── D3D12TestFixture.h
|
|
|
|
|
|
│ │ └── D3D12TestFixture.cpp
|
2026-03-22 21:41:56 +08:00
|
|
|
|
│ ├── test_*.cpp
|
2026-03-20 03:14:55 +08:00
|
|
|
|
│ └── ...
|
|
|
|
|
|
└── integration/
|
|
|
|
|
|
├── CMakeLists.txt
|
2026-03-22 21:41:56 +08:00
|
|
|
|
├── run_integration_test.py # 测试 wrapper
|
|
|
|
|
|
├── compare_ppm.py # 图像比对
|
|
|
|
|
|
├── minimal/ # 最小测试
|
2026-03-20 16:33:35 +08:00
|
|
|
|
│ ├── main.cpp
|
2026-03-22 21:41:56 +08:00
|
|
|
|
│ └── GT.ppm
|
|
|
|
|
|
├── quad/
|
2026-03-22 18:48:56 +08:00
|
|
|
|
│ ├── main.cpp
|
2026-03-22 21:41:56 +08:00
|
|
|
|
│ └── GT.ppm
|
|
|
|
|
|
├── sphere/
|
2026-03-22 18:48:56 +08:00
|
|
|
|
│ ├── main.cpp
|
|
|
|
|
|
│ ├── GT.ppm
|
|
|
|
|
|
│ └── Res/
|
|
|
|
|
|
│ ├── Image/
|
|
|
|
|
|
│ └── Shader/
|
2026-03-22 21:41:56 +08:00
|
|
|
|
└── triangle/
|
2026-03-20 16:33:35 +08:00
|
|
|
|
├── main.cpp
|
2026-03-22 21:41:56 +08:00
|
|
|
|
└── GT.ppm
|
2026-03-20 03:14:55 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-03-22 21:41:56 +08:00
|
|
|
|
**最后更新**: 2026-03-22
|