#vulkan #video #bindings #ash #safe

vulkan_video

通过 ash 在安全 Rust 中实现 Vulkan Video 绑定

1 个不稳定版本

0.1.0 2023年10月1日

#591 in 图形API

BSD-2-Clause

7KB

Vulkan Video

通过 Vulkan Videoash 实现对 Vulkan 的安全绑定。

  • Rust 仅有的 GPU 加速 Vulkan Video (我们不依赖于 FFMPEG, NVDEC, ...)
  • 在 ash 能够构建的所有环境中构建,最小依赖
  • 公开了 Vulkan 所支持的所有解码/编码操作(例如,H.264,H.265, ...)
  • 公开了后处理计算功能
  • 导入/导出外国内存以实现互操作

状态

  • 2023年10月1日 - 目前这还是一个“概念验证”,因为它只能在作者的显卡上解码一个 H.264 帧,并且距离变得有用还有数周。

常见问题解答

  • 特性 X 缺失或损坏,你会修复它吗?

    目前我只有时间实现我需要的。然而,我会很高兴接受 PR。

  • 我如何与 DirectX、Torch、CUDA 等进行互操作?

    想法是支持 Vulkan 外部内存,并公开额外的(特性门控)API 以导入或导出到外部设备内存。如何与每个外部 API 最好地接口的详细信息仍在进行中。基于一些初步尝试,与其他 Vulkan 实例的无拷贝 GPU 内存互操作可能是“相对容易的”,而与 Torch 可能“较难”。

  • 我可以使用这个来解码 MP4 吗?

    我们可能不会将容器支持添加到核心库。相反,您将使用另一个 crate 来解析您的 MP4(或类似),然后将 H.26x 帧输入到这个库中。

  • 您的 UB 策略是什么?

    这里的所有 Rust 代码都应该是安全的,并且绝不能引起未定义行为(UB)。如果您发现任何可能导致 UB 的内容,请提交问题。尽管如此,目前大多数函数都没有正确检查它们的参数,并且可能很容易向 Vulkan 提交会导致可疑行为的操作。此外,坏的计算着色器可能通过 Vulkan 后门破坏事物。这并不意味着所有着色器调用都应该被 unsafe,因为这与纯 Rust 中的 /proc/self/mem 文件 I/O 问题类似。

贡献

Pull Requests (PR) 非常欢迎。请随时提交简单的 PR。首先应讨论架构问题,但也非常感激。

许可协议

  • BSD 2-Clause, Ralf Biedert

依赖项

~7MB
~157K SLoC