fix(D3D12): 修复 D3D12Fence::IsSignaled() 实现错误
- 原来实现假设 GetCompletedValue() > 0 即为 signaled,这是错误的 - 添加 m_signalValue 成员变量跟踪最后一次 signal 的值 - IsSignaled() 现在正确检查 GetCompletedValue() >= m_signalValue
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user