Pipeline State 界面概览
Pipeline State 查看器是 RenderDoc 中用于查看当前绑定管线状态的核心窗口。它将整条图形管线按阶段分组展示,每个阶段对应独立的折叠面板。
Vulkan 管线阶段面板
Vulkan 管线的 Pipeline State 查看器按如下阶段组织面板:
- Vertex Input (VI): 顶点属性描述、顶点绑定、Index Buffer 绑定情况。
- Vertex Shader (VS): 当前绑定的顶点着色器入口点、反汇编、反射信息。
- Tessellation Control / Evaluation Shader: 曲面细分阶段(如启用)。
- Geometry Shader (GS): 几何着色器(如启用)。
- Rasterizer: 光栅化参数,包括 viewport、scissor、多边形模式、面剔除方向等。
- Fragment Shader (FS): 当前绑定的片段着色器,资源绑定(Textures、Samplers、UBOs、SSBOs)均在此处展开。
- Color Blending / Depth Stencil: 混合状态、深度写入与测试、Stencil 配置。
- Framebuffer Output: 当前绑定的 Render Pass Attachments、Color 与 Depth/Stencil Target。
OpenGL 管线阶段面板
OpenGL 管线的面板分组与 Vulkan 类似但命名有所不同:
- Vertex Attributes / VAO: 顶点数组对象中各属性的格式与绑定的 VBO。
- Vertex Shader / Tessellation / Geometry Shader: 各 Shader Stage 及其反汇编。
- Rasterizer: Viewport、Scissor、多边形偏移(Polygon Offset)、Clipping 参数。
- Fragment Shader: 片段着色器及其纹理单元、UBO、SSBO 绑定。
- Framebuffer: 当前绑定的 FBO,Color Attachments 与 Depth/Stencil Attachment。
- Blend / Depth / Stencil: 逐 Attachment 混合配置、深度测试参数、Stencil 操作。
界面中带有箭头图标 (go arrow) 的条目表示可以进入更详细的视图;以粗体并附有链接图标的资源名称可点击,跳转到 Resource Inspector 窗口查看完整的资源信息。
Vertex Input / VS / Rasterizer / Fragment Shader / Framebuffer 各阶段查看
Vertex Input
Vertex Input 阶段展示顶点缓冲区的绑定情况:
- 列出每个顶点属性的 location、格式(如
VK_FORMAT_R32G32B32_SFLOAT)、绑定的 Buffer 及其 offset/stride。 - 对绑定的 Vertex Buffer 或 Index Buffer 点击 go arrow 可打开 Mesh Viewer,在 3D 视口中直接预览顶点数据。
Vertex Shader (VS)
VS 面板顶部显示当前绑定的 Shader 入口点名称(通常为 main)。展开后可见:
- 高级着色语言源码(如 GLSL/HLSL):附带语法高亮,前提是编译时保留了调试信息。
- 低级反汇编(SPIR-V / GLSL IR):由 Bytecode 直接反汇编生成。
- 若 Shader 调试信息完整,反射数据将整合到反汇编中,补全资源槽位名称和常量名称。
点击编辑按钮可进入 Live-Edit Shader 模式,在不重新捕获的情况下实时修改着色器并观察效果。
Rasterizer
Rasterizer 面板列出光栅化阶段的全部状态,包括:
- Viewport 列表(位置、宽高、深度范围)。
- Scissor 矩形列表。
- 多边形填充模式(Fill / Line / Point)。
- 面剔除模式(Back / Front / None)及正面方向(CW / CCW)。
- 深度偏移(Depth Bias、Slope Scaled Depth Bias)。
- 多采样参数(MSAA、Sample Shading)。
Fragment Shader (FS)
Fragment Shader 面板结构与 VS 相同,显示当前绑定的片段/像素着色器的源码和反汇编。该面板下方或右侧附属展示所有与 Fragment Shader 关联的资源绑定(详见”资源绑定查看”章节)。
Framebuffer
Framebuffer 阶段(在 Vulkan 中对应 Render Pass / Color Blending / Depth Stencil)展示:
- 所有 Color Attachment 的格式、绑定的 Image View(点击 go arrow 可在 Texture Viewer 中打开)。
- Depth/Stencil Attachment 的格式与当前图像。
- 每个 Attachment 的混合方程(源因子、目标因子、操作符)。
- 深度测试比较函数、深度写入开关。
- Stencil 正面/背面的 Fail / Pass / DepthFail 操作及比较参数。
资源绑定查看(Textures、Samplers、UBOs、SSBOs)
在每个 Shader Stage 的面板中均会列出该阶段绑定的所有资源。
Textures
绑定的纹理以列表形式展示,每行包含:
- 绑定槽位(Set/Binding 或 Texture Unit 编号)。
- 资源名称(若有调试标签则优先显示)。
- 纹理维度与格式(如
2D RGBA8 1024x1024)。 - go arrow:点击后在 Texture Viewer 中打开一个锁定标签页,同时 Timeline Bar 上会以绿色三角形标记该纹理的读写历史。
Samplers
Sampler 绑定列于对应纹理槽旁(Vulkan 中 Combined Image Sampler 合并展示),显示过滤方式(MIN/MAG/MIP Filter)、寻址模式(Wrap / Clamp / Mirror)以及 LOD 范围等参数。
Uniform Buffer Objects (UBOs) / Constant Buffers
Constant Buffer 槽位可点击 go arrow 打开专属的 Constant Buffer 预览面板,停靠在 Pipeline State 查看器右侧:
- 面板持续追踪该绑定槽位,随当前事件自动更新内容。
- 同时展示常量的名称、类型(来自 Shader 反射)及当前帧的数值。
- 支持 Ctrl+C 复制选中条目到剪贴板。
Shader Storage Buffer Objects (SSBOs) / UAVs
SSBO 绑定同样列于对应阶段,点击 go arrow 可以打开 Raw Buffer Viewer,以自定义格式解析缓冲区内容(具体配置方式见”Buffer 格式配置”章节)。
Buffer 格式配置(自定义 Buffer 解析格式)
当从 Pipeline State 查看器打开一个 Raw Buffer 或在 Mesh Viewer 以外场景下查看缓冲区时,可通过 Buffer Format 输入框自定义解析格式。格式语法仿照 C/C++ 结构体定义。
基本类型
支持以下基础类型声明(语法兼容 GLSL 与 HLSL):
| 类型 | 宽度 | 说明 |
|---|---|---|
bool | 4 bytes | 布尔值 |
byte / short / int / long | 1/2/4/8 bytes | 有符号整数 |
ubyte / ushort / uint / ulong | 1/2/4/8 bytes | 无符号整数 |
half / float / double | 2/4/8 bytes | 浮点数 |
向量和矩阵通过后缀声明:
float2 myvector2; // 2分量浮点向量
float4 myvector4;
float2x2 mymat; // 2x2 矩阵
mat2 myGLmat; // 等价于 float2x2(GLSL 风格)
vec2 myGLvec; // 等价于 float2数组支持固定大小与无界大小:
float fixedArray[2]; // 固定长度数组
float3 unboundedArray[]; // 无界数组(AoS 模式)结构体与嵌套
struct MyStructName {
float a;
int b;
};
MyStructName str; // 单个实例
MyStructName arr[4]; // 4 元素数组结构体支持自由嵌套,但不支持前向声明,子结构体必须在引用前定义。
Enum 与 Bitfield
// Enum 必须声明基础类型
enum MyEnum : uint {
FirstValue = 5,
HexValue = 0xf,
};
// Bitfield 与 C 语法一致
int first : 3;
int second : 5;
int third : 10;
int : 6; // 匿名填充,跳过 6 bits
int last : 8;Packing 规则
通过 #pack(packing_format) 在全局作用域指定内存对齐规则:
| 格式关键字 | 适用场景 |
|---|---|
cbuffer / d3dcbuffer / cb | D3D Constant Buffer |
structured / d3duav / uav | D3D Structured Buffer / UAV |
std140 / ubo / gl | OpenGL UBO (std140) |
std430 / ssbo | OpenGL SSBO (std430) |
scalar | Vulkan Scalar Buffer |
例如,对一个 OpenGL SSBO 进行解析:
#pack(std430)
struct Particle {
float3 position;
float mass;
};
Particle particles[];Annotations(注解)
注解使用 [[annotation]] 语法附加在声明前,常用注解如下:
[[offset(N)]]/[[byte_offset(N)]]:强制指定成员相对父结构的偏移量。[[pad]]/[[padding]]:标记为填充字段,不在界面中显示。[[row_major]]/[[col_major]]:指定矩阵的内存排列方向。[[rgb]]:将字段内容解析为 RGB 颜色并以色块背景显示。[[hex]]/[[hexadecimal]]:以十六进制显示整数。[[bin]]/[[binary]]:以二进制显示整数。[[unorm]]/[[snorm]]:将 1/2 字节整数解释为归一化浮点数。[[packed(r11g11b10)]]等:解析标准 Bit-Packed 格式。[[single]]/[[fixed]]:强制以 SoA(固定单实例)模式显示,而非 AoS(重复结构)模式。
AoS 与 SoA 模式
Buffer Viewer 支持两种显示模式:
- AoS(Array of Structs):大缓冲区中单个小结构体重复出现,以表格形式展示每行一个元素。声明无界数组即可触发此模式。
- SoA(Struct of Arrays / 固定布局):常量缓冲区等固定大小数据,以树状视图展示。对结构体或变量加
[[single]]注解可强制切换到此模式。
格式保存与加载
- 点击 Save 按钮将当前格式保存为命名条目,下次启动仍可使用。
- 双击列表中的条目或点击 go arrow 即可加载已保存的格式。
- 若 Buffer 由 Shader 反射自动生成了格式,将以只读的
<Auto-generated>条目展示。 - 支持 Undo/Redo 撤销格式的加载操作。
Mesh Viewer 顶点数据查看(Input / VSOut / GSOut)
Mesh Viewer 提供对顶点数据的三维可视化与表格预览,可通过以下方式打开:
- 在 Pipeline State 查看器的 Vertex Input 阶段点击 go arrow。
- 菜单 Window > Mesh Viewer。
三个数据视图
Mesh Viewer 顶部标签页对应管线中三个不同位置的顶点数据:
| 标签 | 数据来源 | 说明 |
|---|---|---|
| Input | Vertex Buffer / Index Buffer | Draw Call 进入 VS 前的原始顶点数据 |
| VS Out | Vertex Shader 输出 | VS 变换后、进入光栅化前的顶点数据 |
| GS Out | Geometry Shader 输出 | GS 发射的图元顶点(若 GS 存在) |
3D 视口
- Input 视图以线框(Wireframe)或实体方式渲染原始网格,坐标系基于模型空间。
- VS Out 视图在 NDC/裁剪空间中渲染变换后的网格,便于验证变换矩阵是否正确。
- 可旋转、平移、缩放,支持选中单个图元并高亮显示其顶点。
顶点数据表格
3D 视口下方为表格视图,每行对应一个顶点,每列对应一个顶点属性(Position、Normal、UV 等)。属性名称来自 Shader 反射信息。表格支持:
- 按行点击选中对应顶点,3D 视口同步高亮。
- Ctrl+C 复制选中行数据到剪贴板。
Event Browser 事件过滤与搜索
Event Browser 窗口以层级树的形式显示当前捕获帧中的所有事件,默认只展示 Actions(Draw、Dispatch、Clear、Copy 等),API 状态设置调用归入 API Inspector。
过滤表达式语法
多词 OR 匹配(默认)
多个词之间为 OR 关系,事件满足任意一个词即显示:
Draw Clear Copy
上例中 DrawIndexed() 和 ClearColor() 均会显示。
排除词(- 前缀)
Draw Clear Copy -Depth
在前例基础上排除名称含 Depth 的事件,如 ClearDepth() 被过滤掉。
必须词(+ 前缀)
+Draw +Indexed -Instanced
事件必须同时包含 Draw 和 Indexed,且不得包含 Instanced。
注意:一旦存在必须词(+),所有可选词将被忽略。
括号嵌套
+Draw +(Indexed Instanced) -Indirect
要求事件包含 Draw,且至少匹配 Indexed 或 Instanced 之一,同时排除 Indirect。
过滤函数
除字符串匹配外,还支持内置过滤函数实现更复杂的查询。
$action(): 匹配所有 Action 类型事件(默认过滤器即使用此函数)。
$action(numIndices > 1000): 仅匹配索引数量超过 1000 的绘制调用。
$parent(marker_name): 仅匹配位于指定 Marker 区域内的事件:
+$action(numIndices > 1000) +$parent(render scene)
上例表示:仅显示位于 “Render Scene” Marker 下且索引数超过 1000 的绘制调用。
不包含任何可见子事件的 Marker 区域将被自动隐藏。
更多过滤函数可在过滤设置菜单的文档页查阅,也支持通过 Python 扩展注册自定义过滤函数。
实用过滤示例
同时查看 Draw 和 Buffer 绑定调用(排除 Pipeline 绑定):
$action() (+ Bind +Buffer)
排除所有 Set Marker 类型 Action:
$action() -$action(flags & setmarker)
过滤设置窗口
在 Event Browser 的设置菜单中打开过滤设置窗口,可以:
- 在编辑框中实时编辑过滤表达式,并查看解析后的高亮说明。
- 点击 Save 按钮将常用过滤器命名保存,之后可随时复用。
- 通过 Save 下拉菜单导入/导出整套过滤器配置(会覆盖当前配置)。
- 查阅所有内置过滤函数的参数说明。
过滤表达式的修改仅在显式点击 Save 时才会持久化;选中已保存的过滤器后直接编辑,若不保存则不会更新原有条目。