资讯动态

VTG-as-Compute三阶段管线深度解析:iOS 上实现几何着色器的完整方案

发布时间:2026/10/4 2:31:12 来源:尧图企业网站定制
VTG-as-Compute三阶段管线深度解析iOS 上实现几何着色器的完整方案【免费下载链接】MadeiraRun x86-64 Windows PC games on jailed iOS via FEX-Emu Wine DXMT项目地址: https://gitcode.com/GitHub_Trending/mad/MadeiraMadeira是一个让 x86-64 Windows PC 游戏在越狱 iOS 设备上运行的开源项目核心技术栈为 FEX-Emu Wine DXMT。由于 Apple Metal 没有几何着色器Geometry Shader阶段Windows 游戏里大量使用 GS 的画面粒子、植被、水面等在移动端无法直接运行。本文以本项目为例讲解如何用VTG-as-Compute 三阶段管线在 Metal 的 Mesh Shader 上模拟完整的几何着色器流程。上图项目横幅来自 docs/assets/banner.png展示 Madeira 的整体架构基调Windows 系统层Wine x86 转译层FEX 图形转译层DXMT。一、为什么需要 VTG-as-ComputeD3D12 的管线是 VS → GS → PS其中 GS 的核心输入VTGVertex-To-Geometry顶点到几何着色器是 D3D 规范中的虚拟数据结构它不是真实显存而是 GPU 硬件隐式传递的顶点数据GS 可以emit任意数量的新图元输出量在编译期未知。而 Metal 的网格阶段是Vertex / Mesh / Tile三类函数没有 GS 语义。DXMT本项目的 DXIL→Metal 转译器的解法是把 GS 管线降级为两条 Mesh Shader 组成的伪三阶段管线用显式缓冲把 VTG 物化出来。相关能力开关与转换接口在 metal_irconverter.h 中定义Enable geometry and tessellation emulation一节的 API。二、三阶段管线是怎么跑的整个方案可概括为三步全部由 madeira_d3d12.c 驱动① Object 阶段顶点着色器 → object mesh 函数VS 被转译成 mesh 的object函数。每个线程组处理obj_vertex_stride个顶点按顶点大小 × 数量 ≤ 16 KB 载荷自动折算把 VS 输出 图元索引写入共享的 payload 缓冲——这份缓冲就是物化出来的 VTG。② Mesh 阶段几何着色器 → mesh mesh 函数GS 被转译成mesh函数每个线程组最多处理max_input_prims个输入图元从 payload 读 VTG执行原 GS 逻辑把emit出来的顶点写回几何输出缓冲。③ 正式 DrawPS 消费最终顶点主渲染管线照常绘制顶点取第②步的输出像素阶段走普通 PS。对上层应用而言一次DrawInstanced调用被透明地展开成上述三步游戏代码零改动。关键参数由mad_gs_draw()一次性算出grid尺寸、object/mesh 线程组大小、strip 拓扑的重叠顶点数逻辑移植自转译器运行时的IRRuntimeCalculateDrawInfoForGSEmulation等接口源码注释与结构体定义见 madeira_d3d12.c 的struct mad_gs_drawinfo。三、实现中的三个关键设计VTG 物化为共享缓冲绑定槽 4/5 分别放DrawParams与DrawInfo索引格式、拓扑、每线程组图元数等两个阶段共享替代 D3D 隐式 VTG。Strip 拓扑的重叠补偿线带/三角带相邻图元共享顶点obj_vertex_stride会额外加入 overlap线带 1、三角带 2避免跨图元顶点丢失见mad_gs_overlap()。载荷预算驱动的线程组切分以16384 - 32字节为顶点载荷上限向下对齐到图元顶点数再与1024 × maxPrims取小保证每个 object 线程组不爆栈。四、失败时的优雅降级方案并非万无一失工程上做了多级兜底场景行为只有 DXIL 的 GS走完整 object/mesh 三阶段管线推荐路径DXBC 旧字节码 GS尝试转换失败则丢弃 GS 阶段退化为普通 VS→PS 管线无法构建的 GS 管线返回占位 PSO其 draw 被跳过并打日志间接绘制Indirect Draw暂不支持跳过并提示这保证了最坏情况画面降级而不是游戏崩溃。构建与降级的完整判定在mad_pipeline_build的 geometry 分支madeira_d3d12.c。五、相关源码与文档导航管线核心madeira-d3d12/src/pe/madeira_d3d12.cGS draw 计算、管线构建、占位降级DXIL 缓存与转译桥madeira_dxil_cache.h、madeira_ir_unix.mm转译器运行时契约tessellation / geometry 反射结构metal_irconverter_runtime.h可运行的验证着色器立方体、贴图、顶点拉取等回归测试madeira-d3d12/shaders/项目架构文档docs/ 下的 MADEIRA_DOCK.md、BUILDING.md总结VTG-as-Compute 三阶段管线的精髓在于用两次 mesh dispatch 把 D3D 的隐式 VTG 变成显式缓冲再用 Metal mesh shader 的可变图元输出能力复刻 GS 的 emit 语义。这套方案让 iOS 上的 Windows 游戏第一次真正跑起几何着色器也为 MoltenVK、DXMT 一类Windows API → Metal转译器提供了可复用的 GS 模拟范式。【免费下载链接】MadeiraRun x86-64 Windows PC games on jailed iOS via FEX-Emu Wine DXMT项目地址: https://gitcode.com/GitHub_Trending/mad/Madeira创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑