wgpu
é uma API de gráficos de plataforma cruzada, segura e pura. Ele funciona nativamente em vulkan, metal, d3d12 e opengl; e no topo do WebGL2 e WebGPU no WASM.
A API é baseada no padrão WebGPU. Serve como o núcleo da integração WebGPU em Firefox e Deno.
O repositório hospeda as seguintes bibliotecas:
Os seguintes binários:
naga
.cts_runner
- WEBGPU Conformage Test Suite Runner usando deno_webgpu
.player
- Aplicação independente para reproduzir os traços da API.Para uma visão geral de todos os componentes do ecossistema GFX-RS, consulte o quadro geral.
Exemplos de ferrugem podem ser encontrados em WGPU/exemplos. Você pode executar os exemplos no nativo com cargo run --bin wgpu-examples <example>
. Veja a lista de exemplos.
Para executar os exemplos em um navegador, execute cargo xtask run-wasm
. Em seguida, abra http://localhost:8000
no seu navegador e você pode escolher um exemplo para ser executado. Naturalmente, para exibir qualquer um dos exemplos baseados em WebGPU, você precisa garantir que o seu navegador o suporte.
Se você está procurando um tutorial da WGPU, consulte o seguinte:
Para usar o WGPU em C/C ++, você precisa de nativo WGPU.
Se você está procurando um tutorial WGPU C ++, consulte o seguinte:
Se você deseja usar a WGPU em outros idiomas, há muitas ligações ao nativo de WGPU de idiomas como Python, D, Julia, Kotlin e muito mais. Veja a lista.
Temos o espaço da matriz com alguns quartos diferentes que formam a comunidade WGPU:
Temos um wiki que serve como base de conhecimento.
API | Windows | Linux/Android | macOS/iOS | Web (WASM) |
---|---|---|---|---|
Vulkan | ✅ | ✅ | ? | |
Metal | ✅ | |||
Dx12 | ✅ | |||
Opengl | ? (GL 3.3+) | ? (GL ES 3.0+) | ? | ? (Webgl2) |
WebGPU | ✅ |
✅ = suporte de primeira classe
? = Suporte para baixo/melhor esforço
? = Requer a camada de tradução do ângulo (somente GL ES 3.0)
? = Requer a camada de tradução Moltenvk
= Não suportado, embora aberto a contribuições
O WGPU suporta shaders em WGSL, SPIR-V e GLSL. Tanto o HLSL quanto o GLSL têm compiladores para direcionar SPIR-V. Todos esses idiomas de shader podem ser usados com qualquer back -end, pois lidamos com todas as conversões. Além disso, o suporte para essas entradas de shader não está desaparecendo.
Embora o WebGPU não suporte nenhuma linguagem de sombreamento que não seja o WGSL, converteremos automaticamente seus shaders não-WGSL se você estiver executando no WebGPU.
O WGSL é sempre suportado por padrão, mas o GLSL e o SPIR-V precisam de recursos habilitados para compilar no suporte.
Observe que a especificação WGSL ainda está em desenvolvimento, portanto, a especificação de rascunho não descreve exatamente o que wgpu
suporta. Veja abaixo para obter detalhes.
Para ativar os shaders SPIR-V, ative o recurso spirv
da WGPU. Para ativar os shaders GLSL, ativar o recurso glsl
da WGPU.
Angle é uma camada de tradução de Gles para outros backnds desenvolvidos pelo Google. Apoiamos a execução de nosso back -end GLES3 sobre ele, a fim de alcançar o suporte ao DX11, que não são acessíveis de outra forma. Para ser executado com o ângulo, o recurso "ângulo" deve ser ativado e as bibliotecas de ângulo colocadas em um local visível para o aplicativo. Esses binários podem ser baixados a partir de artefatos de ângulo GFBUILD, a compilação manual pode ser necessária em Macs com o Apple Silicon.
No Windows, você geralmente precisa copiá -los para o diretório de trabalho, no mesmo diretório que o executável ou em algum lugar do seu caminho. No Linux, você pode apontá -los usando o ambiente LD_LIBRARY_PATH
.
Devido a dependentes complexos, temos duas políticas de MSRV:
d3d12
, naga
, wgpu-core
, wgpu-hal
e MSRV do wgpu-types
é 1,76 , mas podem ser inferiores ao restante do espaço de trabalho no futuro. Ele é aplicado no IC (em "/.github/workflows/ci.yml") com as variáveis CORE_MSRV
e REPO_MSRV
. Esta versão só pode ser atualizada para quebrar lançamentos, embora lançemos uma versão de quebra a cada três meses.
As caixas naga
, wgpu-core
, wgpu-hal
e wgpu-types
nunca devem exigir um MSRV à frente do MSRV do Firefox para construções noturnas, conforme determinado pelo valor de MINIMUM_RUST_VERSION
em python/mozboot/mozboot/util.py
.
Todos os testes e exemplo de infraestrutura compartilham o mesmo conjunto de variáveis de ambiente que determinam em qual back -end/GPU ele será executado.
WGPU_ADAPTER_NAME
com uma substring do nome do adaptador que você deseja usar (Ex. 1080
corresponderá NVIDIA GeForce 1080ti
).WGPU_BACKEND
com uma lista separada por vírgula dos backnds que você deseja usar ( vulkan
, metal
, dx12
ou gl
).WGPU_POWER_PREF
com a preferência de energia para escolher quando um nome de adaptador específico não é especificado ( high
, low
ou none
)WGPU_DX12_COMPILER
com o compilador de shader DX12 que você deseja usar ( dxc
ou fxc
, observe que dxc
requer dxil.dll
e dxcompiler.dll
para estar no diretório de trabalho, caso contrário, voltará ao fxc
)WGPU_GLES_MINOR_VERSION
com o número menor de versão do OpenGL ES 3 para solicitar ( 0
, 1
, 2
ou automatic
).WGPU_ALLOW_UNDERLYING_NONCOMPLIANT_ADAPTER
com um booleano se os drivers não compatíveis são enumerados ( 0
por false, 1
para verdadeiro). Ao executar o CTS, use as variáveis DENO_WEBGPU_ADAPTER_NAME
, DENO_WEBGPU_BACKEND
, DENO_WEBGPU_POWER_PREFERENCE
.
Temos vários métodos de teste, cada um dos quais testa diferentes qualidades sobre a WGPU. Executamos automaticamente nossos testes no CI. O estado atual dos testes de IC:
Plataforma/back -end | Testes | Notas |
---|---|---|
Windows/DX12 | ✔️ | Usando Warp |
Windows/OpenGL | ✔️ | Usando LLVMPipe |
MacOS/metal | ✔️ | Usando Hardware Runner |
Linux/Vulkan | ✔️ | usando lavapipe |
Linux/OpenGL es | ✔️ | Usando LLVMPipe |
Chrome/Webgl | ✔️ | Usando Swiftshader |
Chrome/WebGPU | não configurado |
Usamos uma ferramenta chamada cargo nextest
para executar nossos testes. Para instalá-lo, execute cargo install cargo-nextest
.
Para executar a suíte de teste:
cargo xtask test
Para executar o conjunto de testes no WebGL (atualmente incompleto):
cd wgpu
wasm-pack test --headless --chrome --no-default-features --features webgl --workspace
Isso executará automaticamente os testes usando um navegador embalado. Remova --headless
para executar os testes com qualquer navegador que desejar em http://localhost:8000
.
Se você é um usuário e deseja uma maneira de ajudar a contribuir para a WGPU, sempre precisamos de mais ajuda para escrever casos de teste.
O WebGPU inclui um conjunto de testes de conformidade para validar que as implementações estão funcionando corretamente. Podemos executar esse CTS contra a WGPU.
Para executar o CTS, primeiro, você precisa conferir:
git clone https://github.com/gpuweb/cts.git
cd cts
# works in bash and powershell
git checkout $(cat ../cts_runner/revision.txt)
Para executar um determinado conjunto de testes:
# 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 a lista completa de testes, vá para o Visualizador Online do CTS.
A lista de testes CTS atualmente ativados pode ser encontrada aqui.
A caixa wgpu
deve ser uma tradução idiomática de ferrugem da API da WebGPU. Essa especificação, juntamente com sua linguagem de sombreamento, o WGSL, ainda está na fase de "rascunho de trabalho" e, embora os contornos gerais sejam estáveis, os detalhes mudam com frequência. Até que a especificação seja estabilizada, a caixa wgpu
e a versão do WGSL que ele implementa provavelmente diferirão do que é especificado, à medida que a implementação alcança.
Exatamente quais recursos wgsl suportes wgpu
depende de como você está usando:
Ao executar como código nativo, o wgpu
usa a caixa NAGA para traduzir o código WGSL na linguagem de sombreamento da API da GPU nativa da sua plataforma. Naga tem um marco para alcançar a especificação WGSL, mas, em geral, não há resumo atualizado das diferenças entre Naga e a especificação WGSL.
Ao executar em um navegador da Web (por compilação com WebAssembly) sem o recurso "webgl"
ativado, wgpu
conta com a implementação do WebGPU do próprio navegador. Os shaders WGSL são simplesmente passados para o navegador, para que determine quais recursos WGSL você pode usar.
Ao executar em um navegador da Web com o recurso "webgl"
da wgpu
, wgpu
usa o NAGA para traduzir os programas WGSL em GLSL. Isso usa a mesma versão do NAGA como se você estivesse executando wgpu
como código nativo.
A WGPU usa os sistemas de coordenadas de D3D e metal:
Renderizar | Textura |
---|---|