docs: update RHI API docs

This commit is contained in:
2026-03-20 02:35:45 +08:00
parent ea756c0177
commit 070b444f8f
501 changed files with 13493 additions and 2022 deletions

View File

@@ -4,31 +4,56 @@
**类型**: `class` (abstract)
**描述**: GPU 同步栅栏抽象接口,用于 GPU/CPU 同步和跨队列同步。
**头文件**: `XCEngine/RHI/RHIFence.h`
**描述**: 围栏接口,用于 GPU 同步
## 概述
RHIFence 是 RHIRender 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 模块介绍

View File

@@ -6,7 +6,9 @@ virtual uint64_t GetCompletedValue() const = 0;
获取已完成信号值。
**返回** 已完成的信号值
**参数**
**返回值:** (uint64_t) 已完成的信号值
**示例:**

View File

@@ -6,7 +6,9 @@ virtual void* GetNativeHandle() = 0;
获取原生 API 句柄。
**返回** 原生栅栏句柄
**参数**
**返回值:** (void*) 原生栅栏句柄
**复杂度:** O(1)

View 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) - 返回类总览

View 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) - 返回类总览

View File

@@ -6,7 +6,9 @@ virtual bool IsSignaled() const = 0;
检查栅栏是否被信号触发。
**返回** 如果栅栏已被信号触发返回 true
**参数**
**返回值:** (bool) 如果栅栏已被信号触发返回 true否则返回 false
**示例:**

View 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) - 返回类总览

View File

@@ -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 句柄。

View File

@@ -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) - 返回类总览

View 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

View File

@@ -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

View File

@@ -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) - 返回类总览