有没有办法在 CPU 线程上运行金属着色器?

问题描述

我正在做一个业余项目来实现我自己的 Metal.framework 实现和一个软件渲染器来在 MTLCommandBuffer 提交后进行实际渲染。我试图想出一种方法来模拟 cpu 上的 GPU 线程(可能使用 pthreads)。为了看看它是否可行,我设法将一个简单的 shader.Metal 编译成 LLVM 位码(.air 文件),然后使用 LLVM 的 llc 工具使用下面的命令行编译成 ARM 程序集。

lc -march arm64 shader.air -o shader.s

我还设法获取了 ARM 程序集,将其传递给了一个汇编程序并生成一个目标文件

gcc -c shader.s -o shader.o

(或者)我也可以手动编辑 shader.s 并将着色器名称更改为 _main,然后使用以下内容生成可执行文件

gcc shader.air.s -o shader

此时,我想我的下一步应该是使用 Apple 的 Hypervisor 框架,其中每个 pthread 应该运行一个虚拟 cpu,该 cpu 运行使用上述步骤编译的着色器。我有一个运行一个小的 ARM 片段的示例管理程序代码,我目前正在考虑是否可以编写自己的“驱动程序”来读取着色器 mach-o 文件,从中提取片段并将其映射到管理程序内存中Vcpu 可以从中读取。

我的问题是:

  1. 是否有一种明显的方法可以做到这一点,但我没有看到?具体来说,是否有一种更简单的方法可以在 cpu 上启动多个线程,这些线程从我刚刚编译的着色器可执行文件中执行顶点/片段/内核处理?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)