wgpu
es una API de gráficos multiplataforma, segura y pura de altura pura. Funciona de forma nativa en Vulkan, Metal, D3D12 y OpenGL; y además de WebGL2 y WebGPU en WASM.
La API se basa en el estándar WebGPU. Sirve como el núcleo de la integración de WebGPU en Firefox y Deno.
El repositorio aloja las siguientes bibliotecas:
Los siguientes binarios:
naga
.cts_runner
- Runner de suite de prueba de conformidad webGPU usando deno_webgpu
.player
- Aplicación independiente para reproducir las trazas de la API.Para obtener una descripción general de todos los componentes en el ecosistema GFX-RS, consulte el panorama general.
Se pueden encontrar ejemplos de óxido en WGPU/ejemplos. Puede ejecutar los ejemplos en Native con cargo run --bin wgpu-examples <example>
. Vea la lista de ejemplos.
Para ejecutar los ejemplos en un navegador, ejecute cargo xtask run-wasm
. Luego abra http://localhost:8000
en su navegador, y puede elegir un ejemplo para ejecutar. Naturalmente, para mostrar cualquiera de los ejemplos basados en WebGPU, debe asegurarse de que su navegador lo admita.
Si está buscando un tutorial WGPU, mire lo siguiente:
Para usar WGPU en C/C ++, necesita WGPU-Native.
Si está buscando un tutorial WGPU C ++, mire lo siguiente:
Si desea usar WGPU en otros idiomas, hay muchas fijaciones al nativo de WGPU de idiomas como Python, D, Julia, Kotlin y más. Ver la lista.
Tenemos el espacio de matriz con algunas habitaciones diferentes que forman la comunidad WGPU:
Tenemos un wiki que sirve como base de conocimiento.
API | Windows | Linux/Android | macOS/iOS | Web (WASM) |
---|---|---|---|---|
Vulkan | ✅ | ✅ | ? | |
Metal | ✅ | |||
DX12 | ✅ | |||
Abre | ? (GL 3.3+) | ? (GL es 3.0+) | ? | ? (WebGL2) |
WebGPU | ✅ |
✅ = soporte de primera clase
? = Downlevel/Mejor soporte de esfuerzo
? = Requiere la capa de traducción de ángulo (solo GL es 3.0)
? = Requiere la capa de traducción de Moltenvk
= Sin apoyo, aunque abierto a contribuciones
WGPU admite sombreadores en WGSL, SIGR-V y GLSL. Tanto HLSL como GLSL tienen compiladores para apuntar a SIGR-V. Todos estos idiomas de sombreador se pueden usar con cualquier backend mientras manejamos todas las conversiones. Además, el soporte para estas entradas de sombreador no va a desaparecer.
Si bien WebGPU no admite ningún lenguaje de sombreado que no sea WGSL, convertiremos automáticamente sus sombreadores no WGSL si se está ejecutando en WebGPU.
WGSL siempre es compatible de forma predeterminada, pero GLSL y SIG-V necesitan características habilitadas para compilar en soporte.
Tenga en cuenta que la especificación WGSL aún está en desarrollo, por lo que el borrador de la especificación no describe exactamente lo que wgpu
admite. Vea a continuación para más detalles.
Para habilitar los sombreadores Spir-V, habilite la característica spirv
de WGPU. Para habilitar los sombreadores GLSL, habilite la característica glsl
de WGPU.
Angle es una capa de traducción de GLES a otros backends desarrollados por Google. Apoyamos la ejecución de nuestro backend de GLES3 sobre ello para alcanzar el soporte de plataformas DX11, que de otra manera no es accesible. Para ejecutar con ángulo, la característica de "ángulo" debe estar habilitada y las bibliotecas de ángulo colocadas en una ubicación visible para la aplicación. Estos binarios se pueden descargar de artefactos de ángulo de gfbuild, se puede requerir una compilación manual en Macs con Silicon Apple.
En Windows, generalmente debe copiarlos en el directorio de trabajo, en el mismo directorio que el ejecutable o en algún lugar de su camino. En Linux, puede señalarlos usando el entorno LD_LIBRARY_PATH
.
Debido a dependientes complejos, tenemos dos políticas de MSRV:
d3d12
, naga
, wgpu-core
, wgpu-hal
y MSRV de wgpu-types
es 1.76 , pero puede ser más bajo que el resto del espacio de trabajo en el futuro. Se aplica en CI (en "/.github/workflows/ci.yml") con las variables CORE_MSRV
y REPO_MSRV
. Esta versión solo se puede actualizar en lanzamientos de ruptura, aunque lanzamos una versión de ruptura cada tres meses.
Las cajas naga
, wgpu-core
, wgpu-hal
y wgpu-types
nunca deberían requerir un MSRV por delante de MSRV de Firefox para construcciones nocturnas, como lo determinan el valor de MINIMUM_RUST_VERSION
en python/mozboot/mozboot/util.py
.
Todas las pruebas y la infraestructura de ejemplo comparten el mismo conjunto de variables de entorno que determinan en qué backend/GPU se ejecutará.
WGPU_ADAPTER_NAME
con una subcadena del nombre del adaptador que desea usar (Ex. 1080
coincidirá con NVIDIA GeForce 1080ti
).WGPU_BACKEND
con una lista separada por comas de los backends que desea usar ( vulkan
, metal
, dx12
o gl
).WGPU_POWER_PREF
con la preferencia de potencia para elegir cuándo no se especifica un nombre de adaptador específico ( high
, low
o none
)WGPU_DX12_COMPILER
con el compilador de sombreador DX12 que desea usar ( dxc
o fxc
, tenga en cuenta que dxc
requiere dxil.dll
y dxcompiler.dll
para estar en el directorio de trabajo de lo contrario, volverá a fxc
)WGPU_GLES_MINOR_VERSION
con el número de versión menor de OpenGL ES 3 para solicitar ( 0
, 1
, 2
o automatic
).WGPU_ALLOW_UNDERLYING_NONCOMPLIANT_ADAPTER
con un booleano si los controladores no conformes están enumerados ( 0
para falso, 1
para verdadero). Al ejecutar el CTS, use las variables DENO_WEBGPU_ADAPTER_NAME
, DENO_WEBGPU_BACKEND
, DENO_WEBGPU_POWER_PREFERENCE
.
Tenemos múltiples métodos de prueba, cada uno de los cuales prueba diferentes cualidades sobre WGPU. Ejecutamos automáticamente nuestras pruebas en CI. El estado actual de las pruebas de CI:
Plataforma/backend | Pruebas | Notas |
---|---|---|
Windows/DX12 | ✔️ | Usando Warp |
Windows/OpenGL | ✔️ | Usando llvmpipe |
MacOS/metal | ✔️ | Usando el corredor de hardware |
Linux/Vulkan | ✔️ | Usando Lavapipe |
Linux/OpenGL ES | ✔️ | Usando llvmpipe |
Chrome/WebGL | ✔️ | Usando Swiftshader |
Chrome/WebGPU | no configurado |
Utilizamos una herramienta llamada cargo nextest
para ejecutar nuestras pruebas. Para instalarlo, ejecute cargo install cargo-nextest
.
Para ejecutar la suite de prueba:
cargo xtask test
Para ejecutar el conjunto de pruebas en WebGL (actualmente incompleto):
cd wgpu
wasm-pack test --headless --chrome --no-default-features --features webgl --workspace
Esto ejecutará automáticamente las pruebas usando un navegador empaquetado. Retire --headless
para ejecutar las pruebas con cualquier navegador que desee en http://localhost:8000
.
Si es un usuario y desea una forma de ayudar a contribuir a WGPU, siempre necesitamos más ayuda para escribir casos de prueba.
WebGPU incluye un conjunto de pruebas de conformidad para validar que las implementaciones funcionan correctamente. Podemos ejecutar este CTS contra WGPU.
Para ejecutar el CTS, primero, debe comprobarlo:
git clone https://github.com/gpuweb/cts.git
cd cts
# works in bash and powershell
git checkout $(cat ../cts_runner/revision.txt)
Para ejecutar un conjunto dado de pruebas:
# Must be inside the `cts` folder we just checked out, else this will fail
cargo run --manifest-path ../Cargo.toml -p cts_runner --bin cts_runner -- ./tools/run_deno --verbose "<test string>"
Para encontrar la lista completa de pruebas, vaya al visor CTS en línea.
La lista de pruebas CTS habilitadas actualmente se puede encontrar aquí.
La caja wgpu
está destinada a ser una traducción de óxido idiomática de la API WebGPU. Esa especificación, junto con su lenguaje de sombreado, WGSL, todavía están en la fase de "borrador de trabajo", y aunque los contornos generales son estables, los detalles cambian con frecuencia. Hasta que se estabilice la especificación, la caja wgpu
y la versión de WGSL IT implementan probablemente diferirán de lo que se especifica, a medida que la implementación se pone al día.
Exactamente qué características de WGSL es compatible con wgpu
depende de cómo lo esté utilizando:
Cuando se ejecuta como código nativo, wgpu
usa la caja NAGA para traducir el código WGSL en el lenguaje de sombreado de la API de GPU nativa de su plataforma. Naga tiene un hito para ponerse al día con la especificación WGSL, pero en general, no hay un resumen actualizado de las diferencias entre NAGA y las especificaciones de WGSL.
Cuando se ejecuta en un navegador web (por compilación a WebAssembly) sin la función "webgl"
habilitada, wgpu
se basa en la implementación de WebGPU del navegador. Los sombreadores WGSL simplemente se pasan al navegador, de modo que determina qué características de WGSL puede usar.
Cuando se ejecuta en un navegador web con la función "webgl"
de wgpu
habilitada, wgpu
usa NAGA para traducir los programas WGSL en GLSL. Esto usa la misma versión de Naga como si estuviera ejecutando wgpu
como código nativo.
WGPU utiliza los sistemas de coordenadas de D3D y metal:
Prestar | Textura |
---|---|