[go: up one dir, main page]

wgpu-core 25.0.0

Core implementation logic of wgpu, the cross-platform, safe, pure-rust graphics API
Documentation
[package]

name = "wgpu-core"

version = "25.0.0"

authors = ["gfx-rs developers"]

edition = "2021"

description = "Core implementation logic of wgpu, the cross-platform, safe, pure-rust graphics API"

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.82.0"



[package.metadata.docs.rs]

all-features = true

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"]



[lints.rust]

unexpected_cfgs = { level = "warn", check-cfg = ['cfg(wgpu_validate_locks)'] }



[lib]



[features]

#! See docuemntation for the `wgpu` crate for more in-depth information on these features.



# TODO(https://github.com/gfx-rs/wgpu/issues/6826): "std" is a default feature for

# compatibility with prior behavior only, and should be removed once we know how

# wgpu-core’s dependents want to handle no_std.

default = ["std"]



#! ### Logging Configuration

# --------------------------------------------------------------------



## Log all API entry points at info instead of trace level.

## Also, promotes certain debug log calls to info.

api_log_info = []



## Log resource lifecycle management at info instead of trace level.

resource_log_info = []



#! ### Runtime Checks

# --------------------------------------------------------------------



## Apply run-time checks, even in release builds. These are in addition

## to the validation carried out at public APIs in all builds.

strict_asserts = ["wgpu-types/strict_asserts"]



#! ### Debugging

# --------------------------------------------------------------------



## Enable lock order observation.

observe_locks = ["std", "dep:ron", "serde/serde_derive"]



#! ### Serialization

# --------------------------------------------------------------------



## Enables serialization via `serde` on common wgpu types.

serde = ["dep:serde", "wgpu-types/serde", "arrayvec/serde", "hashbrown/serde"]



## Enable API tracing.

trace = [

    "serde",

    "std",

    "dep:ron",

    "naga/serialize",

    "wgpu-types/trace",

    "dep:bytemuck",

]



## Enable API replaying

replay = ["serde", "naga/deserialize"]



#! ### Surface Support

# --------------------------------------------------------------------



## Enable creating surfaces using raw-window-handle

raw-window-handle = ["dep:raw-window-handle"]



#! ### Shading Language Support

# --------------------------------------------------------------------



## Enable `ShaderModuleSource::Wgsl`

wgsl = ["naga/wgsl-in"]



## Enable `ShaderModuleSource::Glsl`

glsl = ["naga/glsl-in"]



## Enable `ShaderModuleSource::SpirV`

spirv = ["naga/spv-in", "dep:bytemuck"]



#! ### Other

# --------------------------------------------------------------------



## Internally count resources and events for debugging purposes. If the counters

## feature is disabled, the counting infrastructure is removed from the build and

## the exposed counters always return 0.

counters = ["wgpu-types/counters"]



## Implement `Send` and `Sync` on Wasm, but only if atomics are not enabled.

fragile-send-sync-non-atomic-wasm = [

    "wgpu-hal/fragile-send-sync-non-atomic-wasm",

]



## Enable certain items to be `Send` and `Sync` when they would not otherwise be.

## Also enables backtraces in some error cases when also under cfg(debug_assertions).

std = []



#! ### External libraries

# --------------------------------------------------------------------

#! The following features facilitate integration with third-party supporting libraries.



## Enable using the `mach-dxcompiler-rs` crate to compile DX12 shaders.

static-dxc = ["wgpu-hal/static-dxc"]



## Enable portable atomics on platforms that do not support 64bit atomics.

portable-atomic = ["dep:portable-atomic", "wgpu-hal/portable-atomic"]



#! ### Target Conditional Features

# --------------------------------------------------------------------

# Look to wgpu-hal's Cargo.toml for explaination how these features and the wgpu-core

# platform crates collude to provide platform-specific behavior.



## DX12 backend

dx12 = ["wgpu-core-deps-windows-linux-android/dx12"]

## Metal backend

metal = ["wgpu-core-deps-apple/metal"]

## Vulkan backend, only available on Windows, Linux, Android

vulkan = ["wgpu-core-deps-windows-linux-android/vulkan"]

## OpenGL backend, only available on Windows, Linux, Android, and Emscripten

gles = [

    "wgpu-core-deps-windows-linux-android/gles",

    "wgpu-core-deps-emscripten/gles",

]



## WebGL backend, only available on Emscripten

webgl = ["wgpu-core-deps-wasm/webgl"]

## OpenGL backend, on macOS only

angle = ["wgpu-core-deps-apple/angle"]

## Vulkan portability backend, only available on macOS

vulkan-portability = ["wgpu-core-deps-apple/vulkan-portability"]

## Renderdoc integration, only available on Windows, Linux, and Android

renderdoc = ["wgpu-core-deps-windows-linux-android/renderdoc"]



## Enable the `noop` backend.

# TODO(https://github.com/gfx-rs/wgpu/issues/7120): there should be a hal feature

noop = []



# The target limitation here isn't needed, but prevents more than one of these

# platform crates from being included in the build at a time, preventing users

# from getting confused by seeing them in the list of crates.

[target.'cfg(target_vendor = "apple")'.dependencies]

wgpu-core-deps-apple = { workspace = true, optional = true }

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

wgpu-core-deps-emscripten = { workspace = true, optional = true }

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

wgpu-core-deps-wasm = { workspace = true, optional = true }

[target.'cfg(any(windows, target_os = "linux", target_os = "android"))'.dependencies]

wgpu-core-deps-windows-linux-android = { workspace = true, optional = true }



[dependencies]

naga.workspace = true

wgpu-hal.workspace = true

wgpu-types.workspace = true



arrayvec.workspace = true

bit-vec.workspace = true

bit-set.workspace = true

bitflags.workspace = true

bytemuck = { workspace = true, optional = true }

document-features.workspace = true

hashbrown.workspace = true

indexmap.workspace = true

log.workspace = true

once_cell = { workspace = true, features = ["std"] }

parking_lot.workspace = true

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

raw-window-handle = { workspace = true, optional = true }

ron = { workspace = true, optional = true }

rustc-hash.workspace = true

serde = { workspace = true, features = ["default", "derive"], optional = true }

smallvec.workspace = true

thiserror.workspace = true



[target.'cfg(not(target_has_atomic = "64"))'.dependencies]

portable-atomic = { workspace = true, optional = true }



[build-dependencies]

cfg_aliases.workspace = true