最近 Collabora开发人员发布 通过博客文章, 用于Mesa的新型镓控制器, 它实现了一个中间层 组织OpenCL 1.2和OpenGL 3.3 API 有关支持DirectX 12(D3D12)的驱动程序,以及其源代码是根据MIT许可证发布的。
拟议的控制器将 允许您在设备上使用Mesa 最初不兼容 与OpenCL和OpenGL 并作为移植OpenGL / OpenCL应用程序以在D3D12上运行的起点。 对于GPU制造商,该子系统允许提供对OpenCL和OpenGL的支持,其驱动程序仅支持D3D12。
在他们的博客文章中,开发人员分享:
在过去的几个月中,我们一直在Collabora开展两个激动人心的新项目,现在终于可以与世界分享有关它们的信息了……
近期计划,可以观察到对测试的完全认可 OpenCL 1.2和OpenGL 3.3支持,验证与应用程序的兼容性以及在Mesa的主要组成部分中包含最佳做法。
关于新控制器
新控制器的开发是与Microsoft工程师共同完成的 开发D3D11传递工具包和D12D3 D11D3TranslationLayer库的D12D3On12工具,以及在D3D12之上的标准图形基元实现。
实施 包括镓驱动程序,OpenCL编译器,OpenCL运行时和NIR-to-DXIL着色器编译器,该编译器将Mesa中使用的NIR着色器的中间表示转换为二进制DXIL格式(DirectX中间语言),与DirectX 12兼容并且基于位码LLVM 3.7(Microsoft DirectX Shader Compiler本质上是LLVM 3.7的扩展分支。 OpenCL编译器是根据LLVM项目和SPIRV-LLVM工具包的经验编写的。
这项工作建立在许多以前的工作的基础上。 首先,我们使用Mesa 3D构建此库,其中Gallium接口是OpenGL层的基础,而NIR是OpenCL编译器的基础。 我们还将LLVM和Khronos SPIRV-LLVM转换器用作编译器。
此外,我们利用Microsoft在创建其D3D12转换层方面的经验以及我们在开发Zink方面的经验。
OpenCL源代码使用clang编译为中间LLVM伪代码(LLVM IR),然后将其转换为SPIR-V格式的OpenCL内核的中间表示形式。
SPIR-V表示中的核心已转移到Mesa, 转换为NIR格式,进行优化,然后传输到NIR-to-DXIL,以生成合适的DXIL计算着色器 使用基于DirectX 12的运行时执行GPU。 提出了一个新的OpenCL运行时,而不是在OpenCL Mesa实现中使用Clover,它可以更直接地转换为DirectX 12 API。
OpenCL和OpenGL驱动程序是使用Gallium接口准备的 Mesa中提供的功能,可让您在创建驱动程序时绕过OpenGL详细信息,并将OpenGL调用转换为更接近现代GPU操作的图形基元的实体。
Gallium驱动程序接受OpenGL命令,并在NIR到DXIL转换器的参与下,使用D3D12驱动程序构建在GPU上运行的命令缓冲区。
最后, 开发人员提到这是早期工作 并且他们希望控制器会随着时间的推移而改进:
这仅仅是公告,还有很多工作要做。 目前,在某些情况下,我们有一些可行的方法,但我们才刚刚开始摸索。
首先,我们需要达到我们想要的功能级别。 我们目前的目标是通过针对OpenCL 1.2和OpenGL 3.3的一致性测试。 我们还有很长的路要走,但是经过一番努力和汗水,我相信我们一定会实现的。
如果您有兴趣了解更多信息, 您可以在中查看原始注释 以下链接 或对于那些有兴趣查看源代码的人可以这样做 从这个链接。