61 lines
1.8 KiB
Markdown
61 lines
1.8 KiB
Markdown
|
|
# D3D12UnorderedAccessView
|
|||
|
|
|
|||
|
|
## 命名空间
|
|||
|
|
|
|||
|
|
`XCEngine::RHI`
|
|||
|
|
|
|||
|
|
## 类型
|
|||
|
|
|
|||
|
|
类 (Class)
|
|||
|
|
|
|||
|
|
## 描述
|
|||
|
|
|
|||
|
|
D3D12 无序访问视图 (Unordered Access View, UAV) 封装类,用于在 D3D12 渲染管线中提供对资源的无序读/写访问能力。UAV 允许着色器对资源进行非同步访问,适用于并行计算和延迟渲染等场景。
|
|||
|
|
|
|||
|
|
## 概述
|
|||
|
|
|
|||
|
|
`D3D12UnorderedAccessView` 封装了 D3D12 UAV 的创建和生命周期管理。UAV 是一种可以同时被 GPU 读取和写入的资源视图,常见用途包括:
|
|||
|
|
|
|||
|
|
- 计算着色器 (Compute Shader) 的数据存储
|
|||
|
|
- 延迟渲染中的光照参数存储
|
|||
|
|
- 粒子系统的位置/速度数据
|
|||
|
|
- 纹理流式传输缓冲
|
|||
|
|
|
|||
|
|
## 公共方法表格
|
|||
|
|
|
|||
|
|
| 方法 | 签名 | 描述 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| `Initialize` | `void Initialize(ID3D12Device* device, ID3D12Resource* resource, const D3D12_UNORDERED_ACCESS_VIEW_DESC* desc = nullptr)` | 初始化 UAV,创建 D3D12 无序访问视图 |
|
|||
|
|
| `Shutdown` | `void Shutdown()` | 释放 UAV 相关资源 |
|
|||
|
|
| `GetCPUDescriptorHandle` | `D3D12_CPU_DESCRIPTOR_HANDLE GetCPUDescriptorHandle() const` | 获取 CPU 端的描述符句柄 |
|
|||
|
|
|
|||
|
|
## 使用示例
|
|||
|
|
|
|||
|
|
```cpp
|
|||
|
|
#include "XCEngine/RHI/D3D12/D3D12UnorderedAccessView.h"
|
|||
|
|
#include "XCEngine/RHI/D3D12/D3D12Device.h"
|
|||
|
|
|
|||
|
|
// 创建设备和资源后...
|
|||
|
|
D3D12Device* device = ...;
|
|||
|
|
ID3D12Resource* bufferResource = ...;
|
|||
|
|
|
|||
|
|
// 创建无序访问视图
|
|||
|
|
XCEngine::RHI::D3D12UnorderedAccessView uav;
|
|||
|
|
uav.Initialize(device->GetDevice(), bufferResource, nullptr);
|
|||
|
|
|
|||
|
|
// 在命令列表中设置 UAV
|
|||
|
|
commandList->SetComputeRootUnorderedAccessView(
|
|||
|
|
parameterIndex,
|
|||
|
|
uav.GetCPUDescriptorHandle()
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
// 使用完毕后清理
|
|||
|
|
uav.Shutdown();
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 相关文档
|
|||
|
|
|
|||
|
|
- [D3D12ShaderResourceView](../shader-resource-view/)
|
|||
|
|
- [D3D12RenderTargetView](../render-target-view/)
|
|||
|
|
- [D3D12ConstantBufferView](../constant-buffer-view/)
|