From a220638298e7544786a48b23808c5a5a7be3bb6d Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Wed, 18 Mar 2026 01:37:55 +0800 Subject: [PATCH] =?UTF-8?q?fix(D3D12):=20=E4=BF=AE=E5=A4=8D=20D3D12Fence::?= =?UTF-8?q?IsSignaled()=20=E5=AE=9E=E7=8E=B0=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 原来实现假设 GetCompletedValue() > 0 即为 signaled,这是错误的 - 添加 m_signalValue 成员变量跟踪最后一次 signal 的值 - IsSignaled() 现在正确检查 GetCompletedValue() >= m_signalValue --- engine/include/XCEngine/RHI/D3D12/D3D12Fence.h | 3 ++- engine/src/RHI/D3D12/D3D12Fence.cpp | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/engine/include/XCEngine/RHI/D3D12/D3D12Fence.h b/engine/include/XCEngine/RHI/D3D12/D3D12Fence.h index fb4a6348..b7f55d38 100644 --- a/engine/include/XCEngine/RHI/D3D12/D3D12Fence.h +++ b/engine/include/XCEngine/RHI/D3D12/D3D12Fence.h @@ -22,7 +22,7 @@ public: void Signal(uint64_t value) override; void Wait(uint64_t value) override; uint64_t GetCompletedValue() const override; - bool IsSignaled() const override { return GetCompletedValue() > 0; } + bool IsSignaled() const override { return m_fence->GetCompletedValue() >= m_signalValue; } void* GetEventHandle() { return m_eventHandle; } void* GetNativeHandle() override { return m_fence.Get(); } @@ -31,6 +31,7 @@ public: private: ComPtr m_fence; void* m_eventHandle; + uint64_t m_signalValue = 0; }; } // namespace RHI diff --git a/engine/src/RHI/D3D12/D3D12Fence.cpp b/engine/src/RHI/D3D12/D3D12Fence.cpp index 188bb17e..abcb86c1 100644 --- a/engine/src/RHI/D3D12/D3D12Fence.cpp +++ b/engine/src/RHI/D3D12/D3D12Fence.cpp @@ -38,6 +38,7 @@ void D3D12Fence::Signal() { } void D3D12Fence::Signal(uint64_t value) { + m_signalValue = value; m_fence->Signal(value); }