feat(RHI): 实现 RHIFence 抽象基类
- 新增 RHIFence 抽象基类 - D3D12Fence 继承 RHIFence - OpenGLFence 继承 RHIFence - 文档更新 RHIFence 差异处理策略
This commit is contained in:
@@ -539,7 +539,57 @@ public:
|
||||
- OpenGL:GLuint
|
||||
- 解决:GetNativeHandle() 返回 void*
|
||||
|
||||
### 5.9 根签名 vs OpenGL 资源绑定
|
||||
### 5.9 同步栅栏(RHIFence)抽象设计
|
||||
|
||||
#### 5.9.1 设计理念对应
|
||||
|
||||
| 差异点 | 设计理念 | 处理方案 |
|
||||
|--------|---------|---------|
|
||||
| 初始化参数差异 | 求同存异 | 后端各自实现初始化 |
|
||||
| 句柄类型差异 | 底层逃逸 | 统一返回 void* |
|
||||
| 状态查询 | 求同存异 | 统一 IsSignaled/GetCompletedValue 接口 |
|
||||
|
||||
#### 5.9.2 现有实现对比
|
||||
|
||||
| 功能 | D3D12Fence | OpenGLFence |
|
||||
|------|-------------|-------------|
|
||||
| 初始化 | Initialize(device, value) | Initialize(signaled) |
|
||||
| Signal | Signal(value) | Signal()/Signal(value) |
|
||||
| Wait | Wait(value) | Wait(timeoutNs) |
|
||||
| 状态 | GetCompletedValue() | IsSignaled()/GetStatus() |
|
||||
| 句柄 | ID3D12Fence* | GLsync |
|
||||
|
||||
#### 5.9.3 抽象接口定义
|
||||
|
||||
```cpp
|
||||
class RHIFence {
|
||||
public:
|
||||
virtual ~RHIFence() = default;
|
||||
|
||||
virtual void Shutdown() = 0;
|
||||
|
||||
virtual void Signal(uint64_t value) = 0;
|
||||
virtual void Wait(uint64_t value) = 0;
|
||||
virtual uint64_t GetCompletedValue() = 0;
|
||||
virtual bool IsSignaled() const = 0;
|
||||
|
||||
virtual void* GetNativeHandle() = 0;
|
||||
};
|
||||
```
|
||||
|
||||
#### 5.9.4 差异处理策略
|
||||
|
||||
1. **初始化参数差异(求同存异)**
|
||||
- D3D12:需要 device 参数
|
||||
- OpenGL:不需要 device
|
||||
- 解决:后端各自实现 Initialize()
|
||||
|
||||
2. **句柄类型差异(底层逃逸)**
|
||||
- D3D12:ID3D12Fence*
|
||||
- OpenGL:GLsync
|
||||
- 解决:GetNativeHandle() 返回 void*
|
||||
|
||||
### 5.10 根签名 vs OpenGL 资源绑定
|
||||
- **D3D12**:显式 `RootSignature` 定义资源绑定规则
|
||||
- **OpenGL**:隐式通过 `glUniformLocation`、`glBindTextureUnit` 绑定
|
||||
- **解决方案**:
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user