wgpu
-это кроссплатформенное, безопасное, графическое API с чистой подачей. Он изначально работает на Вулкан, металле, D3D12 и OpenGL; и в дополнение к WebGl2 и Webgpu на WASM.
API основан на стандарте WebGPU. Он служит ядром интеграции WebGPU в Firefox и DENO.
Репозиторий проводит следующие библиотеки:
Следующие двоичные файлы:
naga
.cts_runner
- WEBGPU COMPTORMANCE TEST SUITE RUNNER с использованием deno_webgpu
.player
- автономное применение для повторения трассов API.Для обзора всех компонентов в экосистеме GFX-RS см. В общей картине.
Примеры ржавчины можно найти в WGPU/примерах. Вы можете запустить примеры на Native с cargo run --bin wgpu-examples <example>
. Смотрите список примеров.
Чтобы запустить примеры в браузере, запустите cargo xtask run-wasm
. Затем откройте http://localhost:8000
в вашем браузере, и вы можете выбрать пример для запуска. Естественно, чтобы отобразить любой из примеров на основе WebGPU, вам необходимо убедиться, что ваш браузер поддерживает его.
Если вы ищете учебник WGPU, посмотрите на следующее:
Чтобы использовать WGPU в C/C ++, вам нужен WGPU-родной.
Если вы ищете учебник WGPU C ++, посмотрите на следующее:
Если вы хотите использовать WGPU на других языках, есть много привязки к WGPU-родным из таких языков, как Python, D, Julia, Kotlin и многое другое. Смотрите список.
У нас есть матричное пространство с несколькими разными комнатами, которые формируют сообщество WGPU:
У нас есть вики, которая служит базой знаний.
API | Окна | Linux/Android | macos/ios | Веб (WASM) |
---|---|---|---|---|
Вулкан | ✅ | ✅ | ? | |
Металл | ✅ | |||
DX12 | ✅ | |||
Открытый | ? (GL 3.3+) | ? (GL ES 3.0+) | ? | ? (WebGl2) |
Webgpu | ✅ |
✅ = поддержка первого класса
? = Поддержка LOWNLEVER/BEPTERCH
? = Требует угла перевода слоя (только GL ES 3.0)
? = Требуется слой перевода Moltenvk
= Неподдерживаемое, хотя и открыто для вкладов
WGPU поддерживает шейдеры в WGSL, Spir-V и GLSL. У HLSL и GLSL есть компиляторы для целевого Spir-V. Все эти языки шейдеров можно использовать с любым бэкэнд, когда мы обрабатываем все конверсии. Кроме того, поддержка этих входов шейдеров не уходит.
В то время как WebGPU не поддерживает какой-либо язык затенения, кроме WGSL, мы автоматически конвертируем ваши не-WGSL-шейдеры, если вы работаете в WebGPU.
WGSL всегда поддерживается по умолчанию, но GLSL и SPIR-V нуждаются в функциях, включенных для компиляции в поддержку.
Обратите внимание, что спецификация WGSL все еще находится в стадии разработки, поэтому спецификация проекта точно не описывает то, что поддерживает wgpu
. Смотрите ниже для деталей.
Чтобы включить Spir-V-шейдеры, включите функцию spirv
WGPU. Чтобы включить шейдеры GLSL, включите функцию glsl
WGPU.
Угол - это переводчик от GLES в другие бэкэнды, разработанные Google. Мы поддерживаем запуск нашего бэкэнда GLES3, чтобы охватить платформу DX11, которая в противном случае недоступна. Чтобы запустить с углом, функция «угла» должна быть включена, а также угловые библиотеки, помещенные в место, видимое для приложения. Эти двоичные файлы могут быть загружены из артефактов GFBuild-Engle, на Mac с Apple Silicon может потребоваться ручная компиляция.
В Windows, как правило, вам нужно скопировать их в рабочий каталог, в том же каталоге, что и исполняемый файл или где -то на вашем пути. На Linux вы можете указать на них, используя среду LD_LIBRARY_PATH
.
Из -за сложных иждивенцев у нас есть две политики MSRV:
d3d12
, naga
, wgpu-core
, wgpu-hal
и MSRV wgpu-types
составляет 1,76 , но может быть ниже, чем в остальной части рабочего пространства в будущем. Он применяется на CI (в "/.github/workflows/ci.yml") с переменными CORE_MSRV
и REPO_MSRV
. Эта версия может быть обновлена только в разрывах, хотя мы выпускаем разрывную версию каждые три месяца.
Ядры wgpu-types
naga
, wgpu-core
, wgpu-hal
и WGPU никогда не должны нуждаться в MSRV перед MSRV Firefox для ночных сборок, что определено значением MINIMUM_RUST_VERSION
в python/mozboot/mozboot/util.py
.
Все тестирование и пример инфраструктуры имеют один и тот же набор переменных среды, которые определяют, какой бэкэнд/графический процессор он будет работать.
WGPU_ADAPTER_NAME
с подстроением имени адаптера, которое вы хотите использовать (Ex. 1080
будет соответствовать NVIDIA GeForce 1080ti
).WGPU_BACKEND
с разделенным запятыми списком бэкэндов, которые вы хотите использовать ( vulkan
, metal
, dx12
или gl
).WGPU_POWER_PREF
с предпочтением питания выбирать, когда определенное имя адаптера не указано ( high
, low
или none
)WGPU_DX12_COMPILER
с компилятором шейдера DX12, который вы хотите использовать ( dxc
или fxc
, обратите внимание, что dxc
требует dxil.dll
и dxcompiler.dll
в рабочем каталоге, в противном случае он вернется к fxc
)WGPU_GLES_MINOR_VERSION
с незначительным номером версии OpenGL ES 3 для запроса ( 0
, 1
, 2
или automatic
).WGPU_ALLOW_UNDERLYING_NONCOMPLIANT_ADAPTER
с логическим, независимо от того, перечислены ли не совместимые драйверы ( 0
для false, 1
для TRUE). При запуске CTS используйте переменные DENO_WEBGPU_ADAPTER_NAME
, DENO_WEBGPU_BACKEND
, DENO_WEBGPU_POWER_PREFERENCE
.
У нас есть несколько методов тестирования, каждый из которых проверяет различные качества о WGPU. Мы автоматически запускаем наши тесты на CI. Текущее состояние тестирования CI:
Платформа/бэкэнд | Тесты | Примечания |
---|---|---|
Windows/DX12 | ✔ | Используя варп |
Windows/OpenGL | ✔ | Использование LLVMPipe |
Macos/metal | ✔ | Использование аппаратного бегуна |
Linux/Vulkan | ✔ | Использование Lavapipe |
Linux/opengl es | ✔ | Использование LLVMPipe |
Chrome/Webgl | ✔ | Используя Swiftshader |
Chrome/Webgpu | не настроен |
Мы используем инструмент под названием cargo nextest
чтобы запустить наши тесты. Чтобы установить его, запустите cargo install cargo-nextest
.
Чтобы запустить тестовый набор:
cargo xtask test
Чтобы запустить тестовый набор на Webgl (в настоящее время неполный):
cd wgpu
wasm-pack test --headless --chrome --no-default-features --features webgl --workspace
Это автоматически запускает тесты с помощью упакованного браузера. Удалить --headless
чтобы запустить тесты с любым браузером, который вы пожелаете по адресу http://localhost:8000
.
Если вы являетесь пользователем и хотите, чтобы способ помочь внести свой вклад в WGPU, нам всегда нужна дополнительная помощь в написании тестовых примеров.
WebGPU включает в себя набор тестов соответствия для проверки того, что реализации работают правильно. Мы можем запустить этот CTS против WGPU.
Чтобы запустить CTS, во -первых, вам нужно это проверить:
git clone https://github.com/gpuweb/cts.git
cd cts
# works in bash and powershell
git checkout $(cat ../cts_runner/revision.txt)
Чтобы запустить заданный набор тестов:
# 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>"
Чтобы найти полный список тестов, перейдите в онлайн -зритель CTS.
Список включенных в настоящее время тестов CTS можно найти здесь.
Ящик wgpu
предназначен для идиоматического перевода ржавчины API WebGPU. Эта спецификация, наряду с языком затенения, WGSL, оба все еще находятся в фазе «рабочего проекта», и, хотя общие контуры стабильны, детали часто меняются. До тех пор, пока спецификация не стабилизируется, ящик wgpu
и версия WGSL, которую он реализует, скорее всего, будут отличаться от того, что указано, поскольку реализация догоняет.
Что именно поддерживает WGSL wgpu
зависит от того, как вы его используете:
При запуске в качестве собственного кода wgpu
использует ящик NAGA для перевода кода WGSL в язык затенения нативного API GPU вашей платформы. У NAGA есть веха для догоняния спецификации WGSL, но в целом нет современной резюме различий между NAGA и спецификацией WGSL.
При запуске в веб -браузере (под компиляцией в Webassembly) функция "webgl"
, wgpu
, полагается на собственную реализацию WebGPU браузера. Шейдеры WGSL просто передаются в браузер, так что определяет, какие функции WGSL вы можете использовать.
При запуске в веб -браузере с включенной функцией wgpu
"webgl"
wgpu
использует NAGA для перевода программ WGSL в GLSL. Это использует ту же версию NAGA, как если бы вы запускали wgpu
в качестве собственного кода.
WGPU использует системы координат D3D и металла:
Оказывать | Текстура |
---|---|
![]() | ![]() |