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 to 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 accessable 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 -r dev-requirements.txt (you can replace pip with pipenv to install to a virtualenv).
  • Install wgpu-py in editable mode by running pip install -e ., this will also install runtime dependencies as needed.
  • Run python download-wgpu-native.py to download the upstream wgpu-native binaries.
    • Or alternatively point the WGPU_LIB_PATH environment variable to a custom build.
  • Use black . to apply autoformatting.
  • Use flake8 . to check for flake errors.
  • Use pytest . to run the tests.
  • Use pip wheel --no-deps . to build a wheel.

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 core unit tests.
  • pytest -v examples tests the examples.
  • pytest -v wgpu/__pyinstaller tests if wgpu is properly supported by pyinstaller.
  • pytest -v codegen lints the generated binding code.

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


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.17.3.tar.gz (169.4 kB view details)

Uploaded Source

Built Distributions

wgpu-0.17.3-py3-none-win_amd64.whl (2.7 MB view details)

Uploaded Python 3 Windows x86-64

wgpu-0.17.3-py3-none-win32.whl (2.5 MB view details)

Uploaded Python 3 Windows x86

wgpu-0.17.3-py3-none-manylinux_2_28_x86_64.whl (3.6 MB view details)

Uploaded Python 3 manylinux: glibc 2.28+ x86-64

wgpu-0.17.3-py3-none-manylinux_2_28_aarch64.whl (3.6 MB view details)

Uploaded Python 3 manylinux: glibc 2.28+ ARM64

wgpu-0.17.3-py3-none-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded Python 3 macOS 11.0+ ARM64

wgpu-0.17.3-py3-none-macosx_10_9_x86_64.whl (2.0 MB view details)

Uploaded Python 3 macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: wgpu-0.17.3.tar.gz
  • Upload date:
  • Size: 169.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.4

File hashes

Hashes for wgpu-0.17.3.tar.gz
Algorithm Hash digest
SHA256 2d73098f980856a87a9ee8559c0ed387737af575793603c2a23b343f26ff4872
MD5 b6dfd852136fc8ae60c6f3d23bb3ecff
BLAKE2b-256 81b7784c6768c4f40e875186ef0b26a813d4f754221dab23c7dffedba353254e

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for wgpu-0.17.3-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 7d1383b37b3ec5a9f7bafe87196f7406549d382c764c7ba80a984d2df68bf0a0
MD5 2a4c1315121e60fc91cfcaf7b60e7fb7
BLAKE2b-256 d5dd661426b61035ed4113221942ed29764db4d2544ab8fbbf668d2e43528a84

See more details on using hashes here.

File details

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

File metadata

  • Download URL: wgpu-0.17.3-py3-none-win32.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: Python 3, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.4

File hashes

Hashes for wgpu-0.17.3-py3-none-win32.whl
Algorithm Hash digest
SHA256 1a10bb0a387c8f49aeba27437e27eeeb4ed80e82ee089f988240647a0d4167bc
MD5 343292e9dc9b0a5945c0acdff1517fe6
BLAKE2b-256 62b18a757ae68abf69d984b76f2c6ea1687d71f14458ee0c7be379d5032377c8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wgpu-0.17.3-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 18bc592068f38bdcb72aacc8170ae9472b6733f0e62acc82180058290b04b52b
MD5 aa59f48083d3e749ff189dadefed753c
BLAKE2b-256 9fa44e00af946706fc37827c12b8018b8eb1c2b14ff92f70166452c2a43bcee2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wgpu-0.17.3-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7b93fef0421d2de5132fc66cb9a557f307cdbe6e03033ca340525b5545c8626d
MD5 eb46a9a6a294edf337dc5abe876a60b3
BLAKE2b-256 a7d3aa79b44755246733a84c802142fd630b59f4d283423bcade5b17a3b4d643

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wgpu-0.17.3-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 59789a866a94fa44e576ae853c13ec6486b93125a38fe05699eb41e33c6bf347
MD5 5cac767e2255a95bb2c1bf22fc852d83
BLAKE2b-256 8ac336fb8a9ef9424a7695ed9161df72b01d98dc45fc7c81688b0f4859595385

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wgpu-0.17.3-py3-none-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 df9c8f33e498388933e5ea74092a617ff9d481f87c07e7a29b980250457b93b7
MD5 5e2fca2b8f43986d6bfa4b28336cece5
BLAKE2b-256 c4bb5958b57e098d043a9e86adcc9f2044c1cd81b923809903d5c2951e95b2aa

See more details on using hashes here.

Supported by

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