docs: update RHI API docs
This commit is contained in:
@@ -4,31 +4,56 @@
|
||||
|
||||
**类型**: `class` (abstract)
|
||||
|
||||
**描述**: GPU 同步栅栏抽象接口,用于 GPU/CPU 同步和跨队列同步。
|
||||
**头文件**: `XCEngine/RHI/RHIFence.h`
|
||||
|
||||
**描述**: 围栏接口,用于 GPU 同步
|
||||
|
||||
## 概述
|
||||
|
||||
RHIFence 是 RHI(Render Hardware Interface)子系统中的围栏抽象接口,用于在 CPU 和 GPU 之间进行同步操作。围栏是一种常用的 GPU 同步机制,允许 CPU 等待 GPU 完成特定任务,或让 GPU 等待 CPU 提交特定命令。
|
||||
|
||||
作为抽象基类,RHIFence 定义了一组纯虚接口,具体实现由底层图形 API(如 DirectX 12、Vulkan)提供。
|
||||
|
||||
## 公共方法
|
||||
|
||||
| 方法 | 描述 |
|
||||
|------|------|
|
||||
| [`Shutdown`](shutdown.md) | 关闭并释放资源 |
|
||||
| [`Signal`](signal.md) | 信号栅栏 |
|
||||
| [`Wait`](wait.md) | 等待栅栏 |
|
||||
| [`GetCompletedValue`](get-completed-value.md) | 获取完成值 |
|
||||
| [`IsSignaled`](is-signaled.md) | 检查是否已信号 |
|
||||
| [`GetNativeHandle`](get-native-handle.md) | 获取原生句柄 |
|
||||
| [`Shutdown`](shutdown.md) | 关闭围栏并释放资源 |
|
||||
| [`Signal`](signal.md) | 发送信号(无参数版本) |
|
||||
| [`Signal`](signal-value.md) | 发送信号(带值版本) |
|
||||
| [`Wait`](wait.md) | 等待围栏达到指定值 |
|
||||
| [`GetCompletedValue`](getcompletedvalue.md) | 获取已完成的值 |
|
||||
| [`IsSignaled`](issignaled.md) | 检查围栏是否已发出信号 |
|
||||
| [`GetNativeHandle`](getnativehandle.md) | 获取原生句柄 |
|
||||
|
||||
## 使用示例
|
||||
|
||||
```cpp
|
||||
FenceDesc desc;
|
||||
desc.initialValue = 0;
|
||||
RHIFence* fence = device->CreateFence(desc);
|
||||
#include "XCEngine/RHI/RHIFence.h"
|
||||
|
||||
commandQueue->Signal(fence, 1);
|
||||
fence->Wait(1);
|
||||
// 假设通过 RHI 设备创建围栏
|
||||
RHIFence* fence = device->CreateFence();
|
||||
|
||||
// 提交 GPU 命令...
|
||||
|
||||
// 发送信号
|
||||
fence->Signal();
|
||||
|
||||
// 在 CPU 端等待 GPU 完成
|
||||
fence->Wait(fence->GetCompletedValue());
|
||||
|
||||
// 检查是否已完成
|
||||
if (fence->IsSignaled()) {
|
||||
// GPU 工作已完成
|
||||
}
|
||||
|
||||
// 获取原生句柄用于平台特定操作
|
||||
void* nativeHandle = fence->GetNativeHandle();
|
||||
|
||||
// 关闭围栏
|
||||
fence->Shutdown();
|
||||
```
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [../rhi/rhi.md](../rhi.md) - RHI 模块总览
|
||||
- [RHICommandQueue](../command-queue/command-queue.md) - 命令队列
|
||||
- [RHI 模块总览](../rhi.md) - RHI 模块介绍
|
||||
|
||||
@@ -6,7 +6,9 @@ virtual uint64_t GetCompletedValue() const = 0;
|
||||
|
||||
获取已完成信号值。
|
||||
|
||||
**返回:** 已完成的信号值
|
||||
**参数:** 无
|
||||
|
||||
**返回值:** (uint64_t) 已完成的信号值
|
||||
|
||||
**示例:**
|
||||
|
||||
|
||||
@@ -6,7 +6,9 @@ virtual void* GetNativeHandle() = 0;
|
||||
|
||||
获取原生 API 句柄。
|
||||
|
||||
**返回:** 原生栅栏句柄
|
||||
**参数:** 无
|
||||
|
||||
**返回值:** (void*) 原生栅栏句柄
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
|
||||
34
docs/api/rhi/fence/getcompletedvalue.md
Normal file
34
docs/api/rhi/fence/getcompletedvalue.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# RHIFence::GetCompletedValue
|
||||
|
||||
```cpp
|
||||
virtual uint64_t GetCompletedValue() const = 0;
|
||||
```
|
||||
|
||||
获取围栏已完成的最大值。该值表示 GPU 已完成的所有信号操作中的最高值。
|
||||
|
||||
**参数:** 无
|
||||
|
||||
**返回:** 已完成的围栏值(`uint64_t`)
|
||||
|
||||
**线程安全**:✅
|
||||
|
||||
**复杂度**:O(1)
|
||||
|
||||
**示例**:
|
||||
|
||||
```cpp
|
||||
RHIFence* fence = device->CreateFence();
|
||||
|
||||
fence->Signal(100ULL);
|
||||
|
||||
uint64_t completed = fence->GetCompletedValue();
|
||||
// completed >= 100 表示 GPU 已完成该信号
|
||||
|
||||
if (completed >= 100) {
|
||||
// GPU 已完成 100 之前的所有工作
|
||||
}
|
||||
```
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [RHIFence](fence.md) - 返回类总览
|
||||
32
docs/api/rhi/fence/getnativehandle.md
Normal file
32
docs/api/rhi/fence/getnativehandle.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# RHIFence::GetNativeHandle
|
||||
|
||||
```cpp
|
||||
virtual void* GetNativeHandle() = 0;
|
||||
```
|
||||
|
||||
获取围栏的原生句柄,用于平台特定的图形 API 操作。返回的句柄类型取决于具体的 RHI 实现:
|
||||
- DirectX 12:`ID3D12Fence*`
|
||||
- Vulkan:`VkFence`
|
||||
|
||||
**参数:** 无
|
||||
|
||||
**返回:** 原生句柄指针(`void*`)
|
||||
|
||||
**线程安全**:❌
|
||||
|
||||
**复杂度**:O(1)
|
||||
|
||||
**示例**:
|
||||
|
||||
```cpp
|
||||
RHIFence* fence = device->CreateFence();
|
||||
|
||||
void* nativeHandle = fence->GetNativeHandle();
|
||||
|
||||
// 平台特定用法示例(DirectX 12)
|
||||
// ID3D12Fence* dxFence = static_cast<ID3D12Fence*>(nativeHandle);
|
||||
```
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [RHIFence](fence.md) - 返回类总览
|
||||
@@ -6,7 +6,9 @@ virtual bool IsSignaled() const = 0;
|
||||
|
||||
检查栅栏是否被信号触发。
|
||||
|
||||
**返回:** 如果栅栏已被信号触发返回 true
|
||||
**参数:** 无
|
||||
|
||||
**返回值:** (bool) 如果栅栏已被信号触发返回 true,否则返回 false
|
||||
|
||||
**示例:**
|
||||
|
||||
|
||||
35
docs/api/rhi/fence/issignaled.md
Normal file
35
docs/api/rhi/fence/issignaled.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# RHIFence::IsSignaled
|
||||
|
||||
```cpp
|
||||
virtual bool IsSignaled() const = 0;
|
||||
```
|
||||
|
||||
检查围栏是否已发出信号。如果返回 `true`,表示围栏的当前值已达到或超过其初始信号值。
|
||||
|
||||
**参数:** 无
|
||||
|
||||
**返回:** 如果围栏已发出信号返回 `true`,否则返回 `false`
|
||||
|
||||
**线程安全**:✅
|
||||
|
||||
**复杂度**:O(1)
|
||||
|
||||
**示例**:
|
||||
|
||||
```cpp
|
||||
RHIFence* fence = device->CreateFence();
|
||||
|
||||
fence->Signal();
|
||||
|
||||
// 非阻塞检查围栏状态
|
||||
while (!fence->IsSignaled()) {
|
||||
// 执行其他任务或短暂等待
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(1));
|
||||
}
|
||||
|
||||
// 围栏已发出信号,继续处理
|
||||
```
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [RHIFence](fence.md) - 返回类总览
|
||||
@@ -1,50 +0,0 @@
|
||||
# RHIFence 方法
|
||||
|
||||
## Shutdown
|
||||
|
||||
```cpp
|
||||
virtual void Shutdown() = 0;
|
||||
```
|
||||
|
||||
释放栅栏资源。
|
||||
|
||||
## Signal
|
||||
|
||||
```cpp
|
||||
virtual void Signal() = 0;
|
||||
virtual void Signal(uint64_t value) = 0;
|
||||
```
|
||||
|
||||
信号通知(值为 1)或指定值。
|
||||
|
||||
## Wait
|
||||
|
||||
```cpp
|
||||
virtual void Wait(uint64_t value) = 0;
|
||||
```
|
||||
|
||||
等待指定值。
|
||||
|
||||
## GetCompletedValue
|
||||
|
||||
```cpp
|
||||
virtual uint64_t GetCompletedValue() const = 0;
|
||||
```
|
||||
|
||||
获取已完成的值。
|
||||
|
||||
## IsSignaled
|
||||
|
||||
```cpp
|
||||
virtual bool IsSignaled() const = 0;
|
||||
```
|
||||
|
||||
检查是否已信号通知。
|
||||
|
||||
## GetNativeHandle
|
||||
|
||||
```cpp
|
||||
virtual void* GetNativeHandle() = 0;
|
||||
```
|
||||
|
||||
获取原生 API 句柄。
|
||||
@@ -4,10 +4,25 @@
|
||||
virtual void Shutdown() = 0;
|
||||
```
|
||||
|
||||
释放栅栏资源。
|
||||
关闭围栏并释放所有相关资源。此方法将围栏置于不可用状态,任何后续调用行为未定义。
|
||||
|
||||
**复杂度:** O(1)
|
||||
**线程安全**:❌
|
||||
|
||||
**复杂度**:O(1)
|
||||
|
||||
**示例**:
|
||||
|
||||
```cpp
|
||||
RHIFence* fence = device->CreateFence();
|
||||
|
||||
// 使用围栏...
|
||||
fence->Signal();
|
||||
|
||||
// 关闭围栏,释放资源
|
||||
fence->Shutdown();
|
||||
fence = nullptr;
|
||||
```
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [RHIFence 总览](fence.md) - 返回类总览
|
||||
- [RHIFence](fence.md) - 返回类总览
|
||||
|
||||
34
docs/api/rhi/fence/signal-value.md
Normal file
34
docs/api/rhi/fence/signal-value.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# RHIFence::Signal
|
||||
|
||||
```cpp
|
||||
virtual void Signal(uint64_t value) = 0;
|
||||
```
|
||||
|
||||
将围栏设置为指定的值并通知 GPU。该方法允许设置自定义的围栏值,用于更精细的同步控制。
|
||||
|
||||
**参数:**
|
||||
- `value` - 要设置的围栏值,一个 64 位无符号整数
|
||||
|
||||
**返回:** 无
|
||||
|
||||
**线程安全**:❌
|
||||
|
||||
**复杂度**:O(1)
|
||||
|
||||
**示例**:
|
||||
|
||||
```cpp
|
||||
RHIFence* fence = device->CreateFence();
|
||||
|
||||
// 设置围栏值为特定标记
|
||||
const uint64_t kFrameFenceValue = 1000ULL;
|
||||
fence->Signal(kFrameFenceValue);
|
||||
|
||||
// 等待直到围栏达到指定值
|
||||
fence->Wait(kFrameFenceValue);
|
||||
```
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [RHIFence](fence.md) - 返回类总览
|
||||
- [Signal](signal.md) - 无参数版本的 Signal
|
||||
@@ -2,21 +2,31 @@
|
||||
|
||||
```cpp
|
||||
virtual void Signal() = 0;
|
||||
virtual void Signal(uint64_t value) = 0;
|
||||
```
|
||||
|
||||
向栅栏发送信号。
|
||||
将围栏值设置为当前设备的信号值,并通知 GPU 该围栏已被触发。此方法使围栏处于有信号状态,CPU 和 GPU 可以据此进行同步操作。
|
||||
|
||||
**参数:**
|
||||
- `value` - 信号值(重载版本)
|
||||
**参数:** 无
|
||||
|
||||
**示例:**
|
||||
**返回:** 无
|
||||
|
||||
**线程安全**:❌
|
||||
|
||||
**复杂度**:O(1)
|
||||
|
||||
**示例**:
|
||||
|
||||
```cpp
|
||||
RHIFence* fence = device->CreateFence();
|
||||
|
||||
// 提交 GPU 命令后发送信号
|
||||
fence->Signal();
|
||||
fence->Signal(1);
|
||||
|
||||
// 或者在 CPU 端等待
|
||||
fence->Wait(fence->GetCompletedValue());
|
||||
```
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [RHIFence 总览](fence.md) - 返回类总览
|
||||
- [RHIFence](fence.md) - 返回类总览
|
||||
- [Signal(value)](signal-value.md) - 带值版本的 Signal
|
||||
|
||||
@@ -4,17 +4,32 @@
|
||||
virtual void Wait(uint64_t value) = 0;
|
||||
```
|
||||
|
||||
等待栅栏达到指定值。
|
||||
阻塞当前线程,直到围栏值达到或超过指定值。此方法用于 CPU 端等待 GPU 完成特定任务。
|
||||
|
||||
**参数:**
|
||||
- `value` - 要等待的值
|
||||
- `value` - 要等待的围栏值
|
||||
|
||||
**示例:**
|
||||
**返回:** 无
|
||||
|
||||
**线程安全**:❌
|
||||
|
||||
**复杂度**:O(n),具体取决于 GPU 完成指定值所需时间
|
||||
|
||||
**示例**:
|
||||
|
||||
```cpp
|
||||
fence->Wait(1);
|
||||
RHIFence* fence = device->CreateFence();
|
||||
|
||||
fence->Signal(500ULL);
|
||||
|
||||
// 执行其他 CPU 工作...
|
||||
|
||||
// 等待 GPU 完成到指定值
|
||||
fence->Wait(500ULL);
|
||||
|
||||
// 继续后续处理
|
||||
```
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [RHIFence 总览](fence.md) - 返回类总览
|
||||
- [RHIFence](fence.md) - 返回类总览
|
||||
|
||||
Reference in New Issue
Block a user