40个版本 (1个稳定版)

22.0.0 2024年7月18日
0.21.1 2024年6月26日
0.20.0 2024年4月28日
0.19.3 2024年3月1日
0.0.1 2021年7月15日

539图形API

Download history 52619/week @ 2024-05-03 47627/week @ 2024-05-10 51010/week @ 2024-05-17 52625/week @ 2024-05-24 54569/week @ 2024-05-31 53871/week @ 2024-06-07 55786/week @ 2024-06-14 51657/week @ 2024-06-21 53559/week @ 2024-06-28 53422/week @ 2024-07-05 58633/week @ 2024-07-12 60033/week @ 2024-07-19 60132/week @ 2024-07-26 56197/week @ 2024-08-02 66409/week @ 2024-08-09 54286/week @ 2024-08-16

每月下载量 246,671
用于 1,423 个软件包 (7 个直接)

MIT/Apache

5MB
101K SLoC

wgpu_hal:一个跨平台的非安全图形抽象

此软件包定义了一组抽象现代图形API的特性和实现(后端)为Vulkan、Metal、Direct3D和GL。

wgpu_halgfx-hal的精神继承者,但范围缩小,并面向WebGPU实现目标。它没有验证或跟踪的开销,并且API转换开销通过WebGPU的设计保持在最低。此API可用于资源密集型应用程序和引擎。

wgpu_hal软件包的主要设计选择

  • 我们的特性和可移植性:适当的使用应在任何后端中获得等效的结果。

  • 我们的特性和不安全:实现执行最少的验证(如果有的话),并且错误的使用通常会引发未定义的行为。这使我们能够将我们在底层图形系统上强加的开销最小化。如果您需要安全性,wgpu-core软件包提供了一个安全的API来驱动wgpu_hal,实现了所有必要的验证、资源状态跟踪等。(请注意,wgpu-core是为通过FFI使用的而设计的;wgpu软件包为wgpu-core提供了更符合Rust语法的绑定。)或者,您可以自己进行验证。

  • 同样,返回的错误仅覆盖用户无法预料的场景,例如内存不足或设备丢失。用户可以合理预料的任何错误都是他们的责任来避免。例如,wgpu_hal在映射不可映射的缓冲区时不会返回错误:作为缓冲区创建者,用户应该已经知道他们是否可以映射它。

  • 我们使用静态分发。特性通常不是对象安全的。您必须选择特定的后端类型,例如vulkan::Apimetal::Api,然后根据主特性使用它,或者调用后端特定方法。

  • 我们使用惯用的Rust参数传递,通过引用传递对象,通过值返回它们等,这与wgpu-core不同,后者通过ID引用对象。

  • 我们持久性地映射缓冲区内容。这意味着缓冲区可以在CPU上保持映射状态,同时GPU读取或写入它。如果您需要将数据在CPU和GPU之间传输,必须明确指示,如果wgpu_hal指示映射不可一致(即在两个设备之间自动同步),则必须这样做。

  • 您必须在资源的不同使用之间记录显式的屏障。例如,如果缓冲区被计算着色器写入,然后用作绘制调用的索引缓冲区,您必须在两个操作之间使用CommandEncoder::transition_buffers

  • 设置绑定组时,管道布局被明确指定。不兼容的布局会干扰绑定在较高索引处的组。

  • API接受集合作为迭代器,以避免强制用户将数据存储在特定的容器中。实现不保证任何迭代器都会被耗尽,除非函数文档中另有说明。因此,我们建议迭代器不要执行任何修改操作。

遗憾的是,wgpu_hal的安全要求并未完全记录。理想情况下,所有特性的方法都应该有文档注释,说明用户必须满足的要求,以确保正确和可移植的行为。如果您知道后端强制执行但不由特性文档规定的特定要求,请提交问题。或者,如果您是一位有能力的技术作家,请提交拉取请求!

主要后端

wgpu_hal包在以下平台图形API上实现了功能齐全的后端:

  • Vulkan,可在Linux、Android和Windows上使用,通过ash包的Vulkan绑定。在安装MoltenVK后,它也可在macOS上使用。

  • macOS上的Metal,使用metal包的绑定。

  • Windows上的Direct3D 12,使用d3d12包的绑定。

次要后端

wgpu_hal包基于以下平台图形API实现了部分实现:

  • GL后端在任何OpenGL、OpenGL ES或WebGL可用的地方都可用。有关详细信息,请参阅gles模块文档。

您可以通过检查 DownlevelCapabilities 来了解适配器缺少哪些功能,该功能可在 ExposedAdapter::capabilities 中找到,该功能由 Instance::enumerate_adapters 提供。

该API通常设计得比次要后端更适合主要后端,因此后者可能产生更多的开销。

调试

维基百科 调试 wgpu 应用程序 页面上的大部分信息仍然适用于此API,但API跟踪/重放功能除外,该功能仅在 wgpu-core 中可用。

依赖项

~2–35MB
~528K SLoC