Commit Graph

14 Commits

Author SHA1 Message Date
a6c6482125 D3D12: Fix Quad test screenshot and update texture
- Fix SetGraphicsRootDescriptorTable call order (SetRootSignature before SetPipelineState)
- Rename texture earth_d.jpg -> earth.png
- Fix vertex order for TriangleStrip quad rendering
- Add integration test README
- Add debug logging to D3D12Screenshot
- Remove obsolete run.bat
2026-03-21 15:54:15 +08:00
c563db3123 D3D12: Add Quad integration test with texture sampling
- Add quad test that renders a textured quad with earth texture
- Add quad.hlsl shader with texture sampling (Texture2D + SamplerState)
- Add SRV descriptor heap and root signature with SRV table
- Fix MessageBox errors -> Log() console output
- Fix shader float2->float4 type mismatch
- Fix texture initialization to use proper command list handling
- Add shader error output to stderr in D3D12Shader
- Add Map error logging in D3D12Screenshot
2026-03-21 12:38:16 +08:00
d6ff7b6d1b D3D12: Refactor integration tests with separate output directories 2026-03-20 19:17:20 +08:00
45fd25dce3 D3D12: Add triangle integration test with rainbow gradient
- Add triangle test with vertex buffer and custom pipeline state
- Add triangle.hlsl shader with position and color per vertex
- Fix cull mode (NONE) and disable depth test for correct rendering
- Register D3D12_Triangle_Integration CTest
- Add GT.ppm golden image
2026-03-20 19:05:22 +08:00
34c04af6cb D3D12: Fix texture ownership semantics and remove GetSwapChain() exposure
This commit fixes the D3D12 texture architecture issues:

1. D3D12Texture ownership semantics:
   - Add m_ownsResource member to track resource ownership
   - InitializeFromExisting() now takes ownsResource parameter (default false)
   - Shutdown() only releases resource if ownsResource is true
   - Initialize() sets m_ownsResource = true for created resources

2. D3D12SwapChain changes:
   - Remove GetSwapChain() method (was exposing native D3D12 API)
   - Change GetBackBuffer() to return reference instead of pointer
   - Back buffers initialized with ownsResource = false

3. minimal/main.cpp updates:
   - Remove gColorRTs[2] array (was duplicating back buffer wrapping)
   - Direct use of gSwapChain.GetBackBuffer(i) instead
   - All references updated to use encapsulated API

4. Documentation:
   - Update TEST_SPEC.md v1.3
   - Remove known limitation 7.2 (minimal GetBuffer issue fixed)
   - Add D3D12_Texture_Architecture_Fix_Plan.md design document
2026-03-20 17:58:27 +08:00
0017388498 Rename GT_minimal.ppm to GT.ppm for D3D12 minimal integration test
- Rename golden image file to match simpler convention
- Update CMakeLists.txt reference
- Update TEST_SPEC.md documentation
- Update run_tests.py reference
2026-03-20 17:41:07 +08:00
3cd3b04c7e D3D12: Add Screenshot wrapper overload and document known limitations
- Add D3D12Screenshot::Capture(D3D12Device&, D3D12CommandQueue&, D3D12Texture&, const char*) wrapper overload
- Update minimal integration test to use encapsulated APIs
- Add DescriptorHeap wrapper unit tests
- Document minimal GetBuffer native call as known limitation in TEST_SPEC.md
2026-03-20 17:36:51 +08:00
dba3dc23f2 重构D3D12集成测试目录结构,每个测试独立子文件夹隔离资源 2026-03-20 16:33:35 +08:00
b2228db3ee test: add test improvement plan, update CMakeLists with correct GT_minimal reference 2026-03-20 03:13:24 +08:00
e242b0f5a7 test: register integration tests in CTest with Python wrapper 2026-03-20 03:08:08 +08:00
4c6e7af02e refactor: encapsulate frame fence synchronization in CommandQueue
- Add WaitForPreviousFrame() and GetCurrentFrame() to RHICommandQueue interface
- D3D12CommandQueue now manages frame fence internally
- ExecuteCommandLists automatically signals fence after command execution
- OpenGLCommandQueue provides stub implementations for interface compliance
- Minimal test now uses CommandQueue::WaitForPreviousFrame() instead of manual fence
2026-03-20 02:51:34 +08:00
b7d66a09de fix: replace Sleep with proper fence synchronization in minimal test 2026-03-20 02:49:19 +08:00
77ef74bec6 fix: D3D12 screenshot implementation and tests 2026-03-20 02:35:59 +08:00
a647f5e8ec 修复 D3D12 截图功能:修复 GPU 过载导致的设备移除问题
问题根因:
1. 渲染循环帧率过高导致 GPU 过载(TDR)
2. D3D12CommandList::Reset() 未正确调用底层 Reset()

修复内容:
1. 在 Present 后添加 Sleep(10) 延迟防止 GPU 过载
2. 修复 D3D12CommandList::Reset() 正确调用底层 m_commandList->Reset()
3. 在 D3D12CommandList 中存储 CommandAllocator 引用
4. 在 main_minimal.cpp 中添加截图调用逻辑(30帧后截图保存为 minimal.ppm)

修改文件:
- engine/include/XCEngine/RHI/D3D12/D3D12CommandList.h
- engine/src/RHI/D3D12/D3D12CommandList.cpp
- tests/RHI/D3D12/integration/main_minimal.cpp (新增)
2026-03-20 02:25:15 +08:00