RHI: Add DescriptorPool unit tests (8 tests, P1-5)
This commit is contained in:
13
RHI模块测试重构.md
13
RHI模块测试重构.md
@@ -593,7 +593,8 @@ TEST_F(OpenGLTestFixture, CommandList_Dispatch) {
|
|||||||
|
|
||||||
| 优先级 | 问题 | 工作量 | 影响 | 状态 |
|
| 优先级 | 问题 | 工作量 | 影响 | 状态 |
|
||||||
|--------|------|--------|------|------|
|
|--------|------|--------|------|------|
|
||||||
| 5 | 添加 DescriptorPool/Set 测试 | 中 | 已实现未测试 | ⏳ 待完成 |
|
| 5 | 添加 DescriptorPool 测试 | 中 | 已实现未测试 | ✅ 已完成 (DescriptorPool) |
|
||||||
|
| 5b | DescriptorSet 测试 | 中 | OpenGL 需要 GL context,暂跳过 | ⚠️ 待完成 |
|
||||||
| 6 | CommandList 测试增强 | 大 | 大部分传递 nullptr | ⏳ 待完成 |
|
| 6 | CommandList 测试增强 | 大 | 大部分传递 nullptr | ⏳ 待完成 |
|
||||||
| 7 | 添加 Compute/Dispatch 测试 | 中 | 重要功能缺失 | ⏳ 待完成 |
|
| 7 | 添加 Compute/Dispatch 测试 | 中 | 重要功能缺失 | ⏳ 待完成 |
|
||||||
| 8 | D3D12 PSO/shader 测试增强 | 小 | 当前测试 trivial | ⏳ 待完成 |
|
| 8 | D3D12 PSO/shader 测试增强 | 小 | 当前测试 trivial | ⏳ 待完成 |
|
||||||
@@ -720,12 +721,20 @@ ctest -R "D3D12|OpenGL|RHITestFixture" -C Debug --output-on-failure
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**文档版本**: 1.2
|
**文档版本**: 1.3
|
||||||
**最后更新**: 2026-03-25
|
**最后更新**: 2026-03-25
|
||||||
**作者**: XCEngine Team
|
**作者**: XCEngine Team
|
||||||
|
|
||||||
## 更新日志
|
## 更新日志
|
||||||
|
|
||||||
|
### v1.3 (2026-03-25)
|
||||||
|
- P1-5: DescriptorPool 测试 ✅ 已完成
|
||||||
|
- 新增 `test_descriptor.cpp`,8个 DescriptorPool 测试
|
||||||
|
- 测试通过:D3D12 8 + OpenGL 8 = 16 tests
|
||||||
|
- DescriptorSet 测试暂跳过(OpenGL 需要 GL context)
|
||||||
|
- 测试结果:D3D12 108测试 + OpenGL 108测试 = 216测试全部通过
|
||||||
|
- 集成测试:8/8 全部通过
|
||||||
|
|
||||||
### v1.2 (2026-03-25)
|
### v1.2 (2026-03-25)
|
||||||
- P0-3: RenderPass 测试 ✅ 已完成
|
- P0-3: RenderPass 测试 ✅ 已完成
|
||||||
- 新增 `test_render_pass.cpp`,10个测试
|
- 新增 `test_render_pass.cpp`,10个测试
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ set(TEST_SOURCES
|
|||||||
test_framebuffer.cpp
|
test_framebuffer.cpp
|
||||||
test_fence.cpp
|
test_fence.cpp
|
||||||
test_sampler.cpp
|
test_sampler.cpp
|
||||||
|
test_descriptor.cpp
|
||||||
${CMAKE_SOURCE_DIR}/tests/opengl/package/src/glad.c
|
${CMAKE_SOURCE_DIR}/tests/opengl/package/src/glad.c
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
119
tests/RHI/unit/test_descriptor.cpp
Normal file
119
tests/RHI/unit/test_descriptor.cpp
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
#include "fixtures/RHITestFixture.h"
|
||||||
|
#include "XCEngine/RHI/RHIDescriptorPool.h"
|
||||||
|
#include "XCEngine/RHI/RHIDescriptorSet.h"
|
||||||
|
#include "XCEngine/RHI/RHISampler.h"
|
||||||
|
|
||||||
|
using namespace XCEngine::RHI;
|
||||||
|
|
||||||
|
TEST_P(RHITestFixture, DescriptorPool_Create_CBV_SRV_UAV) {
|
||||||
|
DescriptorPoolDesc desc = {};
|
||||||
|
desc.type = DescriptorHeapType::CBV_SRV_UAV;
|
||||||
|
desc.descriptorCount = 10;
|
||||||
|
desc.shaderVisible = true;
|
||||||
|
|
||||||
|
RHIDescriptorPool* pool = GetDevice()->CreateDescriptorPool(desc);
|
||||||
|
if (pool != nullptr) {
|
||||||
|
EXPECT_EQ(pool->GetType(), DescriptorHeapType::CBV_SRV_UAV);
|
||||||
|
EXPECT_EQ(pool->GetDescriptorCount(), 10u);
|
||||||
|
pool->Shutdown();
|
||||||
|
delete pool;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_P(RHITestFixture, DescriptorPool_Create_Sampler) {
|
||||||
|
DescriptorPoolDesc desc = {};
|
||||||
|
desc.type = DescriptorHeapType::Sampler;
|
||||||
|
desc.descriptorCount = 5;
|
||||||
|
desc.shaderVisible = true;
|
||||||
|
|
||||||
|
RHIDescriptorPool* pool = GetDevice()->CreateDescriptorPool(desc);
|
||||||
|
if (pool != nullptr) {
|
||||||
|
EXPECT_EQ(pool->GetType(), DescriptorHeapType::Sampler);
|
||||||
|
pool->Shutdown();
|
||||||
|
delete pool;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_P(RHITestFixture, DescriptorPool_Create_RTV) {
|
||||||
|
DescriptorPoolDesc desc = {};
|
||||||
|
desc.type = DescriptorHeapType::RTV;
|
||||||
|
desc.descriptorCount = 4;
|
||||||
|
desc.shaderVisible = false;
|
||||||
|
|
||||||
|
RHIDescriptorPool* pool = GetDevice()->CreateDescriptorPool(desc);
|
||||||
|
if (pool != nullptr) {
|
||||||
|
EXPECT_EQ(pool->GetType(), DescriptorHeapType::RTV);
|
||||||
|
EXPECT_EQ(pool->GetDescriptorCount(), 4u);
|
||||||
|
pool->Shutdown();
|
||||||
|
delete pool;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_P(RHITestFixture, DescriptorPool_Create_DSV) {
|
||||||
|
DescriptorPoolDesc desc = {};
|
||||||
|
desc.type = DescriptorHeapType::DSV;
|
||||||
|
desc.descriptorCount = 2;
|
||||||
|
desc.shaderVisible = false;
|
||||||
|
|
||||||
|
RHIDescriptorPool* pool = GetDevice()->CreateDescriptorPool(desc);
|
||||||
|
if (pool != nullptr) {
|
||||||
|
EXPECT_EQ(pool->GetType(), DescriptorHeapType::DSV);
|
||||||
|
pool->Shutdown();
|
||||||
|
delete pool;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_P(RHITestFixture, DescriptorPool_GetDescriptorCount) {
|
||||||
|
DescriptorPoolDesc desc = {};
|
||||||
|
desc.type = DescriptorHeapType::CBV_SRV_UAV;
|
||||||
|
desc.descriptorCount = 100;
|
||||||
|
desc.shaderVisible = false;
|
||||||
|
|
||||||
|
RHIDescriptorPool* pool = GetDevice()->CreateDescriptorPool(desc);
|
||||||
|
if (pool != nullptr) {
|
||||||
|
EXPECT_EQ(pool->GetDescriptorCount(), 100u);
|
||||||
|
pool->Shutdown();
|
||||||
|
delete pool;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_P(RHITestFixture, DescriptorPool_GetType) {
|
||||||
|
DescriptorPoolDesc desc = {};
|
||||||
|
desc.type = DescriptorHeapType::Sampler;
|
||||||
|
desc.descriptorCount = 8;
|
||||||
|
desc.shaderVisible = true;
|
||||||
|
|
||||||
|
RHIDescriptorPool* pool = GetDevice()->CreateDescriptorPool(desc);
|
||||||
|
if (pool != nullptr) {
|
||||||
|
EXPECT_EQ(pool->GetType(), DescriptorHeapType::Sampler);
|
||||||
|
pool->Shutdown();
|
||||||
|
delete pool;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_P(RHITestFixture, DescriptorPool_Shutdown) {
|
||||||
|
DescriptorPoolDesc desc = {};
|
||||||
|
desc.type = DescriptorHeapType::CBV_SRV_UAV;
|
||||||
|
desc.descriptorCount = 10;
|
||||||
|
desc.shaderVisible = false;
|
||||||
|
|
||||||
|
RHIDescriptorPool* pool = GetDevice()->CreateDescriptorPool(desc);
|
||||||
|
if (pool != nullptr) {
|
||||||
|
pool->Shutdown();
|
||||||
|
delete pool;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_P(RHITestFixture, DescriptorPool_DoubleShutdown) {
|
||||||
|
DescriptorPoolDesc desc = {};
|
||||||
|
desc.type = DescriptorHeapType::CBV_SRV_UAV;
|
||||||
|
desc.descriptorCount = 10;
|
||||||
|
desc.shaderVisible = false;
|
||||||
|
|
||||||
|
RHIDescriptorPool* pool = GetDevice()->CreateDescriptorPool(desc);
|
||||||
|
if (pool != nullptr) {
|
||||||
|
pool->Shutdown();
|
||||||
|
pool->Shutdown();
|
||||||
|
delete pool;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user