GPU帧分析服务器

用于Intel GPA图形性能分析器的MCP服务器,支持分析GPU捕获、提取纹理/着色器/几何数据以及通过MCP协议收集性能指标。

  • by Linkingooo
  • Python
  • 本地部署
  • 8 星标
  • 更新于
在 GitHub 查看 Linkingooo/gpa-mcp

使用说明

GPA MCP服务器

用于Intel GPA(图形性能分析器)帧分析的MCP服务器。使Claude能够分析GPU捕获,提取纹理/着色器/几何体,并通过MCP协议收集性能指标。

特性

  • 20个MCP工具 用于完整的GPU帧逆向工程
  • DXBC着色器拆卸 --DX11捕获的D3D Shader反汇编程序输出的自动提取
  • 三种后端模式:模拟(开发),框架(.gpa_frame),遗产(GPA.Stream)
  • 批量导出 --从整个帧中重复导出所有独特的着色器、纹理和几何体
  • GPU指标 --每次抽取调用时间和管道统计

快速开始

先决条件

  • Python 3.10+
  • 已安装英特尔GPA框架2025.1(C:\Program Files\IntelSWTools\GPA\)
  • MCP-SDK: pip install mcp pydantic pillow numpy

Claude代码配置

添加到MCP设置(.claude/settings.json 或项目设置):

{
  "mcpServers": {
    "gpa_mcp": {
      "command": "python",
      "args": ["-m", "gpa_mcp.server"],
      "cwd": "F:/GPA",
      "env": {
        "GPA_INSTALL_DIR": "C:/Program Files/IntelSWTools/GPA",
        "GPA_OUTPUT_DIR": "F:/GPA/gpa_exports"
      }
    }
  }
}

Claude桌面配置

添加 claude_desktop_config.json:

{
  "mcpServers": {
    "gpa_mcp": {
      "command": "python",
      "args": ["-m", "gpa_mcp.server"],
      "cwd": "F:/GPA",
      "env": {
        "GPA_INSTALL_DIR": "C:/Program Files/IntelSWTools/GPA",
        "GPA_OUTPUT_DIR": "F:/GPA/gpa_exports"
      }
    }
  }
}

模拟模式(无需GPA)

对于未安装GPA的开发/测试:

{
  "env": {
    "GPA_MOCK_MODE": "1"
  }
}

建筑

.gpa_frame  -->  FrameAnalyzer.exe + gpa_export_all plugin  -->  JSON cache (8 files)
                                                                       |
MCP Tool  -->  gpa_loader.open_stream(path)  -->  FrameData  -->  read JSON

根据输入路径自动检测三种模式:

模式 条件 后端
Mock GPA_MOCK_MODE=1 虚假数据促进发展
帧 路径以结尾 .gpa_frame FrameAnalyzer JSON导出
传统 GPA SDK可用+流目录 原生 GPA.Stream

工具

流管理(Stream_tools.py)

工具 说明
gpa_open_stream 打开流/帧,验证,返回基本信息
gpa_stream_info 获取流元数据、文件列表、API类型
gpa_list_ranges 列出带分页和过滤的绘图调用范围

绘图调用分析(drawcall_tools.py)

工具 说明
gpa_get_drawcall_detail 获取范围的API调用序列和参数
gpa_get_pipeline_state 获取完整的管道状态(着色器、混合、光栅化器等)
gpa_search_api_calls 在整个流中搜索特定的API调用

资源导出(Resource_tools.py)

工具 说明
gpa_list_bound_resources 列出绑定到绘图调用的所有GPU资源
gpa_export_texture 将单个纹理导出到PNG/DDS
gpa_batch_export_textures 导出所有纹理以进行绘图调用
gpa_export_geometry 将几何图形导出为OBJ/CSV
gpa_export_geometry_fbx 将带有UV的几何体导出为FBX/OBJ

着色器提取(Shader_tools.py)

工具 说明
gpa_get_shader_info 获取着色器元数据:哈希、模型、源可用性
gpa_export_shader 导出着色器源代码/反汇编/字节码
gpa_batch_export_shaders 批量导出所有唯一着色器(重复数据消除)

GPU度量(Metrics_tools.py)

工具 说明
gpa_list_metrics 列出可用的GPU性能指标
gpa_collect_metrics 收集特定抽签的指标
gpa_export_metrics_report 导出GPU计时报告(前N个昂贵调用)

导出和实用程序(Export_tools.py)

工具 说明
gpa_full_export 一键导出所有资源以进行抽签
gpa_cli_wrapper 运行官方GPA CLI工具(FrameAnalyzer等)
gpa_list_exports 列出按类型分组的所有导出文件

遮阳板拆卸

对于DX11捕获,HLSL源代码通常不可用(捕获时需要调试信息)。服务器会自动回退到DXBC反汇编:

源优先级:

  1. HLSL源代码(如果在捕获过程中启用了调试信息)
  2. DXBC反汇编(DX11默认--从 prog.get_description()[stage]["dxbc"])
  3. DXIL拆卸(DX12捕获)
  4. ISA反汇编(仅限英特尔GPU)

当 output_type="source" 返回DXBC反汇编而不是HLSL,文件扩展名自动设置为 .asm (不是 .hlsl).

DXBC拆卸输出示例:

//
// Generated by Microsoft (R) D3D Shader Disassembler
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Position              0   xyzw        0      POS   float
// SV_IsFrontFace           0   x           1    FFACE    uint   x
//
ps_5_0
dcl_globalFlags refactoringAllowed
dcl_constantbuffer CB0[159], immediateIndexed
dcl_input_ps_sgv constant v1.x, is_front_face
dcl_output o0.xyzw
and r0.x, cb1[0].x, l(64)
movc r0.x, r0.x, l(-1.000000), l(1.000000)
mul r0.x, r0.x, cb0[158].w
discard_nz r0.x
mov o0.xyzw, l(0,0,0,0)
ret

工作流示例

# Analyze a VALORANT DX11 frame capture

1. gpa_stream_info(stream_path="path/to/VALORANT.gpa_frame")
   -> First open triggers FrameAnalyzer export (~30s)
   -> 12,791 ranges, 886 draw call events

2. gpa_list_ranges(start=665, count=10)
   -> Browse draw calls, find target DrawIndexed

3. gpa_get_shader_info(range_index=669)
   -> vertex: hash=319abd7168826503, has_source=True, lang=DXBC
   -> pixel:  hash=950c23be14e49ee1, has_source=True, lang=DXBC

4. gpa_export_shader(range_index=669, stage="pixel", output_type="source")
   -> Export DXBC disassembly to ps_950c23be14e49ee1.asm

5. gpa_batch_export_shaders(output_type="disasm", deduplicate=True)
   -> Export 199 unique shaders (62 VS + 137 PS), skipped 1540 duplicates

6. gpa_collect_metrics(range_index=669, metric_names=["GpuTime"])
   -> GpuTime: 21.00 us

项目结构

gpa_mcp/
├── server.py              # Entry point, registers all 20 tools
├── requirements.txt       # Dependencies: mcp, pydantic, pillow, numpy
├── tools/
│   ├── stream_tools.py    # Module 1: Stream management (3 tools)
│   ├── drawcall_tools.py  # Module 2: Draw call analysis (3 tools)
│   ├── resource_tools.py  # Module 3: Resource export (5 tools)
│   ├── shader_tools.py    # Module 4: Shader extraction (3 tools)
│   ├── metrics_tools.py   # Module 5: GPU metrics (3 tools)
│   └── export_tools.py    # Module 6: Export utilities (3 tools)
├── utils/
│   ├── gpa_loader.py      # Three-mode loader (Mock/Frame/Legacy)
│   ├── frame_loader.py    # Frame mode: FrameData reads JSON cache
│   └── formatting.py      # Unified JSON response formatting
└── fa_plugins/            # FrameAnalyzer Python plugins
    ├── gpa_export_all/    # Full frame export (8 JSON files)
    ├── gpa_export_texture/ # On-demand texture pixel export
    └── gpa_export_buffer/  # On-demand buffer data export

环境变量

变量 默认值 描述
GPA_INSTALL_DIR C:\Program Files\IntelSWTools\GPA GPA安装根
GPA_TOOLS_DIR 与上述相同 GPA CLI工具路径
GPA_OUTPUT_DIR ./gpa_exports 所有导出的根目录
GPA_MOCK_MODE 0 设置为 1 模拟模式(无需GPA)
GPA_FRAME_ANALYZER <GPA_INSTALL_DIR>/FrameAnalyzer.exe FrameAnalyzer可执行文件
GPA_PLUGINS_DIR gpa_mcp/fa_plugins/ FrameAnalyzer插件目录
GPA_FRAME_CACHE_DIR <GPA_OUTPUT_DIR>/frame_cache/ JSON缓存根目录

已知限制

  • DX11捕获没有HLSL源 --而是使用DXBC拆卸(自动回退, .asm 扩展)
  • ISA反汇编需要Intel GPU --非英特尔GPU收到“参与驱动程序”错误
  • 纹理/几何体导出需要FrameAnalyzer --按需FA插件调用缓慢(每次调用约30秒启动)
  • 帧头元数据为空 -FrameAnalyzer插件API不公开帧头信息(GPU名称、分辨率等)
  • GPA 2025.1是最终版本 --英特尔宣布将于2026年停产

参考文献