【关键节点】修复D3D12CommandQueue::ExecuteCommandLists类型混淆bug并完善集成测试配置

1. D3D12CommandQueue::ExecuteCommandLists修复:确保正确调用GetNativeHandle()
2. 集成测试修复:传递&gCommandList而不是gCommandList.GetCommandList()
3. CMakeLists.txt修复:添加renderdoc.dll到所有D3D12/OpenGL集成测试的POST_BUILD命令

测试验证:
- 单元测试:144/144通过
- D3D12集成测试:minimal/quad/triangle/sphere全部通过
- OpenGL集成测试:minimal/quad/triangle/sphere全部通过
This commit is contained in:
2026-03-24 05:00:38 +08:00
parent 0a3fe842b9
commit eb4840eac4
11 changed files with 23 additions and 5 deletions

View File

@@ -59,7 +59,7 @@ void D3D12CommandQueue::ExecuteCommandLists(uint32_t count, void** lists) {
std::vector<ID3D12CommandList*> cmdLists(count);
for (uint32_t i = 0; i < count; ++i) {
if (lists[i]) {
RHICommandList* cmdList = static_cast<RHICommandList*>(lists[i]);
auto* cmdList = static_cast<RHICommandList*>(lists[i]);
cmdLists[i] = static_cast<ID3D12CommandList*>(cmdList->GetNativeHandle());
}
}

View File

@@ -151,7 +151,7 @@ void WaitForGPU() {
// Execute command list
void ExecuteCommandList() {
gCommandList.Close();
void* commandLists[] = { gCommandList.GetCommandList() };
void* commandLists[] = { &gCommandList };
gCommandQueue.ExecuteCommandLists(1, commandLists);
}

View File

@@ -48,6 +48,9 @@ add_custom_command(TARGET d3d12_quad_test POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${CMAKE_CURRENT_SOURCE_DIR}/GT.ppm
$<TARGET_FILE_DIR:d3d12_quad_test>/
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${ENGINE_ROOT_DIR}/third_party/renderdoc/renderdoc.dll
$<TARGET_FILE_DIR:d3d12_quad_test>/
)
add_test(NAME d3d12_quad_test

View File

@@ -282,7 +282,7 @@ void WaitForGPU() {
void ExecuteCommandList() {
gCommandList.Close();
void* commandLists[] = { gCommandList.GetCommandList() };
void* commandLists[] = { &gCommandList };
gCommandQueue.ExecuteCommandLists(1, commandLists);
}

View File

@@ -46,6 +46,9 @@ add_custom_command(TARGET d3d12_sphere_test POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${CMAKE_CURRENT_SOURCE_DIR}/GT.ppm
$<TARGET_FILE_DIR:d3d12_sphere_test>/
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${ENGINE_ROOT_DIR}/third_party/renderdoc/renderdoc.dll
$<TARGET_FILE_DIR:d3d12_sphere_test>/
)
add_test(NAME d3d12_sphere_test

View File

@@ -370,7 +370,7 @@ void WaitForGPU() {
void ExecuteCommandList() {
gCommandList.Close();
void* commandLists[] = { gCommandList.GetCommandList() };
void* commandLists[] = { &gCommandList };
gCommandQueue.ExecuteCommandLists(1, commandLists);
}

View File

@@ -45,6 +45,9 @@ add_custom_command(TARGET d3d12_triangle_test POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${CMAKE_CURRENT_SOURCE_DIR}/GT.ppm
$<TARGET_FILE_DIR:d3d12_triangle_test>/
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${ENGINE_ROOT_DIR}/third_party/renderdoc/renderdoc.dll
$<TARGET_FILE_DIR:d3d12_triangle_test>/
)
add_test(NAME d3d12_triangle_test

View File

@@ -217,7 +217,7 @@ void WaitForGPU() {
void ExecuteCommandList() {
gCommandList.Close();
void* commandLists[] = { gCommandList.GetCommandList() };
void* commandLists[] = { &gCommandList };
gCommandQueue.ExecuteCommandLists(1, commandLists);
}

View File

@@ -45,6 +45,9 @@ add_custom_command(TARGET opengl_quad_test POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${CMAKE_CURRENT_SOURCE_DIR}/GT.ppm
$<TARGET_FILE_DIR:opengl_quad_test>/
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${ENGINE_ROOT_DIR}/third_party/renderdoc/renderdoc.dll
$<TARGET_FILE_DIR:opengl_quad_test>/
)
add_test(NAME opengl_quad_test

View File

@@ -45,6 +45,9 @@ add_custom_command(TARGET opengl_sphere_test POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${CMAKE_CURRENT_SOURCE_DIR}/GT.ppm
$<TARGET_FILE_DIR:opengl_sphere_test>/
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${ENGINE_ROOT_DIR}/third_party/renderdoc/renderdoc.dll
$<TARGET_FILE_DIR:opengl_sphere_test>/
)
add_test(NAME opengl_sphere_test

View File

@@ -45,6 +45,9 @@ add_custom_command(TARGET opengl_triangle_test POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${CMAKE_CURRENT_SOURCE_DIR}/GT.ppm
$<TARGET_FILE_DIR:opengl_triangle_test>/
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${ENGINE_ROOT_DIR}/third_party/renderdoc/renderdoc.dll
$<TARGET_FILE_DIR:opengl_triangle_test>/
)
add_test(NAME opengl_triangle_test