内容
# nsight-graphics-mcp
适用于 **NVIDIA Nsight Graphics** 的 MCP(模型上下文协议)服务器,运行于 Windows。它封装了整个 Nsight Graphics 命令行界面(`ngfx.exe`、`ngfx-capture.exe`、`ngfx-replay.exe`、`ngfx-rpc.exe`、`nv-aftermath-*` 工具、`nv-nsight-remote-monitor.exe`、层安装批处理脚本、NGFX 应用 SDK 头文件、`glslang.exe` 和捆绑的 DXC),使得 LLM 代理可以驱动图形捕获、GPU 跟踪分析器、生成 C++ 捕获、OpenGL 帧调试器、Aftermath 崩溃分析和应用内集成端到端 — 无需 Nsight UI。
> 为什么需要一个封装?Nsight Graphics 命令行界面是可脚本化的,但它们的输出很粗糙:`ngfx-replay --metadata-functions` 将整个记录的 API 流转储到 stdout,`--metadata-objects` 将每个 API 对象转储为 JSON,`.nsight-gputrace` 报告是类似 zip 的存档,而 NGFX 应用 SDK 是一个头文件树。`nsight-graphics-mcp` 将这些粗糙的输出索引到每个捕获的 SQLite 数据库中,窥视存档,解析 SDK 头文件,并公开精确的查询,LLM 可以立即调用而无需重新运行命令行界面。
## 它能做什么
### 驱动四种文档化的活动(`ngfx.exe --activity`)
| 活动 | MCP 工具(启动) | MCP 工具(附加) |
| --- | --- | --- |
| 图形捕获 | `ngfx_graphics_capture_launched` | `ngfx_graphics_capture_attached` |
| GPU 跟踪分析器 | `ngfx_gputrace_launched` | `ngfx_gputrace_attached` |
| 生成 C++ 捕获 | `ngfx_cpp_capture_launched` | (使用 `ngfx_raw` 和 `--attach-pid`) |
| OpenGL 帧调试器 | `ngfx_framedebugger_launched` | (使用 `ngfx_raw` 和 `--attach-pid`) |
每个活动都接受从 `ngfx --help-all` 得到的完整特定于活动的标志 — 启动触发器(`--start-after-frames` / `--start-after-ms` / `--start-after-hotkey` / `--start-with-ngfx-sdk` / …)、停止触发器(`--limit-to-frames` / `--max-duration-ms` / `--stop-with-ngfx-sdk` / …)、每个架构的指标集选择、GPU 时钟锁定、着色器管道收集开关等。
传递 `background=True` 以保持 `ngfx.exe` 运行,以便您可以击中捕获/跟踪热键 — 调用返回一个启动会话句柄,您可以使用 `ngfx_launch_status` 轮询并使用 `ngfx_launch_stop` 终止。
### 无头捕获(`ngfx-capture.exe`)- 不需要 Nsight UI
| 工具 | 它做什么 |
| --- | --- |
| `ngfx_capture_launched` | 直接运行 `ngfx-capture.exe`。生成一个带有捆绑重放器的 `.ngfx-capture` / `.ngfx-gfxcap`。支持所有触发器、压缩、HVVM 模式、分隔符模式、故障排除旋钮和从 `ngfx-capture --help` 的光线追踪选项。 |
| `ngfx_capture_recapture` | 使用当前格式 `--recapture` 现有捕获。 |
| `ngfx_capture_recompress` | `--recompress` 以获得更高的压缩/格式升级。 |
### 深入的 Nsight-only 捕获能力报告
| 工具 | 它做什么 |
| --- | --- |
| `ngfx_deep_capture_capability_report` | 检查选定的 Nsight 安装、SDK 头文件、相关插件、选定捕获路径和命令行帮助,以评估最深的仅 Nsight 路径用于着色器/渲染调试。它明确将当前图形捕获替换路径与遗留/可选 C++ 捕获分开,并返回要使用的 MCP 工具链。 |
### 对象索引(管道/着色器/资源 - GUI '资源' 窗格对齐)
| 工具 | 它回答 |
| --- | --- |
| `ngfx_index_objects` | 将每个 API 对象索引到 SQLite 数据库(分类:管道/着色器/资源/描述符/同步/命令/队列/表面/设备/光线追踪/其他)。 |
| `ngfx_query_objects` | 按 `type_name` / `category` / `name_regex` / `api` 筛选。 |
| `ngfx_get_object` | 按 uid 查找单个对象。 |
| `ngfx_object_histogram` | 按 `type_name`、`category` 或 `api` 直方图。 |
| `ngfx_object_query` | 对象索引的只读 SQL 查询。 |
| `ngfx_list_pipelines` | 每个管道/管道布局/描述符集布局/管道缓存/根签名/状态对象。 |
| `ngfx_list_shaders` | 每个着色器模块/着色器程序/着色器。 |
| `ngfx_list_resources` | 每个缓冲区/图像/采样器/设备内存/堆。 |
### Protobuf 模式参考(RE-derived)
内部捕获格式在 `NV.*` 命名空间中编码为 protobuf。MCP 直接从 Nsight 二进制文件中提取模式,以便 LLM 可以在不重新运行 protoc 的情况下概念性地导航格式。
公开了两层:
* **仅清单(快速)** - 字符串扫描 proto 文件名和消息名。不需要 protobuf 解码器。
* **完整的 FileDescriptorProto 提取** - 遍历 `ngfx-replay.exe` 中嵌入的描述符块,使用 `google.protobuf.descriptor_pb2` 解码,并构建一个 `DescriptorPool`,以便可以按 FQN 查找任何消息并动态实例化。恢复所有 22 个 .proto 文件 + 648 个消息,包括关键的 `NV.EventParameters.Messages.PbFunctionCallDesc`(具有每个调用的 `functionName` + 重复的 `PbArgument arguments`)。
| 工具 | 它回答 |
| --- | --- |
| `ngfx_proto_schemas` | 从 `ngfx-replay.exe` / `ngfx-capture.exe` / `PylonReplay_PluginInterface.dll` 中提取的每个 .proto 文件(22+)、Pb* 消息(~2000+)和 FQN 的清单。 |
| `ngfx_proto_search` | 清单的正则表达式搜索。例如 `pattern='RootParam'` → `PbRootParameter`、`PbRootDescriptor`、`PbRootParametersInfo`... |
| `ngfx_proto_describe` | 任何消息 FQN 的完整字段级模式(字段名称、编号、类型、重复、嵌套)。由提取的 `FileDescriptorProto` 块支持。 |
| `ngfx_proto_list_messages` | 解码的模式池中的每个 FQN(包括嵌套类型),可选正则表达式过滤。 |
| `ngfx_proto_extract_descriptors` | 从 Nsight 二进制文件中重新提取 `FileDescriptorProto` 块并重建进程内模式注册表。升级 Nsight 后调用一次。 |
### 低级捕获格式探测(实验性,RE-derived)
| 工具 | 它回答 |
| --- | --- |
| `ngfx_capture_format_info` | 魔术检查 (`nlypelif` = "Pylon file"),SHA-256,试探性头部字段解释。参见 `docs/CAPTURE_FORMAT.md`。 |
| `ngfx_capture_lz4_decompress` | 尝试捕获文件中字节范围的 LZ4 块解压缩。 |
| `ngfx_decode_protobuf_wire` | 通用 protobuf-wire-format 解码器,适用于字节范围(返回顶级字段,无需模式)。 |
### 直接 `.ngfx-gfxcap` 解码器(RE-derived,无需 UI)
解码捕获包装器格式端到端 - 不需要 `ngfx-replay` / `ngfx-ui` 往返用于元数据层。包装器是完全逆向工程的:`nlyp` 文件魔术,然后是带有 48 字节迷你头的块序列(`elif` 魔术 + 版本 + 压缩标志 + 压缩/未压缩大小 + 块 ID + 自我偏移),有效载体要么是 LZ4 块压缩,要么是存储,16 字节对齐。文件以 `elif` 魔术记录的 TOC 区域结束,指向块偏移量。一个块包含一个序列化的 `NV.PbTableOfContents`,具有 UUID、帧计数、GPU 信息、主要 API 和 `FunctionInfoChunkIds` + `ResourceInfoChunkIds` 列表。
| 工具 | 它回答 |
| --- | --- |
| `ngfx_capture_decode_header` | 解析包装器头部 - 魔术/块计数/TOC 位置。 |
| `ngfx_capture_decode_chunks` | 迭代块流 - ID、大小、压缩标志、有效载体偏移量。 |
| `ngfx_capture_decode_toc` | 解码 `PbTableOfContents` 块:UUID、GPU、主要 API、每个线程信息、`FunctionInfo` + `ResourceInfo` 块列表。 |
| `ngfx_capture_decompress_chunk_by_id` | 拉取单个块并解压缩其 LZ4 有效载体为原始字节。 |
| `ngfx_capture_search_payloads` | 在解压缩的块有效载体中搜索着色器名称、哈希或原始十六进制字节,当元数据对象太浅时。 |
| `ngfx_capture_shader_chunks` | 查找嵌入的 DXBC/DXIL 着色器块并从保存的捕获中计算哈希候选者。 |
| `ngfx_capture_chunk_references` | 在解压缩的块中搜索对着色器块 ID、哈希、PDB 路径或名称的引用。 |
| `ngfx_capture_decode_events` | 尽力而为的每个事件解码(有限 - 参见下面的警告)。 |
| `ngfx_capture_event_args` | 单个事件参数查找。与 C++-Capture 派生的 `ngfx_cpp_capture_event_args` 具有相同的形状,一旦 FunctionInfo 二进制布局被完全 RE'd。 |
**警告(正在进行中的工作)。** `FunctionInfoChunkIds` 列出的块包含一个**二进制固定步长表**,而不是 `PbFunctionCallDesc` protobuf 消息 - Nsight 将每个事件的参数流存储为打包的 C 样式记录,而不是 protobuf。包装器 + TOC 已完全解码,以便元数据层今天可以无头工作; FunctionInfo 的每个记录布局是直接参数提取的剩余 RE 工作。在完成之前,请使用上面的 C++-Capture 往返路径进行参数级查询。
### ngfx-rpc 自定义传输客户端(RE-derived,部分)
`ngfx-rpc.exe` 是“重放器 UI 服务器” - 一个长期运行的进程,Nsight UI 通过 TCP / 命名管道 / 域套接字连接到它。它使用**自定义长度前缀的 protobuf 协议**(不是标准 gRPC,尽管其 30 个 .proto 文件包含 ~50 个 `Request`/`Reply` 消息对,看起来像 gRPC 形状)。传输层是完全解码的;消息头编码是静态解码的,但尚未通过实时往返验证(参见下面的警告)。
**线路格式(已验证):**
```
字节 0 = 0x54 ('T') 魔术
字节 1 = 0x08 魔术
字节 2 = 通道 ID u8
字节 3 = 0x00 标志/填充
字节 4-7 = 正文大小 u32 大端
字节 8+ = 正文(长度 = 正文大小)
```
**调度模型:** `(类别 u32, 方法 u32)` 键控 2D 处理器表。方法枚举(已在 proto 池中)包括 `BinaryReplayMethod`,具有 110 个条目 - `MethodApiInspectorStateRequest=33`、`MethodRootParametersRequest=67` 等。系统类别 ID 从 `ngfx-rpc.exe::SystemCategories.proto` 固定;Pylon 重放使用其自己的类别命名空间,其中 `CategoryBinaryReplay=1`。剩余的实时阻塞器是 UI 执行的私有命名空间/会话/槽绑定。
| 工具 | 它做什么 |
| --- | --- |
| `ngfx_rpc_protocol_info` | 返回解码的传输规范 + 进程内方法枚举表(无需实时连接)。 |
| `ngfx_rpc_transport_connect` | 打开到正在运行的 `ngfx-rpc.exe` 的 TCP / 命名管道 / 域套接字连接并返回会话句柄。 |
| `ngfx_rpc_send_raw_frame` | 发送任意帧消息并读取回复 - 用于实验协议的逃生通道。 |
| `ngfx_frame_debugger_rpc_schema` | 描述私有 BinaryReplay 像素/资源历史方法、ID、请求模式和句柄形状。 |
| `ngfx_pixel_history` | 为图像句柄 + 像素坐标调用 `MethodPixelHistoryRequest`(70),或预览确切的 protobuf 正文。 |
| `ngfx_resource_access_history` | 为 API 数据句柄调用 `MethodResourceAccessHistoryRequest`(53),或预览请求正文。 |
| `ngfx_resource_revision_at_event` | 从访问历史中推导出事件的资源修订,可选地重用持久的 RPC 会话并获取资源信息或图像子资源数据。 |
| `ngfx_rpc_open_capture_session` / `ngfx_rpc_capture_session_status` / `ngfx_rpc_close_capture_session` | 在 MCP 调用之间保持私有帧调试器 RPC 连接打开。 |
| `ngfx_rpc_call_binary_replay` | 在持久的帧调试器 RPC 会话上调用任意 BinaryReplay 方法。 |
**警告(正在进行中的实时往返工作)。** ngfx-rpc 的 TCP 服务器是一次性的:它在第一个客户端会话结束时退出。这使得迭代的“猜测头部 → 观察回复”探测变得不切实际(第一个对最可能的 `MessageHeader` 布局的尝试会使服务器崩溃,而重启需要 ~30s)。结构化头部布局是从 IDA 恢复的,但尚未在线验证。剩余的角度有:
1. **捕获真实的 ngfx-ui ↔ ngfx-rpc 交换的 `pktmon`** - 模式池解码每个观察到的消息;从观察中恢复握手 + 真实方法调用。
2. **IDA 上的 `NV::TPS::ProtoBufMessage::Serialize`** - 读取 C++ 端确切的序列化字节。
两者都记录在 `docs/RPC_PROTOCOL.md` 中。
### RPC 探测、转录和实时事件映射
帮助程序位于原始线路协议之上 - 用于解析端点、记录真实的 `ngfx-ui` ↔ `ngfx-rpc` 交换、离线重放这些转录并将钩子侧序号映射到保存的捕获 `event_index`。
| 工具 | 它做什么 |
| --- | --- |
| `ngfx_rpc_endpoint_resolve` | 将 `ngfx-rpc` 进程(或显式参数)解析为 TCP / 命名管道 / 域套接字端点信息。 |
| `ngfx_rpc_endpoint_probe` | 解析并探测端点,分类 BinaryReplay 准备情况。 |
| `ngfx_rpc_find_live_events` | 扫描实时 BinaryReplay `EventDetails` 以将钩子绘制序号映射到保存的 `event_index` 值。 |
| `ngfx_rpc_decode_frame` | 解码一个 ngfx-rpc 传输帧或原始消息体(十六进制)。 |
| `ngfx_rpc_transcript_import` | 导入和解码 JSON / NDJSON / 纯十六进制转录。 |
| `ngfx_rpc_session_binding_report` | 从帧转录中总结 BinaryReplay 会话/槽绑定证据。 |
| `ngfx_rpc_capture_open_sequence_report` | 已知的 + 观察到的捕获打开序列的结构化摘要。 |
| `ngfx_rpc_direct_export_binding_candidate` | 从转录中导出直接保存的 C++ RPC 绑定候选者。 |
| `ngfx_cpp_capture_saved_direct_rpc_export` | 未来直接 FrameDebugger 序列化 RPC 出口点(取决于绑定候选者)。 |
| `ngfx_pylon_private_bridge_re_report` | 报告构建私有 Pylon/BinaryReplay 执行器所需的内容。 |
| `ngfx_pylon_bridge_probe_plan` | 返回 Pylon 的私有活动管理器桥接器的具体探测计划。 |
| `ngfx_pylon_activity_manager_static_binding_report` | 从缓存的 IDA 事实中提取静态活动管理器 / 直接调用绑定。 |
| `ngfx_pylon_bridge_helper_scaffold` | 编写 Frida / 本地帮助器支架以固定私有执行器。 |
| `ngfx_pylon_bridge_probe_run` | 运行 Pylon Frida 探针并分析收集的私有绑定事件。 |
| `ngfx_pylon_bridge_probe_log_analyze` | 分析 Frida 探针输出到绑定假设而无需重新运行。 |
| `ngfx_pylon_private_binding_from_probe` | 将探针输出转换为私有桥接绑定 JSON。 |
| `ngfx_pylon_direct_call_binding_from_probe` | 为 `PylonPlugin!sub_180116CD0` 构建实验的直接调用绑定。 |
| `ngfx_pylon_frida_direct_call_run` | 运行实验的 Frida 直接重新进入调用到探针输出。 |
| `ngfx_pylon_private_binding_from_probe` | 将探针输出转换为私有桥接绑定 JSON。 |
| `ngfx_pylon_direct_call_run` | 受保护的入口点,用于调用将来的本地 Pylon 桥接器。 |
| `ngfx_pylon_saved_cpp_export` | 封装私有 Pylon 保存的 C++ 导出输入。 |
| `ngfx_private_executor_readiness_report` | 报告 Pylon 或直接 RPC 私有导出是否准备就绪。 |
| `ngfx_private_executor_evidence_bundle` | 将 Pylon/RPC 私有执行器证据捆绑成一个工件。 |
### ngfx-rpc 的 ETW 核心文件捕获
`ngfx-ui` ↔ `ngfx-rpc` 交换的短时 ETW 会话,用于观察 Nsight UI 和 `ngfx-rpc.exe` 交换的实际字节,以便离线解码。包装 `logman` + `tracerpt`。
| 工具 | 它做什么 |
| --- | --- |
| `ngfx_rpc_etw_environment` | 探针 `logman` / `tracerpt` 并报告 ETW 捕获是否可用。 |
| `ngfx_rpc_etw_capture_start` | 启动针对 UI ↔ RPC I/O 的内核文件 ETW 会话。 |
| `ngfx_rpc_etw_capture_stop` | 停止以前启动的 ETW 会话。 |
| `ngfx_rpc_etw_capture_summary` | 将 `.etl` 跟踪转换为 XML / CSV(通过 `tracerpt`)并总结事件计数。 |
### `ngfx-rpc.exe` 的 PE 修补计划
解决私有桥墙的三种文档化变通方法之一:一种非破坏性修补计划,在 `ngfx-rpc.exe` 中添加记录器跳板,以便其私有序列化器在运行时发出字节级证据。计划被发出,而不是应用 - 使用外部修补程序或通过 IDA 脚本工具应用。
| 工具 | 它做什么 |
| --- | --- |
| `ngfx_rpc_pe_patch_plan` | 在 `ngfx-rpc.exe` 上计划(不应用)记录器跳板补丁。 |
| `ngfx_rpc_pe_patch_ida_script` | 发出 IDA Pro 9.0 无头 Python 脚本,实现该计划。 |
### Pylon 私有桥接 RE - 保存的捕获 → C++ 导出
`PylonPlugin.dll` 运行 UI 活动桥接器,将活动 ID 3 映射到 *生成 C++ 捕获*。完整的无头替换仍然依赖于重新进入 Pylon 的私有活动管理器或布线直接 FrameDebugger 核心 RPC。这些工具保留当前的 RE 证据,并允许 LLM 在每个路径上安全地迭代。
| 工具 | 它做什么 |
| --- | --- |
| `ngfx_pylon_private_bridge_re_report` | 报告构建私有 Pylon/BinaryReplay 执行器的剩余内容。 |
| `ngfx_pylon_bridge_probe_plan` | 返回 Pylon 私有活动管理器桥接器的具体探测计划。 |
| `ngfx_pylon_activity_manager_static_binding_report` | 从缓存的 IDA 事实中提取静态活动管理器 / 直接调用绑定。 |
| `ngfx_pylon_bridge_helper_scaffold` | 编写 Frida / 本地帮助器支架以固定私有执行器。 |
| `ngfx_pylon_bridge_probe_run` | 运行 Pylon Frida 探针并分析收集的私有绑定事件。 |
| `ngfx_pylon_bridge_probe_log_analyze` | 分析 Frida 探针输出到绑定假设而无需重新运行。 |
| `ngfx_pylon_private_binding_from_probe` | 将探针输出转换为私有桥接绑定 JSON。 |
| `ngfx_pylon_direct_call_binding_from_probe` | 为 `PylonPlugin!sub_180116CD0` 构建实验的直接调用绑定。 |
| `ngfx_pylon_frida_direct_call_run` | 运行实验的 Frida 直接重新进入调用到 `sub_180116CD0`。 |
| `ngfx_pylon_private_bridge_invoke` | 私有 Pylon 桥接器的保护入口点。 |
| `ngfx_pylon_saved_cpp_export` | 封装私有 Pylon 保存的 C++ 导出输入。 |
| `ngfx_private_executor_readiness_report` | 报告 Pylon 或直接 RPC 私有导出是否准备就绪。 |
| `ngfx_private_executor_evidence_bundle` | 将 Pylon/RPC 私有执行器证据捆绑成一个工件。 |
### 保存捕获 → C++ 捕获自主 + 路径选择
Pickers 和 one-shot orchestrators 能够将保存的捕获导出转换为一个可以驱动的端到端链条,无需用户界面。 首先使用 `ngfx_deep_capture_capability_report`(上文)来决定是否值得尝试在当前安装中执行此路径。
| 工具 | 功能 |
| --- | --- |
| `ngfx_cpp_capture_pick_install` | 选择最新的已安装 Nsight,其 Generate C++ Capture 可以针对此捕获运行。 |
| `ngfx_cpp_capture_compatibility_check` | 检查保存的捕获是否可由给定的安装重放。 |
| `ngfx_cpp_capture_route_probe` | 探测已安装的 Nsight 以决定尝试哪种保存的捕获 → C++ 路径。 |
| `ngfx_cpp_capture_against_replay` | 在重放 `ngfx-replay.exe` 重放保存的捕获时运行 *Generate C++ Capture*。 |
| `ngfx_cpp_capture_recapture_plan` | 生成 `ngfx-capture.exe` 命令以重新捕获原始应用程序。 |
| `ngfx_capture_recapture_with_install` | 通过选定的安装的 `ngfx-capture.exe` 重新运行捕获的应用程序。 |
| `ngfx_cpp_capture_full_autonomy` | 保存的捕获 → C++ 项目 → 验证 + 索引的单次自主链条。 |
| 工具 | 回答内容 |
| --- | --- |
| `ngfx_open_capture` | 注册 `.ngfx-gfxcap` 并获取会话句柄。 |
| `ngfx_list_captures` / `ngfx_close_capture` | 管理打开的捕获句柄。 |
| `ngfx_find_recent_captures` | 在默认的 Nsight 输出目录(以及其他目录)中搜索最近的捕获 / gputrace 文件。最新文件优先。 |
| `ngfx_list_captures_in_dir` | 枚举指定目录下的捕获。 |
| `ngfx_capture_summary` | 解析 `ngfx-replay --metadata`(按 mtime 缓存)。 |
| `ngfx_capture_objects` | 记录的每个 API 对象的完整 JSON (`--metadata-objects`)。 |
| `ngfx_capture_functions` | 记录的功能流 (`--metadata-functions`) — 原始行。 |
| `ngfx_capture_logs` | 嵌入的应用程序 + 驱动程序日志消息。 |
| `ngfx_capture_screenshot` | 将嵌入的最终呈现截图写入 PNG/TGA/BMP/JPG。 |
| `ngfx_capture_diff` | 两个捕获的解析摘要之间的差异。 |
### 精细事件查询(基于函数流的 SQLite 索引)
| 工具 | 回答内容 |
| --- | --- |
| `ngfx_index_events` | 构建/刷新每个捕获的函数索引。 |
| `ngfx_find_events` | "事件 2100 和 2480 之间的所有绘制","每个 `vkCmdPipelineBarrier2`","第一个 500 次调用中的每个 `Dispatch*`" 。 |
| `ngfx_get_event` | 按索引获取完整的每个调用记录。 |
| `ngfx_event_histogram` | 按 `name` 或 `kind`(绘制 / 分发 / 复制 / 屏障 / 呈现 / 光线追踪 / 同步 / 设置状态 / 其他)进行直方图统计。 |
| `ngfx_find_calls_by_arg` | "每个调用提到的资源句柄/名称"。 |
| `ngfx_event_query` | 对索引的只读 SQL(SELECT / WITH)。 |
### 重放 (`ngfx-replay.exe`)
| 工具 | 功能 |
| --- | --- |
| `ngfx_replay_run` | 重放捕获并具有完全控制:循环次数,性能报告目录,设备选择(名称/供应商/索引),呈现模式,vsync,多缓冲,重置模式等。 |
| `ngfx_replay_screenshot` | 在重放期间转储每帧渲染的输出(使用 RE 发现的 `--replay-screenshot*` 标志)。无需用户界面。 |
| `ngfx_replay_gpu_frametimes` | 每帧 GPU 时间收集(RE 发现的 `--collect-gpu-frametimes`)。 |
| `ngfx_replay_run_advanced` | 使用任意标志运行 `ngfx-replay` — 约 65 个隐藏标志通过二进制分析发现(验证模式,NVAPI/NGX/NRC/DLSS 开关,强制 * 恢复模式等)。 |
| `ngfx_replay_bundle_extract` | 提取捆绑的重放捕获的内容到目录,无需运行它。 |
| `ngfx_replay_metadata` | 直接传递到 `--metadata`。 |
### GPU 跟踪报告检查
| 工具 | 功能 |
| --- | --- |
| `ngfx_open_gputrace` | 注册 `.nsight-gputrace` 文件为会话句柄。 |
| `ngfx_gputrace_inspect` | 快速成员列表 + 容器检查。 |
| `ngfx_gputrace_archive` | 完整的 zip 列表 + 自动解码的清单 JSON。 |
| `ngfx_gputrace_read_member` | 读取成员为 UTF-8(自动解码 JSON / CSV)。 |
| `ngfx_gputrace_extract` | 将成员提取到磁盘。 |
| `ngfx_gputrace_shader_pipeline_search` | 在 GPU 跟踪成员中搜索类似着色器/管道的着色器名称,哈希或入口点。 |
| `ngfx_list_perf_report` | 枚举 `ngfx-replay --perf-report-dir` 工件,具有自动解码的 JSON/CSV 内联。 |
| `ngfx_gputrace_export_summary` | 总结 Nsight GPU 跟踪自动导出文件夹,包括 `REPRO_INFO.xls` 和指标表。 |
| `ngfx_gputrace_export_search` | 在导出的 GPU 跟踪文本/XLS 文件中搜索着色器名称,哈希或事件文本。 |
| `ngfx_gputrace_archs` | 列出 `--architecture` 接受的 GPU 架构。 |
#### 二进制 WRPV `.ngfx-gputrace` 检查(RE 导出)
一些 Nsight 版本会将 GPU 跟踪作为二进制 WRPV 容器发出,而不是文档化的 zip。这些工具直接探测该格式,无需先提取它。
| 工具 | 功能 |
| --- | --- |
| `ngfx_gputrace_wrpv_search` | 在二进制 WRPV `.ngfx-gputrace` 中搜索字符串或十六进制。 |
| `ngfx_gputrace_wrpv_strings` | 从 WRPV 报告中提取可打印的字符串及其字节偏移。 |
| `ngfx_gputrace_wrpv_sections` | WRPV 报告中类似头部字段的最佳努力列表。 |
| `ngfx_gputrace_wrpv_table_preview` | WRPV 报告中 `offset` 处的 `length` 字节的十六进制 + ASCII 预览。 |
| `ngfx_gputrace_shader_bindings` | 在 WRPV 报告中搜索着色器绑定证据(管道,根参数,描述符堆)。 |
### 生成 C++ 捕获 → 构建 → 运行
Nsight 2026 的 D3D12/Vulkan 持久性的耐用替换路径是 Graphics Capture(`ngfx-capture` / `ngfx-replay`)加 Graphics Debugger live 重放。 C++ 捕获在发出项目时仍然有用,因为 MCP 可以索引生成的源代码以获取每个调用的参数,但保存的捕获导出程序是私有 UI/插件代码,一些 Nsight 版本可以拒绝 D3D11/D3D12 C++ 序列化,并建议迁移到 Graphics Capture。 在决定是 C++ 导出,实时重放 RPC,GPU 跟踪重放还是原始 `.ngfx-capture` 解码是正确的下一步时,首先使用 `ngfx_deep_capture_capability_report`。
CLI 活动 (`ngfx --activity 'Generate C++ Capture'`) 需要原始应用程序启动 — 它不能在保存的捕获上运行。 MCP 还为这种情况提供了 UI 驱动的路径(参见下一节)。
| 工具 | 功能 |
| --- | --- |
| `ngfx_cpp_capture_launched` | 运行 Generate-C++-Capture 活动(CLI;重启应用程序)。 |
| `ngfx_cpp_capture_dump` | 一站式 C++ 捕获转储助手:通过 CLI 获取实时应用程序,或通过 UI 辅助导出,然后可选调用/PSO 索引。 |
| `ngfx_cpp_capture_saved_bridge_re_analyze` | 在 Nsight 的私有保存捕获 C++ 导出插件上运行定向 IDA 传递。 |
| `ngfx_cpp_capture_saved_bridge_re_report` | 总结恢复的私有序列化协议,Pylon 活动桥和剩余的无头间隙。 |
| `ngfx_cpp_capture_saved_pylon_handoff_preview` | 为保存捕获 Generate C++ Capture 发出固定的 Pylon 平台启动器映射:`ngfx-replay.exe`,引用捕获 argv,额外重放参数,环境字符串和 `JsonProject['launcher']` 设置。 |
| `ngfx_cpp_capture_saved_direct_rpc_plan` | 为直接 RPC 路径发出恢复的 FrameDebugger 序列化请求 + 文件传输回调计划。 |
| `ngfx_cpp_capture_saved_file_transfer_apply` | 将解码的 FrameDebugger 打开/追加/关闭文件传输通知应用于磁盘以执行直接 RPC。 |
| `ngfx_cpp_capture_saved_output_dir_setting` | 预览或写入 BattlePlugin 使用的候选 Qt/QSettings `Serialization Save Directory` 值。 |
| `ngfx_cpp_capture_saved_ui_automation_attempt` | Generate C++ Capture 对话框的尽力 UI 回退,具有结构化阻塞器,如果自动化不可用。 |
| `ngfx_cpp_capture_saved_headless_attempt` | 一个入口点,尝试固定的 Pylon 桥,直接 RPC 路径和 UI 回退,然后验证/索引任何出现的项目。 |
| `ngfx_cpp_capture_saved_export_validate` | 验证发出的 C++ 捕获项目,与可用的捕获元数据进行比较,并构建调用/PSO 索引。 |
| `ngfx_cpp_capture_saved_artifact_bundle` | 将捕获/导出验证/项目工件捆绑到 zip 中,以便自主交接和审查。 |
| `ngfx_cpp_capture_find_solution` | 定位生成的 `.sln`。 |
| `ngfx_cpp_capture_build` | 项目构建(自动通过 vswhere 发现 MSBuild)。 |
| `ngfx_cpp_capture_run` | 运行生成的 exe 并捕获其输出。 |
保存捕获 → C++ 路径仍然是私有的 NVIDIA 插件代码。 上面的 RE 工具保留当前证据:`BattlePlugin` 通过 FrameDebugger 服务发送 `PbSerializeRequestMessage` 并处理文件传输通知,而 `PylonPlugin` 暴露 UI 活动桥,将活动 ID 3 映射到 *Generate C++ Capture*。 Pylon argv/config 交接现在已固定:桥使用 `ngfx-replay.exe`,传递保存的捕获作为第一个引用参数,附加扁平的重放选项参数,传递以分号连接的环境字符串,并将平台映射保存在 `JsonProject['launcher']` 下。 剩余的完全无头间隙是在 UI 进程之外调用 Pylon 的私有活动管理器,或完成直接 FrameDebugger Core RPC 命名空间/会话绑定。
### 每个调用参数提取(C++ 捕获 → SQLite 索引)
Nsight 的 CLI (`ngfx-replay --metadata-functions`) 返回每个事件的功能名称但 **没有参数值** — 这是一个刻意的设计选择。 要回答“事件 G 的根参数 N 上绑定了什么?”或“此绘制使用了哪个 CBV?”您需要参数值。
这些工具启用的工作流程:
1. 在 Nsight UI 中打开保存的捕获(可以对保存的捕获运行 *Generate C++ Capture*,与 CLI 活动不同)。
2. 点击 *文件 → 活动 → 生成 C++ 捕获*,选择输出目录。
3. MCP 解析发出的 `.cpp` 文件,并将每个命令列表/命令缓冲区调用索引到 SQLite 中,由合成的 `event_index` 键控,与 `--metadata-functions` 顺序匹配。
4. 每个事件查询 - 针对 ~25 个常见 D3D12/Vulkan/OpenGL 描述符/绘制/调度调用的完整结构化参数。
5. `ngfx_cpp_capture_descriptor_bindings` 从任何绘制/调度中向后扫描以重建 **完整的根参数 + 描述符堆 + CBV/SRV/UAV + VBV/IBV + RT 状态** — 针对“这里绑定了什么?”的缺失部分答案。
| 工具 | 功能 |
| --- | --- |
| `ngfx_cpp_capture_open_in_ui` | 在 `ngfx-ui.exe` 中打开保存的捕获,并为用户提供逐步提示。 |
| `ngfx_cpp_capture_wait_for_project` | 轮询目录直到生成的 `.sln` 出现且其大小稳定。 |
| `ngfx_cpp_capture_index_calls` | 遍历生成项目中的所有 `.cpp` 文件,解析命令列表调用,将 SQLite 索引写入 `<project>/.ngfxmcp_cpp_calls.db`。 |
| `ngfx_cpp_capture_event_args` | 单个事件查找(函数名,原始 + 结构化参数,源文件:行)。 |
| `ngfx_cpp_capture_query_calls` | 过滤查询:种类/API/名称/正则表达式/包含/事件范围。 |
| `ngfx_cpp_capture_descriptor_bindings` | 通过扫描向后(D3D12 根参数 + 描述符堆 + IA/OM/RT;Vulkan 管道 + 描述符集 `first_set` + VB/IB/常量推送)重建事件的完整绑定状态。 |
| `ngfx_cpp_capture_sql` | 索引的只读 SELECT/WITH 出口。 |
| `ngfx_capture_descriptor_heap_timeline` | 每个堆的描述符相关 D3D12 调用时间线,按事件顺序。 |
| `ngfx_capture_root_signature_ranges` | 解析 C++ 项目引用的每个 D3D12 根签名 blob(根参数 + 描述符表范围)。 |
| `ngfx_capture_root_signature_lookup` | 将着色器寄存器(例如 `t0` 在空间 `0`)解析为满足它的根参数索引。 |
相同的解析器被 `ngfx_find_calls_by_arg` 和 `ngfx_resolve_handle` 在存在子 C++ 捕获索引时使用。
### 捕获流差异(事件级别)
| 工具 | 功能 |
| --- | --- |
| `ngfx_capture_diff` | 两个捕获的解析 `--metadata` 摘要之间的差异(高级别:设备,帧数,版本)。 |
| `ngfx_event_stream_diff` | **更深入:** 通过 LCS 差异每个事件的功能流。 返回每个函数直方图增量,按种类直方图增量,连续插入/删除/替换簇,以及(如果两个捕获都有 C++ 捕获索引)每个事件参数差异。 |
| `ngfx_function_stream_diff` | 仅限轻量级名称原始 `--metadata-functions` 输出的差异。 |
### PSO → DXBC / SPIR-V 哈希映射
Nsight 的 CLI **不** 公开 D3D12 管道 / Vulkan VkPipeline 和它使用的着色器字节码哈希之间的链接。 protobuf 模式 *确实* 有它 (`NV.Pylon.Replay.PbPipelineShaderStageInfo` — 字段 `pipeline`,`driverAppHash`,`stage`) 但从保存的 `.ngfx-gfxcap` 中提取它是捕获解码器的进行中的部分。
当前有效路径:解析 *Generate C++ Capture* 发出的源代码。着色器字节码作为扁平的 `static const unsigned char` 数组发出 - DXBC 块在字节 4..20 中具有 Microsoft 编译器的 128 位 MD5 哈希(Nsight / PIX / RenderDoc 显示为着色器标识)。 对于 SPIR-V,我们计算 blob 的 SHA-1,因此 Vulkan 着色器仍然获得稳定的标识符。 我们还为每个 blob 计算 ShaderToggler 的哈希:CRC32 整个原始着色器字节码,报告为 8 个十六进制数字和无符号十进制。
PSO 创建调用(`CreateGraphicsPipelineState` / `CreateComputePipelineState` / `vkCreateGraphicsPipelines` / `vkCreateComputePipelines` / `vkCreateRayTracingPipelinesKHR`)引用这些字节数组符号(D3D12)或 `vkCreateShaderModule` 句柄(Vulkan)。索引器将它们匹配起来。
| 工具 | 回答内容 |
| --- | --- |
| `ngfx_pso_index` | 遍历 C++ 捕获项目,解析每个着色器字节数组和每个 PSO 创建调用,写入 `shader_blobs` 和 `pso_shaders` 表到现有的 C++ 捕获索引 DB。 |
| `ngfx_pso_get` | 查找一个 PSO 的完整阶段映射:每个阶段 → `{shader_symbol,格式(dxbc/dxil/spirv),哈希十六进制,哈希源,shader_toggler_crc32,声明字节数,头部十六进制}`。 |
| `ngfx_pso_list` | 枚举每个索引的 PSO,并带有行摘要(`VS:g_VS_xxx,PS:g_PS_yyy)。 |
| `ngfx_pso_find_by_shader` | 反向查找:给定着色器符号,DXBC/SPIR-V 哈希或 ShaderToggler CRC32,哪些 PSOs 使用它(以及作为哪个阶段)。 |
| `ngfx_shader_blobs_list` | 枚举每个索引的shader 字节数组(按格式,DXBC/SPIR-V 哈希或 ShaderToggler CRC32 过滤)。 |
| `ngfx_shader_blobs_find_crc32` | 通过 ShaderToggler CRC32 查找着色器字节数组,接受十六进制(`1cf439e7`)或十进制。 |
| `ngfx_shader_blob_dump` | 将匹配的生成的 C++ 着色器字节数组写回磁盘作为原始 DXBC/DXIL/SPIR-V 字节。 |
### 着色器视觉错误分类
这些工具将 C++ 捕获事件参数,PSO 标识,描述符状态和 IDA 派生的 Nsight RE 事实组合成报告,LLM 可以用它来定位视觉错误,然后修补着色器。
| 工具 | 回答内容 |
| --- | --- |
| `ngfx_shader_triage_plan` | 为视觉错误交接提供具体的捕获/索引/探测计划。 |
| `ngfx_eye_issue_dump_report` | Nsight 独家转储报告,用于右侧眼问题:捕获 TOC,侧车状态,转储阻止器和下一步操作。 |
| `ngfx_eye_issue_event_signatures` | 当仅存在 `.ngfx-capture` 转储时,来自保存的 `metadata-functions` 的候选左右事件对。 |
| `ngfx_eye_event_index` | 使用立体字幕正则表达式,视口/剪刀半提示和继承状态将 C++ 捕获事件分类为 left/right/both/unknown。 |
| `ngfx_compare_eye_passes` | 绘制,调度,复制和光线追踪工作的左右计数增量。 |
| `ngfx_find_missing_eye_dispatches` | 调度/光线追踪不对称,有助于在错误绘制之前找到缺少的生产者工作。 |
| `ngfx_event_state` | 一个事件和周围的调用,描述符/根状态,渲染目标,最新写入和 PSO 详细信息。 |
| `ngfx_trace_resource_lineage` | 每个索引调用提到的资源/符号,分为创建/绑定/写入/复制/调度/绘制/屏障角色。 |
| `ngfx_pso_bind_trace` | `SetPipelineState` / `vkCmdBindPipeline` 绑定和后续绘制/调度工作,即使创建钩子错过了 PSO。 |
| `ngfx_pso_swap_harness_plan` | 生成 D3D12 绘制时间 PSO 交换托管计划和可选 C++ 代码段,用于右眼着色器修补试验。 |
| `ngfx_shader_probe_plan` | 探测诸如 `t5`,`t8`,`t9`,`screenTile`,`SV_Position`,`View[148]` 和 `volumeUV` 等术语的变体。 |
| `ngfx_shader_bug_triage` | 来自交接,捕获路径,C++ 索引,疑似 PSO/哈希/CRC 和 ROI 的单个 LLM 就绪报告。 |
### 自主着色器修复循环助手
| 工具 | 回答内容 |
| --- | --- |
| `ngfx_sn2_repro_plan` / `ngfx_sn2_repro_run` | 构建或运行Subnautica 2启动脚本重现,附带预期捕获/日志产物。 |
| `ngfx_cpp_capture_from_saved_capture` | 在最佳可用UI辅助路径周围保存捕获的C++导出包装器。 |
| `ngfx_pair_eye_events` | 配对分类的左眼和右眼事件,并报告缺少的对应事件。 |
| `ngfx_resolve_shader_slots` | 在槽映射或描述符状态可用时,将诸如`t5`/`t8`/`t9`等着色器槽解析为根参数证据。 |
| `ngfx_descriptor_resource_candidates` | 从私有描述符状态RPC回复中,为着色器槽评分可能的资源句柄。 |
| `ngfx_trace_roi_history` | 在坏的ROI上生成或执行私有像素历史请求的网格。 |
| `ngfx_resource_producer_graph` | 为命名资源构建尽力读写生产者图。 |
| `ngfx_import_uevr_trace` | 将NDJSON/JSON/CSV UEVR运行时钩子跟踪导入摘要或SQLite数据库。 |
| `ngfx_pso_rehydration_plan` | 生成克隆带有补丁着色器字节码的图形PSO的C++计划/代码片段。 |
| `ngfx_shader_probe_execution_plan` | 发出特定着色器探针的闭环运行步骤。 |
| `ngfx_diff_hdr_roi` | 在不限制为8位的情况下,差异PFM/原始浮点HDR ROI数据。 |
| `ngfx_autofix_loop_plan` | 返回自主补丁/测试/评分循环。 |
| `ngfx_validate_fix_claim` | 接受/拒绝自动视觉修复声明的证据门控。 |
| `ngfx_shader_fix_regression_score` | 具有重复性、左眼漂移、事件序列和PSO覆盖门控的修复前后指标评分。 |
| `ngfx_fix_attempt_log` | 修复尝试的追加日志(输入、分数、判决)。 |
| `ngfx_fix_claim_evidence_bundle` | 将修复声明的证据捆绑到单个zip中以供审查。 |
### 资源写入历史和生产者谱系
基于C++捕获索引的静态事件顺序分析,适用于“谁在坏绘制之前写入了这个渲染目标?”以及差异左右眼资源历史。
| 工具 | 功能 |
| --- | --- |
| `ngfx_resource_write_history` | 每个写入命名资源的事件顺序 — 渲染目标、调度、复制、屏障。 |
| `ngfx_resource_write_history_pair_diff` | 差异化左/右资源对的写入时间线。 |
| `ngfx_resource_producer_lineage` | 递归跟踪生成给定渲染目标资源的绘制。 |
| `ngfx_producer_lineage_pair_diff` | 跟踪左、右生产者谱系并在各级差异化。 |
| `ngfx_copyrect_t0_resolution_report` | 解析配对的左/右CopyRectPS绘制的实际采样状态。 |
### Subnautica 2 雾和CopyRectPS自动化(示例着色器修复工具)
Subnautica 2右眼雾和CopyRectPS错误的完整端到端着色器修复工具。这些工具也可以作为针对任何特定游戏的修复循环的参考模板。
#### SN2 雾(VoxelizePS / VoxelizeGS)
| 工具 | 功能 |
| --- | --- |
| `ngfx_sn2_fog_artifacts` | 定位最新的干净r.Fog开启/关闭和VoxelizePS/VoxelizeGS产物。 |
| `ngfx_sn2_fog_signal_report` | 评估VoxelizePS/VoxelizeGS错误的干净r.Fog差异。 |
| `ngfx_sn2_fog_fix_plan` | 返回用于修复SN2雾信号的自主着色器/运行时计划。 |
| `ngfx_sn2_fog_descriptor_probe_plan` | 构建用于解析雾描述符/资源状态的实时BinaryReplay请求。 |
| `ngfx_sn2_fog_slot_candidates` | 从实时描述符状态回复中解析VoxelizeGS/VoxelizePS槽。 |
| `ngfx_sn2_fog_probe_manifest` | 编写或返回用于修复循环的SN2雾探针清单。 |
| `ngfx_sn2_fog_live_state_probe` | 收集一个SN2雾引导绘制的实时Nsight状态。 |
#### SN2 CopyRectPS(右眼纹理复制)
| 工具 | 功能 |
| --- | --- |
| `ngfx_sn2_copyrect_artifacts` | 定位SN2 CopyRectPS跟踪和着色器检查产物。 |
| `ngfx_sn2_copyrect_signal_report` | 跟踪CopyRectPS源纹理、目标目标和生产者证据。 |
| `ngfx_sn2_copyrect_fix_plan` | 返回SN2 CopyRectPS路径的Nsight驱动的修复计划。 |
| `ngfx_sn2_copyrect_descriptor_probe_plan` | 构建用于解析CopyRectPS t0/s0和目标状态的实时BinaryReplay请求。 |
| `ngfx_sn2_copyrect_slot_candidates` | 从实时描述符状态回复中解析CopyRectPS t0/s0槽。 |
| `ngfx_sn2_copyrect_t0_source_compare` | 在描述符状态解析后比较实时的左/右CopyRectPS PS t0资源。 |
| `ngfx_sn2_copyrect_pair_analysis` | 比较左/右CopyRectPS绘制并发出实时探针目标。 |
| `ngfx_sn2_copyrect_right_eye_issue_report` | 报告右眼错误的相同帧CopyRectPS的最强证据。 |
| `ngfx_sn2_copyrect_source_lineage_report` | 挖掘保存的CopyRectPS资源谱系同时保留表扫描描述符警告。 |
| `ngfx_sn2_copyrect_runtime_instrumentation_plan` | 用于证明CopyRectPS t0和矩形状态的运行时钩子清单。 |
| `ngfx_sn2_copyrect_live_state_probe` | 收集一个CopyRectPS BinaryReplay事件的实时Nsight状态。 |
| `ngfx_sn2_copyrect_live_pair_probe` | 探测配对的左/右CopyRectPS事件并解析实际PS t0是否匹配。 |
### 对象句柄/UID解析器
“是什么写入了这个缓冲区?”无需GUI。给定UID或规范名称(例如`Buffer_91`),跨引用对象索引、事件索引和(当存在时)C++捕获索引。
| 工具 | 功能 |
| --- | --- |
| `ngfx_resolve_handle` | 查找对象的创建调用 + 每个提及它的事件,按角色分类(创建/写入/绑定/绘制/调度/屏障/销毁/其他)。当为捕获构建C++捕获索引时,降级为“仅创建调用”。 |
### 帧成本分析(前N个昂贵操作)
| 工具 | 功能 |
| --- | --- |
| `ngfx_top_n_costs` | 在`ngfx-replay --perf-report-dir`输出或`.nsight-gputrace`存档(自动解压)中,按GPU时间排名前N行。嗅探列名(无硬编码模式)并规范化单位(ns/μs/ms/s)。过滤器:`kind_filter`,`name_regex`,`csv_basename_hint`。 |
### 后遗症/远程/ RPC
| 工具 | 功能 |
| --- | --- |
| `ngfx_aftermath_control` | 配置Aftermath崩溃转储生成。 |
| `ngfx_aftermath_monitor_start` | 在后台监视GPU崩溃/挂起。 |
| `ngfx_aftermath_format` | 格式化现有的崩溃转储。 |
| `ngfx_remote_monitor_start` | 为远程UI调试启动`nv-nsight-remote-monitor`无头。 |
| `ngfx_rpc_start` | 在TCP/命名管道/域套接字上启动`ngfx-rpc.exe`(重放RPC服务器)。 |
### 层(卸载)适用于Vulkan / VulkanSC / OpenXR
| 工具 | 功能 |
| --- | --- |
| `ngfx_layer_list` | 列出每个Nsight Graphics附带的层安装批处理脚本以及每个脚本是否存在的状态。 |
| `ngfx_layer_install` | 运行层(卸载)脚本。支持每用户+系统范围(`global_install=True`)。 |
### NGFX应用内SDK(头文件C/C++运行时)
| 工具 | 功能 |
| --- | --- |
| `ngfx_sdk_reference` | 枚举SDK中的每个头文件及其解析的`NGFX_*`函数声明+简介。 |
| `ngfx_sdk_grep` | 在NGFX包含树上进行正则表达式搜索。 |
| `ngfx_sdk_header_text` | 返回任何SDK头文件(例如`NGFX_GPUTrace_D3D12.h`)的原始文本。 |
| `ngfx_sdk_snippet` | 代码生成一个可粘贴的C++代码片段,用于`(activity, api)` — 例如`(GPUTrace, Vulkan)` → 初始化+启动/停止对。 |
### IDA Pro无头RE桥
附带的头文件涵盖应用内捕获/跟踪控制,但保存的捕获帧调试器状态、像素历史、资源历史和几个重放/RPC路径存在于Nsight的内部二进制文件中。MCP可以驱动IDA Pro无头缓存紧凑的JSON事实来填补这些空白。
| 工具 | 功能 |
| --- | --- |
| `ngfx_ida_environment` | 发现IDA Pro/Home/Free安装并列出已知的Nsight RE目标。覆盖`NSIGHT_GRAPHICS_MCP_IDA`。 |
| `ngfx_ida_analyze_binary` | 在`ngfx_rpc`、`ngfx_replay`、`frame_debugger_native`、`frame_debugger_d3d12`或`frame_debugger_vulkan`等目标上运行IDA无头;导出字符串、交叉引用、选定函数和有界Hex-Rays伪代码到MCP缓存中。 |
| `ngfx_ida_search_facts` | 在不重新运行IDA的情况下搜索缓存的IDA事实。 |
| `ngfx_ida_fact_summary` | 总结一个事实JSON。 |
| `ngfx_ida_command_preview` | 显示确切的无头命令形状而无需运行它。 |
| `ngfx_shader_debug_re_status` | 检查着色器调试自动化所需的RE事实是否已缓存,并显示像素历史、资源历史、事件状态和着色器变体测试的实现序列。 |
### 项目文件+UI交接
| 工具 | 功能 |
| --- | --- |
| `ngfx_project_create` / `ngfx_project_read` / `ngfx_project_update` | 编写/读取/修改`.nsight-gfxproj` XML,以便后续`ngfx --project <file>`调用是可复制的。 |
| `ngfx_open_in_ui` | 使用预加载的捕获/ GPU跟踪/项目启动完整的Nsight Graphics UI。 |
### 着色器编译+反射+反汇编
| 工具 | 功能 |
| --- | --- |
| `ngfx_glslang_compile` | 编译GLSL → SPIR-V(使用捆绑的`glslang.exe`)。 |
| `ngfx_dxc_compile` | 通过DXC编译HLSL(如果存在则使用捆绑的`dxc.exe`,否则使用PATH上的`dxc`)。 |
| `ngfx_shaderdebugger_configure` | 运行`nv-shaderdebugger-configurator.exe`。 |
| `ngfx_shader_reflection_bindings` | 解析DXBC/DXIL容器的RDEF(资源绑定)块 — 注册表→ `t0`/`s0`/`u0`/`b0`槽的命名映射。 |
| `ngfx_shader_disassembly_summary` | 通过`dxc.exe -dumpbin`进行着色器反汇编摘要。 |
### 发现+逃生口
| 工具 | 功能 |
| --- | --- |
| `ngfx_environment` | 解析安装路径、SDK路径、每个工具的可执行文件路径、默认捕获/ GPU跟踪目录。 |
| `ngfx_list_installs` | 检测到的每个Nsight Graphics版本。 |
| `ngfx_version` | `ngfx --version`。 |
| `ngfx_list_activities` | `ngfx --activity`接受的确切活动名称字符串。 |
| `ngfx_launch_status` / `ngfx_list_launches` / `ngfx_launch_stop` | 管理由上述任何工具启动的长时间运行的后台进程。 |
| `ngfx_raw` | 使用任意argv调用任何Nsight工具(`ngfx`、`ngfx_capture`、`ngfx_replay`、`ngfx_rpc`、`ngfx_ui`、`aftermath_*`、`remote_monitor`、`shaderdebugger_configurator`、`glslang`)。自动预添加可执行文件路径。 |
## 表面有多大?
**252个MCP工具**(+ 4个提示)截至本文撰写,分组在以下部分。
运行`nsight-graphics-mcp --list-tools`(或导入包并检查`server`)以获取最新枚举。
## 安装
```powershell
git clone https://github.com/elliotttate/nsight-graphics-mcp
cd nsight-graphics-mcp
python -m venv .venv
.venv\Scripts\activate
pip install -e ".[dev]"
```
运行时依赖项(自动安装):
* `mcp>=1.2` — MCP服务器SDK
* `pydantic>=2.0` — MCP工具参数的模式验证
* `psutil>=5.9` — 启动会话的过程/句柄内省
* `protobuf>=4.21` — 解码嵌入的`FileDescriptorProto` blob,用于`proto_descriptors` / `ngfx_proto_describe`
需要**Windows**和**NVIDIA Nsight Graphics**安装(默认位置`C:\Program Files\NVIDIA Corporation\Nsight Graphics <version>`)。
MCP自动发现最新安装的版本;使用`NSIGHT_GRAPHICS_MCP_INSTALL_ROOT=<path>`或每个工具的覆盖(`NSIGHT_GRAPHICS_MCP_NGFX`、`NSIGHT_GRAPHICS_MCP_NGFX_CAPTURE`、`NSIGHT_GRAPHICS_MCP_NGFX_REPLAY`等)覆盖。
快速烟雾测试:
```powershell
nsight-graphics-mcp --help
.venv\Scripts\python.exe -c "from nsight_graphics_mcp.config import get_settings; import json; print(json.dumps(get_settings().installation_info(), indent=2, default=str))"
```
## 编写到Claude Code / Claude Desktop
将以下内容添加到您的MCP配置中(`claude_desktop_config.json`或CLI等效项):
```json
{
"mcpServers": {
"nsight-graphics": {
"command": "E:/github/nsight-graphics-mcp/.venv/Scripts/nsight-graphics-mcp.exe",
"args": [],
"env": {
"NSIGHT_GRAPHICS_MCP_INSTALL_ROOT": "C:/Program Files/NVIDIA Corporation/Nsight Graphics 2026.1.0"
}
}
}
}
```
(仅当自动发现无法找到正确安装时,设置`NSIGHT_GRAPHICS_MCP_INSTALL_ROOT` — 将包含`host/windows-desktop-nomad-x64/`的目录传递给它。)
## 典型工作流程
### 1. 捕获,然后分析
```
ngfx_capture_launched(
exe="C:/games/MyGame.exe",
args=["-windowed"],
output_file="mygame.ngfx-gfxcap",
output_dir="C:/captures",
capture_frame=120,
bundle_replayer=True,
)
ngfx_open_capture("C:/captures/mygame.ngfx-gfxcap")
ngfx_capture_summary(capture="<handle>")
ngfx_index_events(capture="<handle>")
ngfx_event_histogram(capture="<handle>", by="kind")
```
### 2. 交互式:启动,按F11进入游戏,查找捕获
```
ngfx_capture_launched(
exe="C:/games/MyGame.exe",
output_dir="C:/captures",
capture_hotkey=True,
background=True,
)
# ...玩游戏,按F11...
ngfx_find_recent_captures(limit=5)
ngfx_open_capture("<newest path>")
```
### 3. “什么绘制在标记X内?”(无需UI)
```
ngfx_gputrace_launched(
exe="C:/games/MyGame.exe",
architecture="Blackwell GB20x",
metric_set_name="Top-Level Triage",
multi_pass_metrics=True,
real_time_shader_profiler=True,
limit_to_frames=1,
auto_export=True,
)
# 查找最新`.nsight-gputrace`
ngfx_find_recent_captures(kinds=["gpu_trace"], limit=1)
ngfx_open_gputrace("<path>")
ngfx_gputrace_archive(gputrace="<handle>")
ngfx_gputrace_read_member(gputrace="<handle>", member="metrics.json")
```
### 4. 应用内SDK集成
```
ngfx_sdk_reference() # 发现所有入口点
ngfx_sdk_snippet(activity="GraphicsCapture", api="D3D12")
ngfx_sdk_grep(pattern="NGFX_GPUTrace_StartEvent_") # 查找结构字段/枚举
ngfx_sdk_header_text(header="NGFX_GraphicsCapture_D3D12_Types.h")
```
### 5. 查找触及特定资源的每个调用
```
ngfx_index_events(capture="<h>")
ngfx_find_calls_by_arg(capture="<h>", substring="0x000001E1ABCD0000", limit=200)
ngfx_find_events(capture="<h>", kind="barrier", start=2000, end=3000)
```
### 6. 生成C++重现代码并验证其构建
```
ngfx_cpp_capture_launched(
exe="C:/games/MyGame.exe",
wait_frames=120,
output_dir="C:/repros/mygame_frame120",
)
ngfx_cpp_capture_find_solution(dir_or_sln="C:/repros/mygame_frame120")
ngfx_cpp_capture_build(dir_or_sln="C:/repros/mygame_frame120")
ngfx_cpp_capture_run(exe="<produced .exe>")
```
### 7. 为当前用户启用Vulkan捕获层
```
ngfx_layer_list()
ngfx_layer_install(layer="vk_ngfx_capture")
# ... 运行您的Vulkan应用程序,按F11捕获,然后:
ngfx_layer_install(layer="vk_ngfx_capture", uninstall=True)
```
### 8. 需要时交接给UI
```
ngfx_open_in_ui(path="C:/captures/mygame.ngfx-gfxcap")
```
### 9. 出口 - 任何未通过类型工具公开的内容
```
ngfx_raw(tool="ngfx_replay", argv=[
"--metadata-objects", "--quiet", "C:/captures/mygame.ngfx-gfxcap",
])
```
### 10. 每调用参数提取(UI往返→ SQLite索引)
当`--metadata-functions`仅为您提供函数名但您需要“事件18742的根参数3绑定了什么?”时:
```
ngfx_cpp_capture_open_in_ui(capture="C:/captures/mygame.ngfx-gfxcap")
# (人类单击文件→活动→生成C++捕获,选择输出目录)
ngfx_cpp_capture_wait_for_project(
watch_dir="C:/captures/mygame.ngfx-gfxcap.ngfxmcp_cpp_capture")
# → 返回 {project_dir: "...", solution: "...sln"}
ngfx_cpp_capture_index_calls(project_dir="<project_dir>")
# → 构建 <project_dir>/.ngfxmcp_cpp_calls.db
ngfx_cpp_capture_descriptor_bindings(
db_path="<project_dir>/.ngfxmcp_cpp_calls.db",
event_index=18742,
)
# → {d3d12: {root_signature, descriptor_heaps, pipeline_state,
# root_params: {0: {call, ...}, 1: {...}}, vertex_buffers,
# index_buffer, render_targets}, ...}
```
### 11. “是什么写入了这个缓冲区?”
```
ngfx_index_objects(capture="C:/captures/mygame.ngfx-gfxcap")
ngfx_index_events(capture="C:/captures/mygame.ngfx-gfxcap")
# (可选但推荐:首先运行C++捕获流程)
ngfx_resolve_handle(
capture="C:/captures/mygame.ngfx-gfxcap",
object_name="Buffer_91",
)
# → {uid, type_name, category, create_call: {event_index, function_name},
# mention_count, mentions_by_role: {bind: 14, write: 2, draw: 0, ...},
# mentions: [...]}
```
### 12. 帧性能分析 - 前N个昂贵绘制
```
ngfx_gputrace_launched(
exe="C:/games/MyGame.exe", architecture="Blackwell GB20x",
limit_to_frames=1, auto_export=True,
)
# ngfx写入一个.nsight-gputrace;或者使用--perf-report-dir获取CSV:
ngfx_replay_run_advanced(
capture="C:/captures/mygame.ngfx-gfxcap",
extra_args=["--perf-report-dir", "C:/perf/mygame"],
)
ngfx_top_n_costs(report_or_trace="C:/perf/mygame", n=20, kind_filter="draw")
```
### 13. 捕获差异 - 哪个好与不好之间有何不同?
```
ngfx_index_events(capture="C:/captures/good.ngfx-gfxcap")
ngfx_index_events(capture="C:/captures/bad.ngfx-gfxcap")
ngfx_event_stream_diff(
capture_a="C:/captures/good.ngfx-gfxcap",
capture_b="C:/captures/bad.ngfx-gfxcap",
cluster_min_size=2,
)
# → 函数/种类直方图增量 + LCS对齐插入/删除集群,
# + 参数级别差异(如果两者都有C++捕获索引)。
```
### 14. PSO → DXBC哈希查找
Nsight的CLI隐藏了PSO和着色器字节码哈希之间的链接;从生成的C++捕获源代码中恢复它:
```
# 在ngfx_cpp_capture_index_calls写入数据库后,
ngfx_pso_index(project_dir="C:/.../GeneratedCpp")
# → {shader_blob_count, pso_count, shader_format_histogram: {dxbc: N, spirv: M}, ...}
ngfx_pso_get(
db_path="C:/.../GeneratedCpp/.ngfxmcp_cpp_calls.db",
pso_symbol="g_PSO_42",
)
```
# → {pso_symbol, api: 'd3d12', creator: 'CreateGraphicsPipelineState',
# stages: {VS: {shader_symbol, hash_hex (DXBC MD5), format: 'dxbc', ...},
# PS: {...}}}
# 反向:给定来自性能工具/着色器调试器的哈希,
ngfx_pso_find_by_shader(db_path="...", hash_hex="aabbccdd...")
# → [{pso_symbol, stage, shader_symbol, api}, ...]
# 着色器切换器哈希路径:十六进制注释和十进制ShaderToggler.ini值均可。
ngfx_shader_blobs_find_crc32(db_path="...", crc32_hex="1cf439e7")
ngfx_shader_blob_dump(db_path="...", crc32_hex="1cf439e7", output_path="C:/tmp/1cf439e7.dxil")
### 15. 浏览protobuf模式(逆向工程导出)
```
ngfx_proto_search(pattern="RootParam")
# → ["PbRootParameter", "PbRootDescriptor", ...]
ngfx_proto_describe(message_fqn="NV.EventParameters.Messages.PbFunctionCallDesc")
# → {full_name, fields: [{name: 'functionName', ...},
# {name: 'arguments', is_repeated: True,
# type_name: 'NV.EventParameters.Messages.PbArgument'},
# ...]}
```
## 函数索引工作原理
第一次调用 `ngfx_index_events` 时,MCP运行
```
ngfx-replay --metadata-functions --quiet <capture> > <cache>/functions.txt
```
并写入转储和SQLite数据库(`<capture>.ngfxmcp/functions.db`)
旁边捕获。 模式:
```sql
calls(
idx INTEGER PRIMARY KEY,
name TEXT,
args TEXT,
ret TEXT,
kind TEXT, -- draw|dispatch|copy|barrier|present|ray_tracing|sync|set_state|other
line INTEGER,
raw TEXT
);
```
索引按捕获的修改时间键控,因此后续重新捕获
自动失效。
## 注意事项
- **仅限Windows。** Nsight Graphics命令行界面是Win32本地(Windows 10 / 11 x64)。
- **必须安装Nsight Graphics。** 设置
`NSIGHT_GRAPHICS_MCP_INSTALL_ROOT` 如果自动发现没有选择
正确的版本。
- 函数流解析器是基于正则表达式的 `ngfx-replay`
人类可读输出。 不匹配 `Name(args)` 形状的行
被归类为 `unrecognised_lines` 并通过
`ngfx_capture_functions` (原始直通)保持可访问。
- 一些交互式UI功能 - 每个着色器的源代码配置文件滚动,
PSO浏览器,截图 scrubber,帧调试器像素历史 -
不能完全复制无头。 使用 `ngfx_open_in_ui` 来执行这些操作。
- 系统范围的层安装(`global_install=True`)需要运行
MCP主机提升。
- DirectX着色器编译器(`dxc.exe`)并不总是随Nsight Graphics发布;
如果 `ngfx_dxc_compile` 报告缺少,请单独安装。
## 布局
```
src/nsight_graphics_mcp/
config.py # 安装/SDK/每个工具的发现和缓存路径
cli.py # 通用子进程包装器(同步+异步+后台)
session.py # 捕获/ gputrace /启动会话注册表
capture_info.py # ngfx-replay --metadata*解析器
captures.py # 捕获目录发现+差异(最近捕获的奇偶校验)
capture_diff.py # 两个捕获之间的事件流LCS差异
capture_format.py # 低级别.ngfx-gfxcap检查(RE导出)
capture_decoder.py # 直接.ngfx-gfxcap头部/块/ TOC解码器
deep_capture.py # 深度Nsight-only捕获分析的能力报告
events.py # 函数流索引器(事件列表奇偶校验)
gputrace.py # .nsight-gputrace zip + WRPV二进制检查
cpp_capture.py # MSBuild +运行以生成C ++捕获输出
cpp_capture_parser.py # 遍历发射的.cpp,将每个调用参数索引到SQLite
cpp_bridge_re.py # 保存的捕获→C ++导出私有桥RE助手
proto_schemas.py # 仅限名称的protobuf模式库存
proto_descriptors.py # 完整的FileDescriptorProto提取→DescriptorPool
rpc_client.py # ngfx-rpc.exe自定义传输客户端(RE导出)
rpc_trace.py # 离线ngfx-rpc帧转录解码器
frame_debugger_rpc.py # 持久私有帧调试器RPC会话
etw_capture.py # logman/tracerpt ETW内核文件捕获包装器
pe_patch_planner.py # ngfx-rpc.exe记录器 trampolines的PE补丁计划器
ida_re.py # IDA Pro无头RE助手
handle_resolver.py # 对象句柄→创建调用+角色分组的提及
pso_resolver.py # PSO→DXBC/SPIR-V哈希映射(Nsight CLI间隙)
frame_costs.py # 来自性能报告目录/ gputrace zip的GPU时间前N个
objects.py # 对象索引(资源/管道窗格奇偶校验)
project.py # .nsight-gfxproj XML创作
shaders.py # glslang + DXC + shaderdebugger配置包装器
shader_debug.py # 着色器调试编排(RE缓存门控+计划)
shader_triage.py # 着色器视觉错误分类组成层
eye_issue.py # 保存的捕获立体眼问题分类
autonomous_shader_fix.py # 确定性助手用于LLM驱动的修复循环
layers.py # Vulkan/VKSC/XR层(卸载)安装脚本
sdk.py # 应用内SDK头引用+代码生成
ui.py # ngfx-ui.exe交接
watch.py # 捕获目录监视器(用于热键驱动的流程)
redist.py # 捆绑的D3D12 Agility SDK / DXC / DLSS /等库存
doctor.py # 一次性健康检查
server.py # FastMCP服务器注册每个工具
__main__.py # 控制台入口点
tests/ # pytest套件-合成数据用于解析器,
# 本地二进制测试proto_descriptors当
# Nsight Graphics在本地安装。
docs/
CAPTURE_FORMAT.md # .ngfx-gfxcap包装器的RE注释
RPC_PROTOCOL.md # ngfx-rpc.exe传输的RE注释
NSIGHT_SHADER_DEBUG_AUTONOMY.md # 当前着色器调试状态/计划
```
## 许可证
MIT。
## 完整工具参考
自动从 `server.py` 文档字符串生成。 **252个工具** 按
部分注释在 `server.py` 中组织 - 顺序与
滚动文件时发现的顺序匹配。
### 环境 + 发现
- **`ngfx_environment`** — 报告解析的Nsight Graphics安装+每个工具的路径+缓存目录。
- **`ngfx_list_installs`** — 列出在此机器上检测到的每个Nsight Graphics安装。
- **`ngfx_deep_capture_capability_report`** — 从保存的转储中评估图形捕获,实时重放RPC,GPU Trace-on-replay,C ++捕获和原始捕获解码的能力。
- **`ngfx_version`** — 返回 ``ngfx.exe --version`` 报告的版本。
- **`ngfx_list_activities`** — 列出 ``ngfx.exe`` 接受的活动名称(从--help解析)。
### 图形捕获活动(通过ngfx.exe)
- **`ngfx_graphics_capture_launched`** — 运行 ``ngfx --activity 'Graphics Capture' --exe <exe> ...``。
- **`ngfx_graphics_capture_attached`** — 与运行的PID附件相同 ``ngfx_graphics_capture_launched``。
### 通过ngfx-capture.exe进行无头图形捕获
- **`ngfx_capture_launched`** — 直接运行 ``ngfx-capture.exe`` (不需要Nsight UI)。
- **`ngfx_capture_recapture`** — 重新捕获/重新压缩现有的 ``.ngfx-capture`` / ``.ngfx-gfxcap``,使用当前格式。
- **`ngfx_capture_recompress`** — 在不重新运行应用程序的情况下重新压缩现有的捕获。
### 捕获会话管理 + 元数据
- **`ngfx_open_capture`** — 将捕获文件路径注册为会话句柄。
- **`ngfx_list_captures`** — 列出所有打开的捕获会话。
- **`ngfx_close_capture`** — _(无文档字符串)_
- **`ngfx_capture_summary`** — 捕获的高级摘要(运行 ``ngfx-replay --metadata``)。
- **`ngfx_capture_objects`** — 运行 ``ngfx-replay --metadata-objects``:捕获中记录的每个API对象的完整JSON列表(设备,队列,管道,资源...)。
- **`ngfx_capture_functions`** — 转储记录的函数流( ``ngfx-replay --metadata-functions``)。
- **`ngfx_capture_logs`** — 转储捕获的应用程序/驱动程序日志消息嵌入在捕获中。
- **`ngfx_capture_screenshot`** — 将嵌入的最终呈现截图写入文件。
### 重放(ngfx-replay.exe)
- **`ngfx_replay_run`** — 使用 ``ngfx-replay.exe`` 重放捕获并返回其输出。
- **`ngfx_replay_bundle_extract`** — 将捆绑的重放捕获内容提取到目录中,而不运行重放。
- **`ngfx_replay_metadata`** — 直接传递到 ``ngfx-replay --metadata`` (解析的键/值)。
### GPU 跟踪分析器
- **`ngfx_gputrace_archs`** — 返回 ``--architecture`` 接受的GPU架构列表。
- **`ngfx_gputrace_launched`** — 运行 ``ngfx --activity 'GPU Trace Profiler' --exe <exe> ...``。
- **`ngfx_gputrace_attached`** — 将GPU Trace附加到正在运行的进程的PID。默认为热键驱动。
- **`ngfx_gputrace_capture_replay`** — 对保存的图形捕获运行GPU Trace Profiler,使用重放开始/重放结束触发器。
### GPU 跟踪报告会话管理
- **`ngfx_open_gputrace`** — 将 `.nsight-gputrace` 路径注册为会话句柄。
- **`ngfx_list_gputraces`** — _(无文档字符串)_
- **`ngfx_close_gputrace`** — _(无文档字符串)_
- **`ngfx_gputrace_inspect`** — 对 ``.nsight-gputrace`` 文件进行尽力检查。
- **`ngfx_gputrace_shader_pipeline_search`** — 在GPU Trace数据中搜索着色器/管道的着色器哈希,名称或入口点。
### 生成C ++捕获活动
- **`ngfx_cpp_capture_launched`** — 运行 ``ngfx --activity 'Generate C++ Capture' ...``。
- **`ngfx_cpp_capture_saved_bridge_re_analyze`** — 为私有保存的捕获-> C ++桥运行目标IDA通道。
- **`ngfx_cpp_capture_saved_bridge_re_report`** — 总结完全无头的保存捕获的C ++导出的当前RE证据。
- **`ngfx_cpp_capture_saved_pylon_handoff_preview`** — 预览保存的捕获Generate C ++ Capture的固定Pylon启动器设置。
- **`ngfx_cpp_capture_saved_direct_rpc_plan`** — 预览直接FrameDebugger序列化-RPC请求/回调计划。
- **`ngfx_cpp_capture_saved_file_transfer_apply`** — 将一个FrameDebugger序列化文件传输通知应用于磁盘。
- **`ngfx_cpp_capture_saved_output_dir_setting`** — 预览或写入候选QSettings输出目录值用于C ++导出。
- **`ngfx_cpp_capture_saved_export_validate`** — 验证和索引保存的捕获Generate-C ++-Capture导出。
- **`ngfx_cpp_capture_saved_ui_automation_attempt`** — 为保存的捕获C ++导出尝试尽力而为的pywinauto UI回退。
- **`ngfx_cpp_capture_saved_headless_attempt`** — 尝试所有已知的保存捕获-> C ++导出路由,然后验证输出。
- **`ngfx_cpp_capture_saved_artifact_bundle`** — 将捕获/导出验证工件捆绑到一个zip中。
### OpenGL帧调试器
- **`ngfx_framedebugger_launched`** — 运行 ``ngfx --activity 'OpenGL Frame Debugger' ...``。
### 启动/后台进程管理
- **`ngfx_launch_status`** — 状态+后台启动的最近stdout/stderr。
- **`ngfx_list_launches`** — _(无文档字符串)_
- **`ngfx_launch_stop`** — _(无文档字符串)_
### 远程监视器/ RPC
- **`ngfx_remote_monitor_start`** — 在此机器上启动无头 ``nv-nsight-remote-monitor.exe`` ,以便远程Nsight UI连接。返回启动句柄-调用 ``ngfx_launch_stop`` 以终止它。
- **`ngfx_rpc_start`** — 启动无头 ``ngfx-rpc.exe`` (重放UI服务器)。
- **`ngfx_rpc_protocol_info`** — 返回我们对 ``ngfx-rpc.exe`` 自定义线路协议的所有了解-对编写自己的客户端的调用者很有用。完整的推导位于 ``docs/RPC_PROTOCOL.md`` (在此存储库中)。
- **`ngfx_rpc_transport_connect`** — 打开到正在运行的 ``ngfx-rpc.exe`` 的一个TCP传输连接并立即关闭它。作为烟雾测试很有用:它验证服务器可达并且8字节帧魔术检查通过。
- **`ngfx_rpc_send_raw_frame`** — 低级别的逃生通道:发送一个传输帧和(可选)等待一个回复帧。对于协议RE工作很有用。
- **`ngfx_frame_debugger_rpc_schema`** — 描述用于像素/资源历史的私有BinaryReplay RPC方法。
- **`ngfx_pixel_history`** — 调用Nsight的私有BinaryReplay像素历史方法或预览确切的protobuf请求。
- **`ngfx_resource_access_history`** — 调用Nsight的私有资源访问历史方法,用于一个API句柄。
- **`ngfx_resource_revision_at_event`** — 从私有资源历史中派生一个资源修订版,使用可选的持久会话重用。
- **`ngfx_rpc_open_capture_session`** — 打开一个持久的帧调试器RPC会话并可选地启动捕获。
- **`ngfx_rpc_capture_session_status`** — 列出持久的帧调试器RPC会话,或总结一个句柄。
- **`ngfx_rpc_close_capture_session`** — 关闭持久的帧调试器RPC会话。
- **`ngfx_rpc_call_binary_replay`** — 在打开的帧调试器RPC会话上调用任意BinaryReplay方法。
### 崩溃转储工具(崩溃转储工具)
- **`ngfx_aftermath_control`** — 运行 ``nv-aftermath-control.exe`` 并提供参数。
- **`ngfx_aftermath_monitor_start`** — 启动 ``nv-aftermath-monitor.exe`` 在后台监视GPU崩溃/挂起并写入转储文件。
- **`ngfx_aftermath_format`** — 运行 ``nv-aftermath-format.exe`` 针对现有的崩溃转储。
### 层安装助手
- **`ngfx_layer_list`** — 列出Vulkan / VulkanSC / OpenXR层安装脚本随Nsight Graphics安装,并检查每个脚本是否存在。
- **`ngfx_layer_install`** — 运行Nsight Graphics层安装脚本。
### NGFX SDK助手(应用内集成)
- **`ngfx_sdk_reference`** — 枚举NGFX应用内SDK中的每个头文件,并为每个文件解析函数声明(名称,参数,简介)。
- **`ngfx_sdk_grep`** — 在NGFX头文件树中搜索正则表达式(返回匹配的文件名,行号和匹配的行文本)。
- **`ngfx_sdk_snippet`** — 为(活动,API)对生成C ++集成代码段。
- **`ngfx_sdk_header_text`** — 返回NGFX SDK头的原始文本。
### 出口
- **`ngfx_raw`** — 出口 - 调用任何支持的Nsight工具并带有任意argv。
### 捕获目录发现+差异(与GUI的“最近捕获”一致)
- **`ngfx_find_recent_captures`** — 在标准Nsight输出目录(和可选的额外目录)查找最近的捕获/ GPU跟踪文件。最新的优先。
- **`ngfx_list_captures_in_dir`** — 枚举目录下的每个捕获/ gputrace文件。
- **`ngfx_capture_diff`** — 两个捕获的解析的 `--metadata`` 摘要的差异。
### 函数流索引器(事件列表一致性)
- **`ngfx_index_events`** — 将捕获的函数流索引到它旁边的SQLite DB中。
- **`ngfx_find_events`** — 索引的函数流的过滤搜索。
- **`ngfx_get_event`** — 按索引在索引的函数流中查找单个调用。
- **`ngfx_event_histogram`** — 记录的调用按 ``name`` 或 ``kind`` 分组的直方图。
- **`ngfx_find_calls_by_arg`** — 按参数子字符串搜索记录的调用。
### 对象索引(PSO /着色器/资源库存- GUI“资源”一致性)
- **`ngfx_index_objects`** — 将捕获中记录的每个API对象索引到SQLite DB中。
- **`ngfx_query_objects`** — 记录的对象过滤列表。
- **`ngfx_get_object`** — 按uid查找单个记录的对象。
- **`ngfx_object_histogram`** — 记录的对象按 ``type_name`` , ``category`` 或 ``api`` 分组的直方图。
- **`ngfx_object_query`** — 对对象索引的只读SQL查询(SELECT / WITH)。
- **`ngfx_list_pipelines`** — `列出捕获中的每个管道/管道布局/描述符集布局/管道缓存/根签名/状态对象。
- **`ngfx_list_shaders`** — 列出捕获中记录的每个着色器模块/着色器程序/着色器。
- **`ngfx_list_resources`** — 列出每个记录的资源(缓冲区/图像/采样器/设备内存/堆)。
- **`ngfx_event_query`** — 对函数索引进行只读SQL查询(SELECT / WITH)。
### C++ 捕获构建 + 运行
- **`ngfx_cpp_capture_find_solution`** — 定位由 Generate-C++-Capture 运行生成的 `.sln` 文件。
- **`ngfx_cpp_capture_build`** — 在 Generate-C++-Capture 输出目录或 `.sln` 文件上调用 MSBuild。
- **`ngfx_cpp_capture_run`** — 运行 Generate-C++-Capture 可执行文件以验证重现仍然有效。
- **`ngfx_cpp_capture_dump`** — 生产 C++ 捕获转储并对其进行索引的“一站式”助手。使用无头 CLI 进行实时应用启动,并使用 UI 辅助路径进行保存捕获。
- **`ngfx_cpp_capture_open_in_ui`** — 在 `ngfx-ui.exe` 中打开保存的捕获,以便人类可以针对它运行 UI 的 *Generate C++ Capture* 活动(CLI 活动不能执行此操作,它需要原始应用程序重新启动)。
- **`ngfx_cpp_capture_wait_for_project`** — 轮询 `watch_dir` 直到 Generate-C++-Capture 项目到达并且其 `.sln` 文件停止增长。返回项目根目录 + 解决方案路径。
- **`ngfx_cpp_capture_index_calls`** — 遍历 Generate-C++-Capture 项目,解析每个命令列表/命令缓冲区调用,并将它们索引到 SQLite 中以进行逐事件查询。
- **`ngfx_cpp_capture_event_args`** — 通过其合成 `event_index` 查找一个 C++ 捕获事件。
- **`ngfx_cpp_capture_query_calls`** — 对索引的 C++ 调用流进行过滤查询。
- **`ngfx_cpp_capture_descriptor_bindings`** — 通过扫描索引的 C++ 调用流向后,重新构造在 `event_index` 处生效的描述符/根参数/顶点 + 索引缓冲区/渲染目标绑定状态。
- **`ngfx_cpp_capture_sql`** — 对 C++ 调用索引 DB 进行只读 SELECT/WITH 查询。
### 着色器编译 + 着色器调试器
- **`ngfx_glslang_compile`** — 使用 `glslang.exe`(捆绑)编译 GLSL/SPIR-V 着色器。
- **`ngfx_dxc_compile`** — 通过 DXC 编译 HLSL 着色器。
- **`ngfx_shaderdebugger_configure`** — 运行 `nv-shaderdebugger-configurator.exe`(使用 `extra_args=['--help']` 发现标志)。
### UI 传递
- **`ngfx_open_in_ui`** — 启动 `ngfx-ui.exe` 以在完整的 Nsight Graphics UI 中打开捕获/ gputrace / 项目文件。
### 捕获观察者 / 等待新捕获
- **`ngfx_wait_for_new_capture`** — 轮询一个或多个目录,直到新的捕获(或 GPU 跟踪)到达,其大小稳定,然后返回其路径。
### 医生 / 健康检查 + 工具帮助自省
- **`ngfx_doctor`** — 一次性健康检查:安装发现、每个工具路径、层脚本、输出目录可写性、`nvidia-smi` 驱动程序/GPU 信息和 Vulkan 隐式/显式层注册表。报告应该修复的“问题”列表。
- **`ngfx_tool_help`** — 运行 `<tool> --help`(或 `ngfx` 的 `--help-all`)以发现已安装的 Nsight 二进制文件的确切标志。
### 函数流原始样本 + 跨捕获差异
- **`ngfx_function_stream_sample`** — 返回记录的函数流的第一个 `head`(和可选的最后一个 `tail`)原始行。
- **`ngfx_function_stream_diff`** — 两个捕获的索引函数流之间的差异。
### 诊断宏
- **`ngfx_capture_quick_triage`** — 在一次调用中对捕获运行完整的“第一眼”流水线:
### 可重新分发 + 注册表
- **`ngfx_list_d3d12_redist`** — 列出与 Nsight Graphics 捆绑的 D3D12 Agility SDK 可重新分发版本。传递 `preview=True` 以获取预览 SDK。
- **`ngfx_list_runtime_dlls`** — 列出 Nsight Graphics 主机 bin 目录中捆绑的运行时 DLL(DXC、DXIL、Aftermath、WinPixEventRuntime、DirectStorage、NGX/DLSS)。
- **`ngfx_registry_restore`** — 运行捆绑的 `RegistryRestore.ps1` 以将 Nsight Graphics 的注册表键恢复为默认值。
### 原型模式参考(从 ngfx-replay 二进制文件提取)
- **`ngfx_proto_schemas`** — 返回从 Nsight 二进制文件中提取的 protobuf 模式清单。
- **`ngfx_proto_search`** — 在提取的 protobuf 模式中搜索名称或 FQN 的正则表达式。
- **`ngfx_proto_describe`** — 返回从 Nsight 二进制文件中提取的 protobuf 消息的完整字段级模式。
- **`ngfx_proto_list_messages`** — 列出解码的模式池中的每个完全限定的消息名称。
- **`ngfx_proto_extract_descriptors`** — 从 Nsight 二进制文件中重新提取 FileDescriptorProto 块并重建进程内模式注册表。
### 捕获差异 - “git diff for captures”
- **`ngfx_event_stream_diff`** — 两个捕获的每个事件函数流之间的差异(比 `ngfx_capture_diff` 更深入,后者仅差异元数据摘要)。
### 对象句柄/UID 解析器
- **`ngfx_resolve_handle`** — 通过 uid 或名称查找 API 对象,找到其创建调用,并枚举每个提及它的 C++ 捕获事件 - 按角色分类(创建/写入/绑定/绘制/调度/障碍/销毁/其他)。
### PSO → DXBC/SPIR-V 哈希映射
- **`ngfx_pso_index`** — 遍历 Generate-C++-Capture 项目并将 PSO → 着色器哈希映射索引到 SQLite。
- **`ngfx_pso_get`** — 查找一个 PSO 的着色器阶段:每个条目都是 `{shader_symbol, format (dxbc/dxil/spirv), hash_hex, hash_source, shader_toggler_crc32, declared_byte_count, head_hex}`。
- **`ngfx_pso_list`** — 列出每个索引的 PSO,并附有一行阶段摘要(`VS:g_VS_xxx, PS:g_PS_yyy`)。按 `api`(`d3d12`/`vulkan`)过滤。
- **`ngfx_pso_find_by_shader`** — 反向查找:哪些 PSO 使用给定的着色器?提供 C 级着色器符号(例如 `g_VS_0x1234`)、DXBC/SPIR-V 哈希或 ShaderToggler CRC32。
- **`ngfx_shader_blobs_list`** — 列出索引的着色器字节码块来自 C++-Capture 项目。按格式(`dxbc`/`dxil`/`spirv`/`unknown`)、`hash_hex`(精确匹配)和/或 `shader_toggler_crc32` 过滤。
- **`ngfx_shader_blobs_find_crc32`** — 通过 ShaderToggler CRC32 查找着色器字节码块,接受十六进制或十进制。
- **`ngfx_shader_blob_dump`** — 通过着色器符号或 ShaderToggler CRC32 将索引的着色器字节码块转储到磁盘。
### 着色器视觉错误诊断编排
- **`ngfx_shader_triage_plan`** — 返回本地化和修复着色器视觉错误的混凝土 MCP 工作流程。
- **`ngfx_eye_issue_dump_report`** — 总结保存的捕获证据、转储阻止程序和右侧问题所需的下一个 Nsight 操作。
- **`ngfx_eye_issue_event_signatures`** — 从仅名称的保存函数元数据中构建候选的左右事件对。
- **`ngfx_eye_event_index`** — 使用立体正则表达式、视口/剪刀半提示和继承状态将 C++-Capture 事件分类为左右/两者/未知。
- **`ngfx_compare_eye_passes`** — 从 C++-Capture 索引比较左右绘制/调度/复制计数。
- **`ngfx_find_missing_eye_dispatches`** — 在分类的眼睛之间查找调度/光线追踪的不对称性。
- **`ngfx_event_state`** — 返回绘制/调度事件、附近的调用、绑定的描述符和 PSO 信息。
- **`ngfx_trace_resource_lineage`** — 查找提及资源/符号的 C++-Capture 调用并按角色分类。
- **`ngfx_pso_bind_trace`** — 跟踪 SetPipelineState/vkCmdBindPipeline 和后续绘制/调度工作。
- **`ngfx_pso_swap_harness_plan`** — 生成 D3D12 绘制时间 PSO 交换托管计划和可选的 C++ 文件。
- **`ngfx_shader_probe_plan`** — 为疑似项(如 t5/t8/t9)生成有针对性的着色器探测计划。
- **`ngfx_shader_bug_triage`** — 从捕获/索引/交接证据中生成一个 LLM 就绪的着色器错误报告。
- **`ngfx_sn2_repro_plan`** — 构建确切的 Subnautica 2 启动脚本重现命令和预期工件。
- **`ngfx_sn2_repro_run`** — 使用捕获友好的环境运行 Subnautica 2 重现启动脚本的干燥运行或执行。
- **`ngfx_cpp_capture_from_saved_capture`** — 通过可用的 Nsight 路径,从保存的捕获中导出 Generate-C++-Capture 输出。
- **`ngfx_pair_eye_events`** — 配对左右绘制、调度、复制和光线追踪事件,并报告缺少的对应项。
- **`ngfx_resolve_shader_slots`** — 将诸如 `t5`、`t8` 和 `t9` 之类的着色器资源槽解析为可用的根目录/描述符证据。
- **`ngfx_descriptor_resource_candidates`** — 从私有描述符状态 RPC 回复中为着色器槽评分可能的资源句柄。
- **`ngfx_trace_roi_history`** — 为网格上的怀疑 ROI 生成或执行私有像素历史请求。
- **`ngfx_resource_producer_graph`** — 从 C++-Capture 索引构建资源生产者/读取者的尽力图。
- **`ngfx_import_uevr_trace`** — 将 UEVR 钩子跟踪从 JSON、NDJSON、CSV 或键/值日志导入汇总或 SQLite。
- **`ngfx_pso_rehydration_plan`** — 为在图形 PSO 中测试修补的着色器字节码而生成 C++ 克隆/重新创建计划。
- **`ngfx_shader_probe_execution_plan`** — 发出混凝土着色器探测试验的封闭循环步骤。
- **`ngfx_diff_hdr_roi`** — 比较原始/PFM 浮点图像 ROI 数据而无需 8 位钳制。
- **`ngfx_autofix_loop_plan`** — 返回用于驱动重复修复试验的自主补丁/测试/评分循环。
- **`ngfx_validate_fix_claim`** — 使用改进、重复性、左眼漂移和因果关系门控拒绝或接受修复声明。
- **`ngfx_shader_fix_regression_score`** — 评估着色器修复运行是否可接受或退化。
### 帧成本分析 - 顶部 N 个昂贵的绘制/调度/区域
- **`ngfx_top_n_costs`** — 返回 `ngfx-replay --perf-report-dir` 输出或 `.nsight-gputrace` 存档中所有 CSV 文件中按 GPU 时间排名前 N 个最昂贵的动作。
### 低级捕获文件检查(RE 导出)
- **`ngfx_capture_format_info`** — `.ngfx-gfxcap` 文件的结构检查。
- **`ngfx_capture_lz4_decompress`** — 实验:尝试从捕获文件中 LZ4 块解压缩字节范围。有用探查块布局。返回解压缩字节的十六进制预览和大小;对于未知块,传递一个慷慨的 `uncompressed_size_hint`(默认为 `len(data) * 8`)。
- **`ngfx_decode_protobuf_wire`** — 实验:将字节范围解码为通用 protobuf 线格式。
### 直接捕获文件解码器(标头/块/目录/事件)
- **`ngfx_capture_decode_header`** — 解码 `.ngfx-capture` / `.ngfx-gfxcap` 的包装器标头。
- **`ngfx_capture_decode_chunks`** — 列出捕获文件的前 `max_chunks` 个块。
- **`ngfx_capture_decode_toc`** — 解码捕获文件的 `NV.PbTableOfContents` 块。
- **`ngfx_capture_decompress_chunk_by_id`** — 定位 `kind`(块 ID)等于 `chunk_id` 的块并解压缩。
- **`ngfx_capture_search_payloads`** — 在解压缩的捕获块中搜索着色器名称、哈希或原始十六进制字节。
- **`ngfx_capture_shader_chunks`** — 在保存的捕获文件中查找嵌入的 DXBC/DXIL 着色器块并返回块 ID、字符串和哈希候选。
- **`ngfx_capture_chunk_references`** — 在解压缩的捕获块中搜索对块 ID 或任意字节/字符串针的引用。
- **`ngfx_capture_decode_events`** — 捕获 `PbFunctionCallDesc` 记录的尽力扫描。
- **`ngfx_capture_event_args`** — 通过直接捕获解码查找 `event_index` 处的每个事件参数。
### 通过 RE 发现的额外重放标志
- **`ngfx_replay_screenshot`** — 重放捕获并将每帧的截图转储到 `output_dir`。
- **`ngfx_replay_gpu_frametimes`** — 启用 GPU 帧时间收集的重放捕获。
- **`ngfx_replay_run_advanced`** — 使用通过逆向工程发现的任意标志运行 `ngfx-replay`。
### 描述符堆/根签名时间线
- **`ngfx_capture_descriptor_heap_timeline`** — 每个堆的描述符相关 D3D12 调用事件顺序的时间线。
- **`ngfx_capture_root_signature_ranges`** — 解析 C++ 项目引用的每个 D3D12 根签名块(根参数 + 描述符表范围)。
- **`ngfx_capture_root_signature_lookup`** — 将着色器寄存器(例如 `t0` 在空间 `0` 中)解析为满足它的根参数索引。
### 二进制 WRPV `.ngfx-gputrace` 检查
- **`ngfx_gputrace_wrpv_search`** — 在二进制 `.ngfx-gputrace`(WRPV 容器)中搜索针。
- **`ngfx_gputrace_wrpv_strings`** — 从 WRPV 报告中提取可打印的字符串并带有字节偏移。
- **`ngfx_gputrace_wrpv_sections`** — WRPV 报告中类似标头的字段的尽力列表。
- **`ngfx_gputrace_wrpv_table_preview`** — `offset` 处的 `length` 字节的十六进制 + ASCII 预览。
- **`ngfx_gputrace_shader_bindings`** — 在 WRPV 报告中搜索着色器绑定证据。
### 着色器反射 + 反汇编
- **`ngfx_shader_reflection_bindings`** — 解析 DXBC/DXIL 着色器容器的 RDEF(资源绑定)块 - 注册表 → 名称映射为 `t0` / `s0` / `u0` / `b0` 槽。
- **`ngfx_shader_disassembly_summary`** — 通过 `dxc.exe -dumpbin` 的尽力着色器反汇编摘要。
### RPC 探测、转录和实时事件映射
- **`ngfx_rpc_endpoint_resolve`** — 将 `ngfx-rpc` 进程或显式参数解析为 TCP / 命名管道端点信息。
- **`ngfx_rpc_endpoint_probe`** — 解析并探测 RPC 端口,分类 BinaryReplay 准备情况。
- **`ngfx_rpc_find_live_events`** — 扫描实时 BinaryReplay `EventDetails` 以将钩子绘制序号映射到保存的 `event_index` 值。
- **`ngfx_rpc_decode_frame`** — 从十六进制解码 ngfx-rpc 传输帧或原始消息体。
- **`ngfx_rpc_transcript_import`** — 导入并解码 JSON / NDJSON / 纯十六进制 ngfx-rpc 转录。
- **`ngfx_rpc_session_binding_report`** — 总结 BinaryReplay 会话 / 槽绑定证据从帧转录。
- **`ngfx_rpc_capture_open_sequence_report`** — 已知的观察到的捕获打开序列的结构化摘要。
- **`ngfx_rpc_direct_export_binding_candidate`** — 从转录中导出直接保存的 C++ RPC 绑定候选。
- **`ngfx_cpp_capture_saved_direct_rpc_export`** — 未来直接 FrameDebugger 序列化 RPC 出口入口点。
### ETW 内核文件捕获 ngfx-rpc 的捕获
- **`ngfx_rpc_etw_environment`** — 探测 Windows ETW 捕获工具(`logman` / `tracerpt`)。
- **`ngfx_rpc_etw_capture_start`** — 启动针对 ngfx-ui ↔ ngfx-rpc I/O 的内核文件 ETW 会话。
- **`ngfx_rpc_etw_capture_stop`** — 停止先前启动的内核文件 ETW 会话。
- **`ngfx_rpc_etw_capture_summary`** — 将 ETL 跟踪转换为 XML / CSV 并总结计数。
### ngfx-rpc.exe 的 PE 修补计划
- **`ngfx_rpc_etw_capture_summary`** -> 将 ETL 跟踪转换为 XML / CSV 并总结计数。
### ngfx-rpc.exe 的 PE 补丁计划器
- **`ngfx_rpc_pe_patch_plan`** — 在 `ngfx-rpc.exe` 上计划(不应用)记录者-存根补丁。
- **`ngfx_rpc_pe_patch_ida_script`** — 发出一个 IDA Pro 9.0 无头 Python 脚本,该脚本实现了该计划。
### Pylon 私有桥接 RE(已保存捕获 -> C++ 导出)
- **`ngfx_pylon_private_bridge_re_report`** — 报告剩余的私有 Pylon / BinaryReplay 执行器构建内容。
- **`ngfx_pylon_bridge_probe_plan`** — 返回 Pylon 私有活动管理器桥接器的具体探测计划。
- **`ngfx_pylon_activity_manager_static_binding_report`** — 从缓存的 IDA 事实中提取静态活动管理器/直接调用绑定。
- **`ngfx_pylon_bridge_helper_scaffold`** — 编写一个 Frida / 本地助手脚手架来固定私有执行器。
- **`ngfx_pylon_bridge_probe_log_analyze`** — 分析 Frida 探测输出到绑定假设而无需重新运行。
- **`ngfx_pylon_private_binding_from_probe`** — 将探测输出转换为私有桥接绑定 JSON。
- **`ngfx_pylon_direct_call_binding_from_probe`** — 构建实验性的直接调用绑定到 `PylonPlugin!sub_180116CD0`。
- **`ngfx_pylon_bridge_probe_run`** — 运行 Pylon Frida 探测器并分析收集的私有绑定事件。
- **`ngfx_pylon_frida_direct_call_run`** — 运行实验性的 Frida 直接重新进入调用到 `sub_180116CD0`。
- **`ngfx_pylon_private_bridge_invoke`** — 受保护的入口点,用于调用将来的原生 Pylon 桥接器。
- **`ngfx_pylon_saved_cpp_export`** — 封装私有 Pylon 已保存捕获 C++ 导出输入。
- **`ngfx_private_executor_readiness_report`** — 报告 Pylon 或直接 RPC 私有导出是否准备就绪。
- **`ngfx_private_executor_evidence_bundle`** — 将 Pylon/RPC 私有执行器证据捆绑到一个工件中。
### 已保存捕获 -> C++ 捕获自主 + 路由选择器
- **`ngfx_cpp_capture_pick_install`** — 选择最新的安装了 Generate C++ Capture 的 Nsight,其可以运行针对此捕获。
- **`ngfx_cpp_capture_compatibility_check`** — 检查保存的捕获是否可被给定的安装重放。
- **`ngfx_cpp_capture_route_probe`** — 探测已安装的 Nsight 以决定哪个保存捕获 -> C++ 路线尝试。
- **`ngfx_cpp_capture_against_replay`** — 在重放 `ngfx-replay.exe` 的情况下运行 *Generate C++ Capture* 针对保存的捕获。
- **`ngfx_cpp_capture_recapture_plan`** — 发出 `ngfx-capture.exe` 命令以重捕获原始应用程序。
- **`ngfx_capture_recapture_with_install`** — 通过选定的安装的 `ngfx-capture.exe` 重新运行捕获的应用程序。
- **`ngfx_cpp_capture_full_autonomy`** — 用于保存捕获 -> C++ 项目 -> 验证 + 索引的一步式自主链。
### 资源写入历史记录和生产者行谱
- **`ngfx_resource_write_history`** — 每个命名资源的写入事件顺序 - 渲染目标,调度,复制,障碍。
- **`ngfx_resource_write_history_pair_diff`** — 左右资源对的写入时间线差异。
- **`ngfx_resource_producer_lineage`** — 递归跟踪哪些绘制生成了给定的渲染目标资源。
- **`ngfx_producer_lineage_pair_diff`** — 跟踪左右生产者谱系并逐级差异。
- **`ngfx_copyrect_t0_resolution_report`** — 解析配对的左右 CopyRectPS 绘制的实际采样状态。
### 修复尝试日志 + 声明证据
- **`ngfx_fix_attempt_log`** — 修复尝试的追加 JSONL 日志(输入,分数,判决)。
- **`ngfx_fix_claim_evidence_bundle`** — 将修复声明的证据捆绑到一个 zip 文件中供审查。
### SN2 雾气自动化(VoxelizePS / VoxelizeGS)
- **`ngfx_sn2_fog_artifacts`** — 查找最新的干净r.Fog 开启/关闭和 VoxelizePS / VoxelizeGS 工件。
- **`ngfx_sn2_fog_signal_report`** — 评估 VoxelizePS / VoxelizeGS 错误的干净r.Fog 差分信号。
- **`ngfx_sn2_fog_fix_plan`** — 返回用于修复 SN2 雾气信号的自主着色器/运行时计划。
- **`ngfx_sn2_fog_descriptor_probe_plan`** — 构建用于解决雾气描述符/资源状态的实时 BinaryReplay 请求。
- **`ngfx_sn2_fog_slot_candidates`** — 从实时描述符状态回复中解析 VoxelizeGS / VoxelizePS 槽。
- **`ngfx_sn2_fog_probe_manifest`** — 编写或返回用于修复循环的 GS-first SN2 雾气探测清单。
- **`ngfx_sn2_fog_live_state_probe`** — 收集一个 SN2 雾气引导绘制 BinaryReplay 事件的实时 Nsight 状态。
### IDA Pro 无头 RE 桥接
- **`ngfx_ida_environment`** — 发现 IDA Pro / Home / Free 安装并列出已知的 Nsight RE 目标。
- **`ngfx_ida_analyze_binary`** — 在目标上运行 IDA 无头模式并缓存字符串/xrefs/伪代码 JSON。
- **`ngfx_ida_search_facts`** — 在不重新运行 IDA 的情况下,对缓存的 IDA 事实进行正则表达式搜索。
- **`ngfx_ida_fact_summary`** — 总结事实 JSON。
- **`ngfx_ida_command_preview`** — 显示确切的无头命令形状而无需运行它。
- **`ngfx_shader_debug_re_status`** — 检查着色器调试自动化所需的 RE 事实是否已缓存,并显示实现序列。
### SN2 CopyRectPS 自动化(右眼纹理复制)
- **`ngfx_sn2_copyrect_artifacts`** — 查找 SN2 CopyRectPS 跟踪和着色器检查工件。
- **`ngfx_sn2_copyrect_signal_report`** — 跟踪 CopyRectPS 源纹理、目标目标和生产者证据。
- **`ngfx_sn2_copyrect_fix_plan`** — 返回 SN2 CopyRectPS 路径的 Nsight 驱动的修复计划。
- **`ngfx_sn2_copyrect_descriptor_probe_plan`** — 构建用于解决 CopyRectPS t0/s0 和目标状态的实时 BinaryReplay 请求。
- **`ngfx_sn2_copyrect_slot_candidates`** — 从实时描述符状态回复中解析 CopyRectPS t0/s0 槽。
- **`ngfx_sn2_copyrect_t0_source_compare`** — 在描述符状态解析后比较实时左右 CopyRectPS PS t0 资源。
- **`ngfx_sn2_copyrect_pair_analysis`** — 比较左右 CopyRectPS 绘制并发出实时探测目标。
- **`ngfx_sn2_copyrect_right_eye_issue_report`** — 报告右眼错误的最强同帧 CopyRectPS 证据。
- **`ngfx_sn2_copyrect_source_lineage_report`** — 挖掘保存的 CopyRectPS 资源 lineage 同时保留表扫描描述符警告。
- **`ngfx_sn2_copyrect_runtime_instrumentation_plan`** — 用于证明 CopyRectPS t0 和矩形状态的运行时钩子清单。
- **`ngfx_sn2_copyrect_live_state_probe`** — 收集一个 CopyRectPS BinaryReplay 事件的实时 Nsight 状态。
- **`ngfx_sn2_copyrect_live_pair_probe`** — 探测成对的左右 CopyRectPS 事件并解决实际 PS t0 是否匹配。
连接信息
猜你喜欢
暂无推荐服务器