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 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

But to use it, you need to select a backend first. You do this by importing it. There is currently only one backend:

import wgpu.backends.rs

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.

Changing the upstream wgpu-native version

  • Use the optional arguments to python download-wgpu-native.py --help to download a different version of the upstream wgpu-native binaries.
  • The file wgpu/resources/wgpu_native-version will be updated by the script to track which version we depend upon.

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

Uploaded Source

Built Distributions

wgpu-0.9.4-py3-none-win_amd64.whl (2.0 MB view details)

Uploaded Python 3 Windows x86-64

wgpu-0.9.4-py3-none-win32.whl (1.9 MB view details)

Uploaded Python 3 Windows x86

wgpu-0.9.4-py3-none-manylinux_2_24_x86_64.whl (3.3 MB view details)

Uploaded Python 3 manylinux: glibc 2.24+ x86-64

wgpu-0.9.4-py3-none-manylinux_2_24_i686.whl (3.5 MB view details)

Uploaded Python 3 manylinux: glibc 2.24+ i686

wgpu-0.9.4-py3-none-macosx_11_0_arm64.whl (1.6 MB view details)

Uploaded Python 3 macOS 11.0+ ARM64

wgpu-0.9.4-py3-none-macosx_10_9_x86_64.whl (1.7 MB view details)

Uploaded Python 3 macOS 10.9+ x86-64

File details

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

File metadata

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

File hashes

Hashes for wgpu-0.9.4.tar.gz
Algorithm Hash digest
SHA256 2431916bbf2b9828be88016d46248f278c0bef6377610546738a7352e98e655f
MD5 1f7b54c859178dc532a7d8d3f6bc631c
BLAKE2b-256 7bb09b790143926ccfe1c66e56cc9d22e8767bb7eb9cbce83d3ed9a52ccb5bd0

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for wgpu-0.9.4-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 c956183a109c4a4329f72554149640054949a1c75c2c35f71ae36fff45b5a8ab
MD5 102294b6519d3f4ef3105c6bc8933b66
BLAKE2b-256 0b65c03e4c90f8892ea601b9e31eff538ef68825f8314e2e22b62630e01a7442

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for wgpu-0.9.4-py3-none-win32.whl
Algorithm Hash digest
SHA256 bb229bdcf576c825e1b9706731e31238401da398fd6f68ed88a2a0dca5e1592f
MD5 2c0778e9f5a7b2ba81dfeb5978492de0
BLAKE2b-256 f90e69e6d9478755b14140a2eb59b8d349956f3b04b98ebcd970e34001468dd0

See more details on using hashes here.

File details

Details for the file wgpu-0.9.4-py3-none-manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for wgpu-0.9.4-py3-none-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 fcedf6a47467f75cb0d97bda5dfadbe289737688533524fb814fbdcba81cc17c
MD5 af053f5ede11ffe39396afb1dafe8c7d
BLAKE2b-256 ac73baccb545f55fab6dcdd073a4062ebb1639fc406e27fdfcc072817ec61736

See more details on using hashes here.

File details

Details for the file wgpu-0.9.4-py3-none-manylinux_2_24_i686.whl.

File metadata

File hashes

Hashes for wgpu-0.9.4-py3-none-manylinux_2_24_i686.whl
Algorithm Hash digest
SHA256 d61d4dbb6f91821130cc2d19e6fb9cd9693462fcd45c9b5462336d897b72097e
MD5 c1262730b328744636a55360eac26e6b
BLAKE2b-256 1b54dff013902b44f5fea8d859f0168a4c1137e431d9a40159fe873f9ea3967f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wgpu-0.9.4-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0bad844d989412d226317ec0277dda688a69033a5f27787195753c0aae218201
MD5 b7b7ce874e2e034f70c266872a1e53ab
BLAKE2b-256 e10e06388db3dd6bfcf0c61d7d672c5eeb22f63bfb1a1cc6cf47f1b07dd43f48

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wgpu-0.9.4-py3-none-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6d1632fbd13c9a79b5b7c62c65b12ce34664ecfc919edabc2e0e46eacefe5fe0
MD5 dad5aed2163ab940688c490b660e2a0d
BLAKE2b-256 38392752cbaee3c7ce85564fb77f41aa9914256a8e0d65aa2d7d149fdead8865

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