Rust-GPU:使Rust成为GPU代码的一流语言和生态系统

2020-10-24 07:20:16

这是一个非常早期的项目,旨在使RUST成为构建图形处理器代码🚀🚧的一流语言和生态系统。

编译和运行非常简单的着色器是可行的,核心库的很大一部分也会编译。

然而,许多东西还没有实现:例如,循环和开关还不受支持!这意味着,虽然这个项目在技术上是可用的,但还远远没有准备好投入生产。

#[spirv(entry=";Fragment";)]pub fn main_fs(input:input<;ve4>;,mut output:output<;vec4>;){let dir:ve3=input。加载()。Truncate();设cs_pos=ve4(dir.。0,-目录。1,1.0,1.0);设ws_pos={let p=Clip_to_world。Mul_ve4(Cs_Pos);p.truncate()/p.3};设dir=(ws_pos-ye_pos)。Normalize();//对Preetham天空模型求值,让color=sky(dir,sun_pos);输出。商店(颜色。扩展(0.0))}。

历史上,在游戏中,GPU编程都是通过编写HLSL或在较小程度上编写GLSL来完成的。这些是多年来随呈现API一起发展的简单编程语言。然而,随着游戏引擎的发展,这些语言未能提供处理大型代码库的机制,与其他编程语言相比,它们通常落后于其他编程语言。

这在一定程度上是因为它是一个利基市场的利基语言,部分原因是整个行业已经投入了相当多的时间和精力维持现状,这在一定程度上是因为这是一个利基市场的利基语言,部分原因是整个行业投入了相当多的时间和精力来维持现状。虽然总的来说,这两种语言都有更好的替代方案,但它们都不能取代HLSL或GLSL。要么是因为它们是供应商锁定的,要么是因为它们不支持传统的图形管道。这方面的示例包括CUDA和OpenCL。虽然有人试图在这个领域创造语言,但没有一个人在Gamedev社区获得任何显著的吸引力。

我们对这个项目的希望是通过将现有的、低级的、安全的、高性能的语言(即Rust)引入GPU,从而推动整个行业向前发展。随之而来的是一些不容忽视的额外好处:业界最好的软件包/模块系统、针对竞争条件或越界内存访问而构建的安全、用于改进程序员工作流程的广泛工具和实用程序,以及许多其他!

在登船,我们一直在建立我们自己的新游戏引擎从头开始在铁锈。我们之前有内部开发RLSL原型的经验,我们有一支优秀的渲染工程师团队,他们熟悉来自游戏、游戏引擎和其他行业的当前着色语言中的问题。因此,我们相信,我们处于独特的地位,可以尝试解决这个问题。

我们希望用一种优秀的语言简化我们自己的内部开发,建立一个开源图形生态系统和社区,促进GPU和CPU之间的代码共享,最重要的是:使我们(未来的)用户和其他开发人员能够更快地构建出色的外观和引人入胜的体验。

如果我们做对了这个项目,就不一定需要整个渲染工程师团队来构建一款好看的游戏,相反,你只需要使用几个现有的开放源码板条箱,就可以提供创造你想要的体验所需的图形效果。人们可以简单地从crates.io找到并使用合适的箱子,而不是在论坛帖子上共享和复制TAA代码片段。

Rustc编译器后端生成SPIR-V,插入VIA-Z codegen-后端。未来的版本可能会支持DXIL(DirectX的目标)或WGSL(与SPIR-V双射的WebGPU着色语言)。

高级渲染图形利用了这一点,使得用户很容易开发和使用渲染效果。

我们将此repo用作与项目相关的所有内容的单一repo:板条箱、工具、着色器、示例、测试和设计文档。这样,我们就可以在同一位置使用涵盖所有内容的问题和PR、repo中的交叉引用内容,以及其他GitHub repo,如rspirv和rust本身。

我们每周都会在一个不和谐的电话上会面,讨论设计和分类问题。每次会议都有议程、链接和会议记录的问题。

Spirv-builder,提供在CPU build.rs文件中构建GPU机箱的便捷方法。

我们欢迎社区对这个项目的贡献。如果您想开始,请务必查看Rust-GPU开发指南和我们的贡献者指南,了解有关如何开始的更多信息。

除非您另有明确说明,否则根据Apache-2.0许可证的定义,您故意提交以包含在作品中的任何投稿都应如上所述获得双重许可,不受任何附加条款或条件的限制。