fix(D3D12): 修复 D3D12Fence::IsSignaled() 实现错误

- 原来实现假设 GetCompletedValue() > 0 即为 signaled,这是错误的
- 添加 m_signalValue 成员变量跟踪最后一次 signal 的值
- IsSignaled() 现在正确检查 GetCompletedValue() >= m_signalValue
This commit is contained in:
2026-03-18 01:37:55 +08:00
parent 70571316da
commit a220638298
2 changed files with 3 additions and 1 deletions

View File

@@ -22,7 +22,7 @@ public:
void Signal(uint64_t value) override; void Signal(uint64_t value) override;
void Wait(uint64_t value) override; void Wait(uint64_t value) override;
uint64_t GetCompletedValue() const 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* GetEventHandle() { return m_eventHandle; }
void* GetNativeHandle() override { return m_fence.Get(); } void* GetNativeHandle() override { return m_fence.Get(); }
@@ -31,6 +31,7 @@ public:
private: private:
ComPtr<ID3D12Fence> m_fence; ComPtr<ID3D12Fence> m_fence;
void* m_eventHandle; void* m_eventHandle;
uint64_t m_signalValue = 0;
}; };
} // namespace RHI } // namespace RHI

View File

@@ -38,6 +38,7 @@ void D3D12Fence::Signal() {
} }
void D3D12Fence::Signal(uint64_t value) { void D3D12Fence::Signal(uint64_t value) {
m_signalValue = value;
m_fence->Signal(value); m_fence->Signal(value);
} }