wgpu-hal 23.0.1

WebGPU hardware abstraction layer
Documentation
[package]

name = "wgpu-hal"

version = "23.0.1"

authors = ["gfx-rs developers"]

edition = "2021"

description = "WebGPU hardware abstraction layer"

homepage = "https://wgpu.rs/"

repository = "https://github.com/gfx-rs/wgpu"

keywords = ["graphics"]

license = "MIT OR Apache-2.0"



# Override the workspace's `rust-version` key. Firefox uses `cargo vendor` to

# copy the crates it actually uses out of the workspace, so it's meaningful for

# them to have less restrictive MSRVs individually than the workspace as a

# whole, if their code permits. See `../README.md` for details.

rust-version = "1.76"



[package.metadata.docs.rs]

# Ideally we would enable all the features.

#

# However, the metal features fail to be documented because the docs.rs runner cross-compiling under

# x86_64-unknown-linux-gnu and metal-rs cannot compile in that environment at the moment. The same applies

# for the dx12 feature.

features = ["vulkan", "gles", "renderdoc"]

rustdoc-args = ["--cfg", "docsrs"]

targets = [

    "x86_64-unknown-linux-gnu",

    "x86_64-apple-darwin",

    "x86_64-pc-windows-msvc",

    "wasm32-unknown-unknown",

]



[package.metadata.cargo-machete]

# Cargo machete can't check build.rs dependencies. See https://github.com/bnjbvr/cargo-machete/issues/100

ignored = ["cfg_aliases"]



[lib]



[features]

## Enables the Metal backend when targeting Apple platforms.

##

## Has no effect on non-Apple platforms.

metal = [

    # Metal is only available on Apple platforms, therefore request MSL output also only if we target an Apple platform.

    "naga/msl-out-if-target-apple",

    "dep:block",

]

vulkan = [

    "naga/spv-out",

    "dep:ash",

    "dep:gpu-alloc",

    "dep:gpu-descriptor",

    "dep:libloading",

    "dep:smallvec",

    "dep:android_system_properties",

]

gles = [

    "naga/glsl-out",

    "dep:bytemuck",

    "dep:glow",

    "dep:glutin_wgl_sys",

    "dep:khronos-egl",

    "dep:libloading",

    "dep:ndk-sys",

    "windows/Win32_Graphics_OpenGL",

    "windows/Win32_Graphics_Gdi",

    "windows/Win32_System_LibraryLoader",

    "windows/Win32_UI_WindowsAndMessaging",

]

## Enables the DX12 backend when targeting Windows.

##

## Has no effect if not targeting Windows.

dx12 = [

    # DX12 is only available on Windows, therefore request HLSL output also only if we target Windows.

    "dep:bit-set",

    "dep:libloading",

    "dep:range-alloc",

    "dep:windows-core",

    "gpu-allocator/d3d12",

    "naga/hlsl-out-if-target-windows",

    "windows/Win32_Graphics_Direct3D_Fxc",

    "windows/Win32_Graphics_Direct3D_Dxc",

    "windows/Win32_Graphics_Direct3D",

    "windows/Win32_Graphics_Direct3D12",

    "windows/Win32_Graphics_DirectComposition",

    "windows/Win32_Graphics_Dxgi_Common",

    "windows/Win32_Security",

    "windows/Win32_System_Diagnostics_Debug",

    "windows/Win32_System_Kernel",

    "windows/Win32_System_Performance",

    "windows/Win32_System_Threading",

    "windows/Win32_UI_WindowsAndMessaging",

]

renderdoc = ["dep:libloading", "dep:renderdoc-sys"]

fragile-send-sync-non-atomic-wasm = ["wgt/fragile-send-sync-non-atomic-wasm"]

# Panic when running into an out-of-memory error (for debugging purposes).

#

# Only affects the d3d12 and vulkan backends.

oom_panic = []

# Panic when running into a device lost error (for debugging purposes).

# Only affects the d3d12 and vulkan backends.

device_lost_panic = []

# Panic when running into an internal error other than out-of-memory and device lost

# (for debugging purposes).

#

# Only affects the d3d12 and vulkan backends.

internal_error_panic = []



[[example]]

name = "halmark"



[[example]]

name = "raw-gles"

required-features = ["gles"]



[dependencies]

bitflags.workspace = true

parking_lot.workspace = true

profiling = { workspace = true, default-features = false }

raw-window-handle.workspace = true

thiserror.workspace = true

once_cell.workspace = true



# backends common

arrayvec.workspace = true

rustc-hash.workspace = true

log.workspace = true



# backend: Gles

bytemuck = { workspace = true, optional = true }

glow = { workspace = true, optional = true }



[dependencies.wgt]

package = "wgpu-types"

path = "../wgpu-types"

version = "23.0.0"



[target.'cfg(not(target_arch = "wasm32"))'.dependencies]

# backend: Vulkan

ash = { workspace = true, optional = true }

gpu-alloc = { workspace = true, optional = true }

gpu-descriptor = { workspace = true, optional = true }

smallvec = { workspace = true, optional = true, features = ["union"] }



khronos-egl = { workspace = true, features = ["dynamic"], optional = true }

libloading = { workspace = true, optional = true }

renderdoc-sys = { workspace = true, optional = true }



[target.'cfg(target_os = "emscripten")'.dependencies]

khronos-egl = { workspace = true, features = ["static", "no-pkg-config"] }

#Note: it's unused by emscripten, but we keep it to have single code base in egl.rs

libloading = { workspace = true, optional = true }



[target.'cfg(windows)'.dependencies]

# backend: Dx12 and Gles

windows = { workspace = true, optional = true }

# backend: Dx12

bit-set = { workspace = true, optional = true }

range-alloc = { workspace = true, optional = true }

gpu-allocator = { workspace = true, optional = true }

# For core macros. This crate is also reexported as windows::core.

windows-core = { workspace = true, optional = true }



# backend: Gles

glutin_wgl_sys = { workspace = true, optional = true }



[target.'cfg(any(target_os="macos", target_os="ios"))'.dependencies]

# backend: Metal

block = { workspace = true, optional = true }



metal.workspace = true

objc.workspace = true

core-graphics-types.workspace = true



[target.'cfg(all(target_arch = "wasm32", not(target_os = "emscripten")))'.dependencies]

wasm-bindgen.workspace = true

web-sys = { workspace = true, features = [

    "Window",

    "HtmlCanvasElement",

    "WebGl2RenderingContext",

    "OffscreenCanvas",

] }

js-sys.workspace = true



[target.'cfg(unix)'.dependencies]

libc.workspace = true



[target.'cfg(target_os = "android")'.dependencies]

android_system_properties = { workspace = true, optional = true }

ndk-sys = { workspace = true, optional = true }



[dependencies.naga]

path = "../naga"

version = "23.0.0"



[build-dependencies]

cfg_aliases.workspace = true



# DEV dependencies

[dev-dependencies.naga]

path = "../naga"

version = "23.0.0"

features = ["wgsl-in"]



[dev-dependencies]

cfg-if.workspace = true

env_logger.workspace = true

glam.workspace = true       # for ray-traced-triangle example

winit.workspace = true      # for "halmark" example



[target.'cfg(not(any(target_arch = "wasm32", target_os = "ios")))'.dev-dependencies]

glutin-winit = { workspace = true, features = [

    "egl",

    "wgl",

    "wayland",

    "x11",

] } # for "raw-gles" example

glutin = { workspace = true, features = [

    "egl",

    "wgl",

    "wayland",

    "x11",

] } # for "raw-gles" example

rwh_05 = { version = "0.5", package = "raw-window-handle" } # temporary compatibility for glutin-winit in "raw-gles" example

winit = { workspace = true, features = ["rwh_05"] } # for "raw-gles" example