80 lines
2.0 KiB
Markdown
80 lines
2.0 KiB
Markdown
---
|
||
title: 其他RHI改进
|
||
date: 2026-05-03 00:00:00
|
||
excerpt: PSO 异步创建、纹理池管理、CommandList 任务分流等 D3D12 改进
|
||
tags:
|
||
- ARC
|
||
- D3D12RHI
|
||
rating: ⭐
|
||
---
|
||
|
||
# 其他 RHI 改进
|
||
|
||
返回 [[D3D12RHI]]
|
||
|
||
## 概述
|
||
|
||
ARC 引擎在 D3D12 RHI 层面做了多项基础设施改进,涵盖 PSO 管理、纹理内存、命令列表执行和光线追踪支持。
|
||
|
||
## PSO 异步创建
|
||
|
||
### Busy-Wait + Stall 告警
|
||
|
||
PSO 创建改为异步模式,当 Shader 未就绪时 busy-wait 并记录 stall 时间:
|
||
|
||
```cpp
|
||
// PSO 创建等待时输出告警日志
|
||
// 帮助识别哪些 Shader 组合导致了渲染卡顿
|
||
```
|
||
|
||
### 部分编译(bPartial)
|
||
|
||
Ray Tracing Pipeline 支持部分编译——不需要等待所有 Hit Shader 就绪即可使用基础管线。参见 [[光线追踪与PSO]]。
|
||
|
||
## 纹理池管理
|
||
|
||
新增 CVar `D3D12.TexturePoolOnlyAccountStreamableTexture`:
|
||
- 纹理池统计时仅计算可流式加载的纹理
|
||
- 避免非流式纹理(如 UI、字体)干扰流式预算
|
||
|
||
## CommandList 任务分流
|
||
|
||
CVar `r.D3D12.ExecuteCommandListTask`:
|
||
- 将部分 Command List 执行工作从 RHI 线程分流到 Task 线程
|
||
- 减少 RHI 线程压力
|
||
|
||
## Ray Tracing 改进
|
||
|
||
- View Descriptor Heap 扩展到 250k 描述符
|
||
- BLAS Compaction 支持(减少加速结构内存占用)
|
||
- PSO 缓存改进
|
||
|
||
## Buffer Staging
|
||
|
||
改进 GPU Readback 的 Staging Buffer 管理,减少 CPU-GPU 同步开销。
|
||
|
||
## Back Buffer 引用
|
||
|
||
安全处理 Presentable Texture 的引用计数,防止拷贝操作时的悬空引用。
|
||
|
||
## D3D12RHIBridge
|
||
|
||
新增 `D3D12RHIBridge.h`,暴露底层接口供外部模块使用:
|
||
|
||
```cpp
|
||
// 获取图形命令列表和队列
|
||
GetGfxCommandListAndQueue();
|
||
|
||
// 获取拷贝命令队列
|
||
GetCopyCommandQueue();
|
||
```
|
||
|
||
## 修改文件列表
|
||
|
||
涉及 `Source/Runtime/D3D12RHI/` 下约 60 个文件,主要覆盖:
|
||
- `Private/D3D12Commands.cpp` — CommandList 执行
|
||
- `Private/D3D12PipelineState.cpp` — PSO 缓存
|
||
- `Private/D3D12Texture.cpp` — 纹理池
|
||
- `Private/D3D12RayTracing.cpp` — RT 改进
|
||
- `Public/D3D12RHIBridge.h` — **新增**
|