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):

类型宽度说明
bool4 bytes布尔值
byte / short / int / long1/2/4/8 bytes有符号整数
ubyte / ushort / uint / ulong1/2/4/8 bytes无符号整数
half / float / double2/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 / cbD3D Constant Buffer
structured / d3duav / uavD3D Structured Buffer / UAV
std140 / ubo / glOpenGL UBO (std140)
std430 / ssboOpenGL SSBO (std430)
scalarVulkan 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 顶部标签页对应管线中三个不同位置的顶点数据:

标签数据来源说明
InputVertex Buffer / Index BufferDraw Call 进入 VS 前的原始顶点数据
VS OutVertex Shader 输出VS 变换后、进入光栅化前的顶点数据
GS OutGeometry 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

事件必须同时包含 DrawIndexed,且不得包含 Instanced。 注意:一旦存在必须词(+),所有可选词将被忽略。

括号嵌套

+Draw +(Indexed Instanced) -Indirect

要求事件包含 Draw,且至少匹配 IndexedInstanced 之一,同时排除 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 时才会持久化;选中已保存的过滤器后直接编辑,若不保存则不会更新原有条目。