69 lines
1.5 KiB
Markdown
69 lines
1.5 KiB
Markdown
# 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) - 创建设备
|