Skip to main content

Next generation GPU API for Python

Project description

CI Documentation Status PyPI version

wgpu-py

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

Introduction

In short, this is a Python lib wrapping wgpu-native and exposing it with a Pythonic API similar to the WebGPU spec.

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

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

Status

Note

The wgpu-API has not settled yet, use with care!

  • 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, and MacOS (Intel and M1).
  • Until WebGPU settles as a standard, its specification may change, and with that our API will probably too. Check the changelog when you upgrade!

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.

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

Uploaded Source

Built Distributions

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

Uploaded Python 3 Windows x86-64

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

Uploaded Python 3 Windows x86

wgpu-0.13.0-py3-none-manylinux_2_28_x86_64.whl (3.7 MB view details)

Uploaded Python 3 manylinux: glibc 2.28+ x86-64

wgpu-0.13.0-py3-none-macosx_11_0_arm64.whl (1.9 MB view details)

Uploaded Python 3 macOS 11.0+ ARM64

wgpu-0.13.0-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.13.0.tar.gz.

File metadata

  • Download URL: wgpu-0.13.0.tar.gz
  • Upload date:
  • Size: 152.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for wgpu-0.13.0.tar.gz
Algorithm Hash digest
SHA256 0a74bd7026fb37488fe5add53efd083961587e84e76eb5e0b84b454ecdc59f26
MD5 3f641ee568b916a00b6dcb4cd5ada76c
BLAKE2b-256 de94936d689bbfb6042a4a8f5c3794074bf3b75b2ce5f4b82406a5d183d3dd35

See more details on using hashes here.

File details

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

File metadata

  • Download URL: wgpu-0.13.0-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/4.0.2 CPython/3.9.18

File hashes

Hashes for wgpu-0.13.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 e7aea5ab5c770c21491cd5e5458d14ea700b9cc5d28474417a73734f5202bcb4
MD5 9115a9527c822329eb7fed6b93f8acc3
BLAKE2b-256 f4e45cf16deaa5bad2e431ed7233d909c1214cf83a637de98a268a799dea1dd7

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for wgpu-0.13.0-py3-none-win32.whl
Algorithm Hash digest
SHA256 6fd762827d8ad8bb21ccaa99ff96692dddd78357c72f08a3c17e9048fbe567ee
MD5 871fe84c37432f37e005d78ac0811142
BLAKE2b-256 01552af0def2489b41f259539c1ed4898e744ab73f252c3ffd3f31cbd7167a15

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wgpu-0.13.0-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 506b4e209401e510260d4e4e37673dfc15f1ffc344f04113783c9978984e6441
MD5 51245dcb2ea5b0b7d4f66fa171d07a7b
BLAKE2b-256 c94b509b7bccaa0ef6b7b98e93d8fe36c2f6fa676da597c2eac9967e55e3c2d4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wgpu-0.13.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a0fb40e4132d85c65a5362567a880beae9602ca89f22f772b15d4a190711e4a9
MD5 4f58940e7d29a4cad00ec4b8b930787c
BLAKE2b-256 6dbce6dcb07acb34b303fca1958edeb7846b2cd59efb239ea5078bb16bec5d1b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wgpu-0.13.0-py3-none-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 803658dc1cd6bf8187f75d7a053461636c5c31ea0b038539092d7d65353d30d9
MD5 4bee915b580ceaf0ae4464e77658b079
BLAKE2b-256 99dc928e62536a8ea8034b9943df9b5ca2e7220ea463bbfb3f87cd81753f8408

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