Skip to main content

WebGPU for Python

Project description

CI Documentation Status PyPI version

wgpu-py

A Python implementation of WebGPU - the next generation GPU API. 🚀

Introduction

The purpose of wgpu-py is to provide Python with a powerful and reliable GPU API.

It serves as a basis to build a broad range of applications and libraries related to visualization and GPU compute. We use it in pygfx to create a modern Pythonic render engine.

To get an idea of what this API looks like have a look at triangle.py and the other examples.

Status

  • Until WebGPU settles as a standard, its specification may change, and with that our API will probably too. Check the changelog when you upgrade!
  • Coverage of the WebGPU spec is complete enough to build e.g. pygfx.
  • Test coverage of the API is close to 100%.
  • Support for Windows, Linux (x86 and aarch64), and MacOS (Intel and M1).

What is WebGPU / wgpu?

WGPU is the future for GPU graphics; the successor to OpenGL.

WebGPU is a JavaScript API with a well-defined spec, the successor to WebGL. The somewhat broader term "wgpu" is used to refer to "desktop" implementations of WebGPU in various languages.

OpenGL is old and showing its cracks. New API's like Vulkan, Metal and DX12 provide a modern way to control the GPU, but these are too low-level for general use. WebGPU follows the same concepts, but with a simpler (higher level) API. With wgpu-py we bring WebGPU to Python.

Technically speaking, wgpu-py is a wrapper for wgpu-native, exposing its functionality with a Pythonic API closely resembling the WebGPU spec.

Installation

pip install wgpu glfw

Linux users should make sure that pip >= 20.3. That should do the trick on most systems. See getting started for details.

Usage

Also see the online documentation and the examples.

The full API is accessible via the main namespace:

import wgpu

To render to the screen you can use a variety of GUI toolkits:

# 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

Some functions in the original wgpu-native API are async. In the Python API, the default functions are all sync (blocking), making things easy for general use. Async versions of these functions are available, so wgpu can also work well with Asyncio or Trio.

License

This code is distributed under the 2-clause BSD license.

Projects using wgpu-py

  • pygfx - A python render engine running on wgpu.
  • shadertoy - Shadertoy implementation using wgpu-py.
  • tinygrad - deep learning framework
  • fastplotlib - A fast plotting library
  • xdsl - A Python Compiler Design Toolkit (optional wgpu interpreter)

Developers

  • Clone the repo.
  • Install devtools using pip install -e .[dev].
  • Using pip install -e . will also download the upstream wgpu-native binaries.
    • You can use python tools/download_wgpu_native.py when needed.
    • Or point the WGPU_LIB_PATH environment variable to a custom build of wgpu-native.
  • Use ruff format to apply autoformatting.
  • Use ruff check to check for linting errors.
  • Optionally, if you install pre-commit hooks with pre-commit install, lint fixes and formatting will be automatically applied on git commit.

Updating to a later version of WebGPU or wgpu-native

To update to upstream changes, we use a combination of automatic code generation and manual updating. See the codegen utility for more information.

Testing

The test suite is divided into multiple parts:

  • pytest -v tests runs the unit tests.
  • pytest -v examples tests the examples.
  • pytest -v wgpu/__pyinstaller tests if wgpu is properly supported by pyinstaller.
  • pytest -v codegen tests the code that autogenerates the API.
  • pytest -v tests_mem tests against memoryleaks.

There are two types of tests for examples included:

Type 1: Checking if examples can run

When running the test suite, pytest will run every example in a subprocess, to see if it can run and exit cleanly. You can opt out of this mechanism by including the comment # run_example = false in the module.

Type 2: Checking if examples output an image

You can also (independently) opt-in to output testing for examples, by including the comment # test_example = true in the module. Output testing means the test suite will attempt to import the canvas instance global from your example, and call it to see if an image is produced.

To support this type of testing, ensure the following requirements are met:

  • The WgpuCanvas class is imported from the wgpu.gui.auto module.
  • The canvas instance is exposed as a global in the module.
  • A rendering callback has been registered with canvas.request_draw(fn).

Reference screenshots are stored in the examples/screenshots folder, the test suite will compare the rendered image with the reference.

Note: this step will be skipped when not running on CI. Since images will have subtle differences depending on the system on which they are rendered, that would make the tests unreliable.

For every test that fails on screenshot verification, diffs will be generated for the rgb and alpha channels and made available in the examples/screenshots/diffs folder. On CI, the examples/screenshots folder will be published as a build artifact so you can download and inspect the differences.

If you want to update the reference screenshot for a given example, you can grab those from the build artifacts as well and commit them to your branch.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wgpu-0.19.3.tar.gz (148.5 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

wgpu-0.19.3-py3-none-win_arm64.whl (3.0 MB view details)

Uploaded Python 3Windows ARM64

wgpu-0.19.3-py3-none-win_amd64.whl (3.2 MB view details)

Uploaded Python 3Windows x86-64

wgpu-0.19.3-py3-none-win32.whl (2.9 MB view details)

Uploaded Python 3Windows x86

wgpu-0.19.3-py3-none-manylinux_2_28_x86_64.whl (3.1 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

wgpu-0.19.3-py3-none-manylinux_2_28_aarch64.whl (3.2 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

wgpu-0.19.3-py3-none-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

wgpu-0.19.3-py3-none-macosx_10_9_x86_64.whl (2.3 MB view details)

Uploaded Python 3macOS 10.9+ x86-64

File details

Details for the file wgpu-0.19.3.tar.gz.

File metadata

  • Download URL: wgpu-0.19.3.tar.gz
  • Upload date:
  • Size: 148.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for wgpu-0.19.3.tar.gz
Algorithm Hash digest
SHA256 1b5bb2b86b82fa89a8de4d624801929abe033bc639363d59897e3f3752ad6957
MD5 7d9a782b6e117f11c1d8d81bbbe0c483
BLAKE2b-256 4f04fb169ed24f1aaeb022621975328a140d1be226a6766876e37ccebd04a50e

See more details on using hashes here.

File details

Details for the file wgpu-0.19.3-py3-none-win_arm64.whl.

File metadata

  • Download URL: wgpu-0.19.3-py3-none-win_arm64.whl
  • Upload date:
  • Size: 3.0 MB
  • Tags: Python 3, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for wgpu-0.19.3-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 327b6e7dc02f518e3c77a000e59758670d4effdb7d23e8c8da7d5e3b58441e57
MD5 35bc754338f967051d666cae58f5eb3c
BLAKE2b-256 d5af4e8d84c746eb4d7f66665404fe5710454d3b5c93efe9bb73884034752d60

See more details on using hashes here.

File details

Details for the file wgpu-0.19.3-py3-none-win_amd64.whl.

File metadata

  • Download URL: wgpu-0.19.3-py3-none-win_amd64.whl
  • Upload date:
  • Size: 3.2 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for wgpu-0.19.3-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 ae9b3e947e7f3bc0567c7a3846bbab2d3f42664ab32b71ab090c8f3c6877f6b0
MD5 c181a2a1f490b314fc4a385a884d16e7
BLAKE2b-256 01a6a4138aee44e8bf2659a1aba5798251d34b5b32d6eb18c4132b37b3309d29

See more details on using hashes here.

File details

Details for the file wgpu-0.19.3-py3-none-win32.whl.

File metadata

  • Download URL: wgpu-0.19.3-py3-none-win32.whl
  • Upload date:
  • Size: 2.9 MB
  • Tags: Python 3, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for wgpu-0.19.3-py3-none-win32.whl
Algorithm Hash digest
SHA256 cb65335e4a250c62cbea2f27a170c8c3a3f7c3120210d71740c822af64bdfdee
MD5 25536e69b335eb8f76322ac394ba010c
BLAKE2b-256 cff038ad733d70d47f303db6eedb1dc6e563145fd88418014aeb80d85ea36c4a

See more details on using hashes here.

File details

Details for the file wgpu-0.19.3-py3-none-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for wgpu-0.19.3-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fd69d8bb5b1280d150023391ca4c49b764e2d8b65cfcc60c770b65ef59c0b219
MD5 c859c7a4f6221545b8d5f2c11f23709f
BLAKE2b-256 2fdf50fc057ec275da8e661e492ba8288b2ef1adc8651e09fb03dfe431775688

See more details on using hashes here.

File details

Details for the file wgpu-0.19.3-py3-none-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for wgpu-0.19.3-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 59c5ea03fd22b8ac0222decde1a2f999392c947af5afcf5e63a99e8ce621336a
MD5 43e404262f29dff6efb9cabd74b6be8e
BLAKE2b-256 c07de27d96106d7312b8bd96686e6b640f91f9d176dac578352de8741a8968d7

See more details on using hashes here.

File details

Details for the file wgpu-0.19.3-py3-none-macosx_11_0_arm64.whl.

File metadata

  • Download URL: wgpu-0.19.3-py3-none-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: Python 3, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for wgpu-0.19.3-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f14d35a05d66ef98a678c5580922ba495825ccd739da5772c41885d01be07b3a
MD5 94775c0641e7eac9b68076016add9fb1
BLAKE2b-256 5e16841e0e20d46c74a109bb9e1fe9d96e84bd4a5ff54b603588477354830277

See more details on using hashes here.

File details

Details for the file wgpu-0.19.3-py3-none-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for wgpu-0.19.3-py3-none-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8cc0d77f290531efb95645fd776112ad5dec6dc9118c4b6c887bf5cac57b0085
MD5 09e085c01922c85428dfad1b73a5b5cc
BLAKE2b-256 9a90fc5c4efe777b9fd448b3efbd0235a0f82cdf402e392f8c9dd74f26fde496

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page