WebGPU for Python
项目描述
wgpu-py
WebGPU的Python实现——下一代GPU API。🚀
简介
wgpu-py的目的是为Python提供一个强大且可靠的GPU API。
它作为构建各种与可视化和GPU计算相关的应用程序和库的基础。我们在pygfx中使用它来创建一个现代的Pythonic渲染引擎。
要了解此API的外观,请参阅triangle.py和其他示例。
状态
- 在WebGPU成为一个标准之前,其规范可能会更改,我们的API也可能随之更改。在升级时检查变更日志!
- WebGPU规范的覆盖已经足够完整,可以构建例如pygfx。
- API的测试覆盖率接近100%。
- 支持Windows、Linux(x86和aarch64)和MacOS(Intel和M1)。
什么是WebGPU / wgpu?
WGPU是GPU图形的未来;OpenGL的后继者。
WebGPU是一个具有良好定义的规范的JavaScript API,是WebGL的后继者。较广泛的术语“wgpu”用于指代各种语言中WebGPU的“桌面”实现。
OpenGL已经过时,开始出现裂痕。新的API如Vulkan、Metal和DX12提供了控制GPU的现代方式,但它们对于通用用途来说太低级。WebGPU遵循相同的概念,但具有更简单(更高级)的API。通过wgpu-py,我们将WebGPU带到了Python。
从技术角度讲,wgpu-py是wgpu-native的包装器,使用与WebGPU规范相似的Pythonic API暴露其功能。
安装
pip install wgpu glfw
Linux用户应确保
pip >= 20.3。这应该在大多数系统上有效。有关详细信息,请参阅入门。
用法
完整的API可以通过主命名空间访问
import wgpu
要将内容渲染到屏幕上,您可以使用各种GUI工具包
# The auto backend selects either the glfw, qt or jupyter backend
from wgpu.gui.auto import WgpuCanvas, run, call_later
# Visualizations can be embedded as a widget in a Qt application.
# Import PySide6, PyQt6, PySide2 or PyQt5 before running the line below.
# The code will detect and use the library that is imported.
from wgpu.gui.qt import WgpuCanvas
# Visualizations can be embedded as a widget in a wx application.
from wgpu.gui.wx import WgpuCanvas
原始wgpu-native
API中的一些函数是异步的。在Python API中,默认函数都是同步(阻塞)的,这使得通用使用变得简单。这些函数的异步版本也是可用的,因此wgpu也可以很好地与Asyncio或Trio一起工作。
许可证
此代码在2条款BSD许可证下分发。
使用wgpu-py
的项目
- pygfx - 在wgpu上运行的Python渲染引擎。
- shadertoy - 使用wgpu-py实现的Shadertoy。
- tinygrad - 深度学习框架
- fastplotlib - 一个快速的绘图库
- xdsl - 一个Python编译器设计工具包(可选wgpu解释器)
开发者
- 克隆存储库。
- 使用
pip install -r dev-requirements.txt
安装开发工具(您可以将pip
替换为pipenv
以在虚拟环境中安装)。 - 通过运行
pip install -e .
以可编辑模式安装wgpu-py,这将根据需要安装运行时依赖项。 - 运行
python download-wgpu-native.py
下载上游wgpu-native二进制文件。- 或者,可以将环境变量
WGPU_LIB_PATH
指向自定义构建。
- 或者,可以将环境变量
- 使用
black .
应用自动格式化。 - 使用
flake8 .
检查flake错误。 - 使用
pytest .
运行测试。 - 使用
pip wheel --no-deps .
构建wheel。
更新到WebGPU或wgpu-native的较新版本
要更新到上游更改,我们使用自动代码生成和手动更新的组合。有关更多信息,请参阅代码生成实用程序。
测试
测试套件分为多个部分
pytest -v tests
运行核心单元测试。pytest -v examples
测试示例。pytest -v wgpu/__pyinstaller
测试wgpu是否被pyinstaller正确支持。pytest -v codegen
检查生成的绑定代码。
示例中包含两种类型的测试
类型1:检查示例是否可运行
在运行测试套件时,pytest会在子进程中运行每个示例,以检查它是否可以干净地运行和退出。您可以通过在模块中包含注释# run_example = false
来退出此机制。
类型2:检查示例是否输出图像
您还可以(独立地)通过在模块中包含注释# test_example = true
来选择输出测试示例。输出测试意味着测试套件将尝试从您的示例中导入全局的canvas
实例,并调用它以检查是否生成图像。
为了支持此类测试,请确保满足以下要求
- 从
wgpu.gui.auto
模块导入WgpuCanvas
类。 - 将
canvas
实例在模块中公开为全局。 - 已使用
canvas.request_draw(fn)
注册了渲染回调。
参考截图存储在examples/screenshots
文件夹中,测试套件将比较渲染的图像与参考。
注意:在CI上运行时将跳过此步骤。由于图像的渲染将根据渲染它们的系统产生细微差异,这会使测试不可靠。
对于每个在截图验证中失败的测试,将生成rgb和alpha通道的差异,并在examples/screenshots/diffs
文件夹中提供。在CI上,examples/screenshots
文件夹将作为构建工件发布,以便您可以下载和检查差异。
如果您想更新特定示例的参考截图,您也可以从构建工件中获取它们并将其提交到您的分支。
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪一个,请了解有关安装包的更多信息。
源代码分发
构建分发
wgpu-0.18.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b25fb7f115d05a7ffadf3f13b63e2d2e135ca85f6b982bd4fd214b3ed603a67e |
|
MD5 | 8f3adbe0a0c34a77696de7256d4241fa |
|
BLAKE2b-256 | d52d32b9a4b2f96f7a6124a08a0afef011a678705a72a88f64117530a80a2f03 |
wgpu-0.18.1-py3-none-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 989cfff59cd66238acde21809ea5dff6fea8c52817619b6ba1ede4e6ffe7df69 |
|
MD5 | 9345156edb508d724e04915bac1a45ce |
|
BLAKE2b-256 | c0d668911e5bd170f29361c19741f6fe9a3c71e41fa1b6715e4ab2bcb2686050 |
wgpu-0.18.1-py3-none-win32.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3c53a806e93e967ee705b3047ec702896cbca4e4de602b3e7006685eb714c29c |
|
MD5 | cf48e0f68cdeee02875b783a273bac3a |
|
BLAKE2b-256 | 6dd6665e55119c94a9d45fd1f5dce10dea782114f660103d4f06b2713a615aca |
wgpu-0.18.1-py3-none-manylinux_2_28_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 81ff225c62194654e0ac66190af51aba2daed483dbd1ceaed0defaf8148cb1f5 |
|
MD5 | 18f5c2a3ef1a4f551d813688656729d0 |
|
BLAKE2b-256 | ff8e02291c204af57204a356b38e92044a8acc0cd29aa15eedb6bf4da8037c94 |
wgpu-0.18.1-py3-none-manylinux_2_28_aarch64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f1eaad864482afbe0bdd2b7f1ae3d080398edb209a1f5eefdd3a6f0fdfaf8f85 |
|
MD5 | 0b6fc7d6d1171433c939ddccacd8f936 |
|
BLAKE2b-256 | 26584e803fe196c7000b8842171520ddb56fe9fcd3774b4d8331326e8db2baeb |
wgpu-0.18.1-py3-none-macosx_11_0_arm64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5e006e274bd2423f0dd2d635df26063b67530fbf02f4810b62f46b6b99acb615 |
|
MD5 | 散列值 d3d14c7d916b57bf79c22647319aaf71 |
|
BLAKE2b-256 | 散列值 4a09498cd99487e0808c5a409fe801a92a39a7e95263dc1cd6c440d1cc60ec2c |
散列值 用于 wgpu-0.18.1-py3-none-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 散列值 c43ccbb61989a2df25854db75df1cdfe4b21945feccac925f402fd6152b24fce |
|
MD5 | 散列值 1c0aa618d801dd935177c18f22a90f0f |
|
BLAKE2b-256 | 散列值 9ef03894dc00e488f0a9ad78e904ae9774b3055b7a0710f40e22de3688968673 |