Jay 是一款专为英特尔开源 OpenGL 和 Vulkan Linux 驱动程序开发的新型开源着色器编译器。最终,Jay 着色器编译器旨在帮助现代英特尔硬件在 Linux 系统上实现更佳的图形性能。
去年,Alyssa Rosenzweig 加入英特尔,她曾领导与 Asahi Linux 合作开发 AGX 图形驱动程序代码,同时也是 Valve 的承包商,参与 Linux 图形堆栈的开发。Rosenzweig 多年来为 Mesa 做出了诸多贡献,尤其是在着色器编译和近红外渲染 (NIR) 方面。因此,她现在领导开发一款新的英特尔着色器编译器也就不足为奇了。
不过,Jay 的开发还是有些出人意料,因为除了 Mesa 中英特尔驱动程序长期使用的“BRW”着色器编译器之外,英特尔还拥有用于其 Linux 系统 OpenCL 和 Level Zero 计算运行时的英特尔图形编译器 (IGC)。IGC 不仅用于计算,也用于微软 Windows 的图形着色器编译。
在今天介绍 Jay 的 Mesa 合并请求中,Alyssa 解释道:
“本次合并请求 (MR) 新增了 Jay,一个基于 SSA 的全新 Intel GPU 编译器。目前仍处于早期开发阶段,尚未准备好发布。我们希望将开发工作移至主代码库内,而不是每周都进行代码重基。请暂时不要进行测试——我们了解目前的状况,并且正在努力改进!
Jay 的设计与其他现代 NIR 后端类似,特别是 ACO、NAK 和 AGX。它完全基于 SSA,在 RA 之后对 phi 进行解构。我们使用了类似于 NAK 的 Colombet 寄存器分配器,这使我们能够以一种直接的方式处理 Intel 复杂的寄存器区域划分限制。使用 Braun-Hack 可以轻松实现逻辑寄存器的溢出……但如何将标准的 SSA 后端设计应用于 Intel 硬件却并非易事。
目前,Jay 编译器仅支持 Intel Xe2 硬件,但未来会逐步扩展。该编译器已通过 OpenGL ES 3.0 和 OpenCL 3.0 的兼容性测试,同时 Vulkan 的支持工作也在进行中。

目前来看,Jay 的表现相当出色,与他们现有的着色器编译器相比,优势明显:
“先给大家一个预告……这里有一个难度很高的 CTS 测试(math_bruteforce sin),分别用旧编译器 (brw) 和新编译器 (jay) 编译过:jay:6768 条指令(溢出:填充:361:396)– 7.00 秒;brw:12980 条指令(溢出:填充:578:1144)– 19.91 秒。代码质量比当前编译器好得多,而且耗时更短……看来 Mesa 编译器在 Intel 平台上的前景一片光明 :-)”
对于 Jay 来说,这是一个非常有希望的开端。随着 Jay 的不断完善,并最终能够用于实验测试,这将令人兴奋。Jay 使用 C 语言编写,新增代码仅略超过 14000 行。感兴趣的读者可以查看此合并请求,了解有关全新 Intel Jay 着色器编译器的初步细节。
本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/zixun/65983.html