Files
XCEngine/docs/api/rhi/rhi-fence.md

69 lines
1.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# RHIFence
**命名空间**: `XCEngine::RHI`
**类型**: `class` (abstract)
**描述**: GPU 同步栅栏抽象接口,用于 GPU/CPU 同步和跨队列同步。
## 概述
`RHIFence` 封装了 GPU 栅栏操作,提供了一种可靠的方式来同步 CPU 和 GPU 之间的执行,以及不同命令队列之间的同步。
## 公共方法
### 生命周期
| 方法 | 描述 |
|------|------|
| `virtual void Shutdown()` | 释放栅栏资源 |
### 同步操作
| 方法 | 描述 |
|------|------|
| `virtual void Signal()` | 信号通知(值为 1 |
| `virtual void Signal(uint64_t value)` | 信号通知(指定值) |
| `virtual void Wait(uint64_t value)` | 等待指定值 |
| `virtual uint64_t GetCompletedValue() const` | 获取已完成的值 |
| `virtual bool IsSignaled() const` | 检查是否已信号通知 |
### 其他
| 方法 | 描述 |
|------|------|
| `virtual void* GetNativeHandle()` | 获取原生 API 句柄 |
## 使用示例
```cpp
// 创建栅栏
FenceDesc desc;
desc.initialValue = 0;
RHIFence* fence = device->CreateFence(desc);
// CPU 等待 GPU 完成工作
commandQueue->Signal(fence, 1);
fence->Wait(1);
// 或者使用 GetCompletedValue 轮询
commandQueue->Signal(fence, 100);
while (fence->GetCompletedValue() < 100) {
// CPU 可以做其他工作
DoOtherWork();
}
// 检查栅栏状态
if (fence->IsSignaled()) {
// GPU 工作已完成
}
// 重置和复用
fence->Signal(0);
```
## 相关文档
- [RHICommandQueue](./rhi-command-queue.md) - 命令队列
- [RHIDevice](./rhi-device.md) - 创建设备