Skip to main content

Next generation GPU API for Python

Project description

CI Documentation Status PyPI version

wgpu-py

Next generation GPU API for Python

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

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

  • Coverage of the WebGPU spec is nearly complete.
  • Test coverage of the API is 100%.
  • Support for Windows, Linux and MacOS.
  • 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

The library ships with Rust binaries for Windows, MacOS and Linux. If you want to use a custom build instead, you can set the environment variable WGPU_LIB_PATH.

Platform requirements

Under the hood, wgpu runs on Vulkan, Metal, or DX12. The wgpu-backend is selected automatically, but can be overridden by setting the WGPU_BACKEND_TYPE environment variable to "Vulkan", "Metal", "D3D12", "D3D11", or "OpenGL".

On Windows 10, things should just work. On older Windows versions you may need to install the Vulkan drivers. You may want to force "Vulkan" while "D3D12" is less mature.

On Linux, it's advisable to install the proprietary drivers of your GPU (if you have a dedicated GPU). You may need to apt install mesa-vulkan-drivers. Wayland currently only works with the GLFW canvas (and is unstable).

On MacOS you need at least 10.13 (High Sierra) to have Vulkan support.

Usage

Also see the online documentation.

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.backend.rs

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

# GLFW is a great lightweight windowing toolkit. Install with `pip install glfw`
from wgpu.gui.glfw import WgpuCanvas

# Visualizations can be embedded as a widget in a Qt application.
# Import PySide6, PyQt6, PySide2, PyQt5, PySide or PyQt4 before running the line below.
# The code will detect and use the library that is imported.
from wgpu.gui.qt import WgpuCanvas

# You can also show wgpu visualizations in Jupyter
from wgpu.gui.jupyter 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.

Web support

We are considering future support for compiling (Python) visualizations to the web via PScript and Flexx. We try to keep that option open as long as it does not get in the way too much. No promises.

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 python setup.py develop, this will also install our only runtime dependency cffi
  • 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.

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.

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

Uploaded Source

Built Distributions

wgpu-0.5.8-py3-none-win_amd64.whl (4.6 MB view details)

Uploaded Python 3 Windows x86-64

wgpu-0.5.8-py3-none-win32.whl (4.2 MB view details)

Uploaded Python 3 Windows x86

wgpu-0.5.8-py3-none-manylinux_2_24_x86_64.whl (25.7 MB view details)

Uploaded Python 3 manylinux: glibc 2.24+ x86-64

wgpu-0.5.8-py3-none-manylinux_2_24_i686.whl (26.0 MB view details)

Uploaded Python 3 manylinux: glibc 2.24+ i686

wgpu-0.5.8-py3-none-macosx_11_0_arm64.whl (4.6 MB view details)

Uploaded Python 3 macOS 11.0+ ARM64

wgpu-0.5.8-py3-none-macosx_10_9_x86_64.whl (4.6 MB view details)

Uploaded Python 3 macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: wgpu-0.5.8.tar.gz
  • Upload date:
  • Size: 81.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

File hashes

Hashes for wgpu-0.5.8.tar.gz
Algorithm Hash digest
SHA256 1ed514d4c1bdb680c7967751522440bed18da9b2aba4c130d2b1ec394310f295
MD5 fe7930af11276270f937a0c92b139f6f
BLAKE2b-256 9b04a7f591eb117974fa9b32ab06384a4d189201ce90e471fcbec4917aabe77e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: wgpu-0.5.8-py3-none-win_amd64.whl
  • Upload date:
  • Size: 4.6 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

File hashes

Hashes for wgpu-0.5.8-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 853c24b81e34beaedfd5affd47f334ed02a8c8b981a4ead52a68c940d2e59612
MD5 6a931d95fe7a3280856e545401b671d9
BLAKE2b-256 632417fb3c0692db980c75449f906565e3a18b3a98b44a47936c041a235fd7e5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: wgpu-0.5.8-py3-none-win32.whl
  • Upload date:
  • Size: 4.2 MB
  • Tags: Python 3, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

File hashes

Hashes for wgpu-0.5.8-py3-none-win32.whl
Algorithm Hash digest
SHA256 0b370d6eae3562a93879d2b28f2636c11a5576f66d64419bd5310dd267f06e4b
MD5 b256b1a0d97962ce79d8fa858edaa67d
BLAKE2b-256 4f016b67d7de9e97aa00beca57cd009d41e59b172d199ac4c6ae20c462766b67

See more details on using hashes here.

File details

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

File metadata

  • Download URL: wgpu-0.5.8-py3-none-manylinux_2_24_x86_64.whl
  • Upload date:
  • Size: 25.7 MB
  • Tags: Python 3, manylinux: glibc 2.24+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

File hashes

Hashes for wgpu-0.5.8-py3-none-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 82608ab02c529b369ef2f5891a65a5090fe7aea5d416a3006fa72e2aa5c2479f
MD5 8ee320933502e5e65bcba8e9befc3fa2
BLAKE2b-256 d745300111450bfff8d52fb9f609ecba1b77ce158f6bc8101f0f42d764b4411b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: wgpu-0.5.8-py3-none-manylinux_2_24_i686.whl
  • Upload date:
  • Size: 26.0 MB
  • Tags: Python 3, manylinux: glibc 2.24+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

File hashes

Hashes for wgpu-0.5.8-py3-none-manylinux_2_24_i686.whl
Algorithm Hash digest
SHA256 072d1f79abf5f4d1c12051426a3d094213c5915b048f6c070e51a18a2d6e41d7
MD5 5a21b84c8a680941b19e615f32cee9b8
BLAKE2b-256 ce8ad253a62e55a56ff0ae59458da993a5a561f0ca67c5ec7f83202593763496

See more details on using hashes here.

File details

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

File metadata

  • Download URL: wgpu-0.5.8-py3-none-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 4.6 MB
  • Tags: Python 3, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

File hashes

Hashes for wgpu-0.5.8-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e7c99f88d8d542b25644b91eb3f0fcca7379a59aa38246a3c0573f865a378d4d
MD5 192a43d22c5c8c02e091b6a32b507d3a
BLAKE2b-256 31f9c291884c3632075f1829b6554823d9e6523b8413b0c388a77e8dd4933054

See more details on using hashes here.

File details

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

File metadata

  • Download URL: wgpu-0.5.8-py3-none-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 4.6 MB
  • Tags: Python 3, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

File hashes

Hashes for wgpu-0.5.8-py3-none-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 e0be81cb3556d79b1b9d181db73aedddc52db3f61ed365faeb8fa9c576599d0b
MD5 0fbdbcf3f542687182acf2ef7cca012e
BLAKE2b-256 c5c2ed157f932389333242d30f85e7cc71952fc520a85287758ccbc0ef3b2ffa

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