
# Objective WESL's pre-MVP `0.1.0` has been [released](https://docs.rs/wesl/latest/wesl/)! Add support for WESL shader source so that we can begin playing and testing WESL, as well as aiding in their development. ## Solution Adds a `ShaderSource::WESL` that can be used to load `.wesl` shaders. Right now, we don't support mixing `naga-oil`. Additionally, WESL shaders currently need to pass through the naga frontend, which the WESL team is aware isn't great for performance (they're working on compiling into naga modules). Also, since our shaders are managed using the asset system, we don't currently support using file based imports like `super` or package scoped imports. Further work will be needed to asses how we want to support this. --- ## Showcase See the `shader_material_wesl` example. Be sure to press space to activate party mode (trigger conditional compilation)! https://github.com/user-attachments/assets/ec6ad19f-b6e4-4e9d-a00f-6f09336b08a4
151 lines
5.3 KiB
TOML
151 lines
5.3 KiB
TOML
[package]
|
|
name = "bevy_render"
|
|
version = "0.16.0-dev"
|
|
edition = "2024"
|
|
description = "Provides rendering functionality for Bevy Engine"
|
|
homepage = "https://bevyengine.org"
|
|
repository = "https://github.com/bevyengine/bevy"
|
|
license = "MIT OR Apache-2.0"
|
|
keywords = ["bevy"]
|
|
|
|
[features]
|
|
# Texture formats (require more than just image support)
|
|
basis-universal = ["bevy_image/basis-universal"]
|
|
dds = ["bevy_image/dds"]
|
|
exr = ["bevy_image/exr"]
|
|
hdr = ["bevy_image/hdr"]
|
|
ktx2 = ["dep:ktx2", "bevy_image/ktx2"]
|
|
|
|
multi_threaded = ["bevy_tasks/multi_threaded"]
|
|
|
|
shader_format_glsl = ["naga/glsl-in", "naga/wgsl-out", "naga_oil/glsl"]
|
|
shader_format_spirv = ["wgpu/spirv", "naga/spv-in", "naga/spv-out"]
|
|
shader_format_wesl = ["wesl"]
|
|
|
|
# Enable SPIR-V shader passthrough
|
|
spirv_shader_passthrough = ["wgpu/spirv"]
|
|
|
|
# Statically linked DXC shader compiler for DirectX 12
|
|
# TODO: When wgpu switches to DirectX 12 instead of Vulkan by default on windows, make this a default feature
|
|
statically-linked-dxc = ["wgpu/static-dxc"]
|
|
|
|
trace = ["profiling"]
|
|
tracing-tracy = []
|
|
ci_limits = []
|
|
webgl = ["wgpu/webgl"]
|
|
webgpu = ["wgpu/webgpu"]
|
|
detailed_trace = []
|
|
|
|
[dependencies]
|
|
# bevy
|
|
bevy_app = { path = "../bevy_app", version = "0.16.0-dev" }
|
|
bevy_asset = { path = "../bevy_asset", version = "0.16.0-dev" }
|
|
bevy_color = { path = "../bevy_color", version = "0.16.0-dev", features = [
|
|
"serialize",
|
|
"wgpu-types",
|
|
] }
|
|
bevy_derive = { path = "../bevy_derive", version = "0.16.0-dev" }
|
|
bevy_diagnostic = { path = "../bevy_diagnostic", version = "0.16.0-dev" }
|
|
bevy_ecs = { path = "../bevy_ecs", version = "0.16.0-dev" }
|
|
bevy_encase_derive = { path = "../bevy_encase_derive", version = "0.16.0-dev" }
|
|
bevy_math = { path = "../bevy_math", version = "0.16.0-dev" }
|
|
bevy_reflect = { path = "../bevy_reflect", version = "0.16.0-dev" }
|
|
bevy_render_macros = { path = "macros", version = "0.16.0-dev" }
|
|
bevy_time = { path = "../bevy_time", version = "0.16.0-dev" }
|
|
bevy_transform = { path = "../bevy_transform", version = "0.16.0-dev" }
|
|
bevy_window = { path = "../bevy_window", version = "0.16.0-dev" }
|
|
bevy_utils = { path = "../bevy_utils", version = "0.16.0-dev" }
|
|
bevy_tasks = { path = "../bevy_tasks", version = "0.16.0-dev" }
|
|
bevy_image = { path = "../bevy_image", version = "0.16.0-dev" }
|
|
bevy_mesh = { path = "../bevy_mesh", version = "0.16.0-dev" }
|
|
bevy_platform_support = { path = "../bevy_platform_support", version = "0.16.0-dev", default-features = false, features = [
|
|
"std",
|
|
"serialize",
|
|
] }
|
|
|
|
# rendering
|
|
image = { version = "0.25.2", default-features = false }
|
|
|
|
# misc
|
|
codespan-reporting = "0.11.0"
|
|
# `fragile-send-sync-non-atomic-wasm` feature means we can't use Wasm threads for rendering
|
|
# It is enabled for now to avoid having to do a significant overhaul of the renderer just for wasm.
|
|
# When the 'atomics' feature is enabled `fragile-send-sync-non-atomic` does nothing
|
|
# and Bevy instead wraps `wgpu` types to verify they are not used off their origin thread.
|
|
wgpu = { version = "24", default-features = false, features = [
|
|
"wgsl",
|
|
"dx12",
|
|
"metal",
|
|
"naga-ir",
|
|
"fragile-send-sync-non-atomic-wasm",
|
|
] }
|
|
naga = { version = "24", features = ["wgsl-in"] }
|
|
serde = { version = "1", features = ["derive"] }
|
|
bytemuck = { version = "1.5", features = ["derive", "must_cast"] }
|
|
downcast-rs = { version = "2", default-features = false, features = ["std"] }
|
|
thiserror = { version = "2", default-features = false }
|
|
derive_more = { version = "1", default-features = false, features = ["from"] }
|
|
futures-lite = "2.0.1"
|
|
ktx2 = { version = "0.3.0", optional = true }
|
|
encase = { version = "0.10", features = ["glam"] }
|
|
# For wgpu profiling using tracing. Use `RUST_LOG=info` to also capture the wgpu spans.
|
|
profiling = { version = "1", features = [
|
|
"profile-with-tracing",
|
|
], optional = true }
|
|
async-channel = "2.3.0"
|
|
nonmax = "0.5"
|
|
smallvec = { version = "1.11", features = ["const_new"] }
|
|
offset-allocator = "0.2"
|
|
variadics_please = "1.1"
|
|
tracing = { version = "0.1", default-features = false, features = ["std"] }
|
|
indexmap = { version = "2" }
|
|
fixedbitset = { version = "0.5" }
|
|
bitflags = "2"
|
|
wesl = { version = "0.1.0", optional = true }
|
|
|
|
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
|
|
# Omit the `glsl` feature in non-WebAssembly by default.
|
|
naga_oil = { version = "0.17", default-features = false, features = [
|
|
"test_shader",
|
|
] }
|
|
|
|
[dev-dependencies]
|
|
proptest = "1"
|
|
|
|
[target.'cfg(target_arch = "wasm32")'.dependencies]
|
|
naga_oil = "0.17"
|
|
js-sys = "0.3"
|
|
web-sys = { version = "0.3.67", features = [
|
|
'Blob',
|
|
'Document',
|
|
'Element',
|
|
'HtmlElement',
|
|
'Node',
|
|
'Url',
|
|
'Window',
|
|
] }
|
|
wasm-bindgen = "0.2"
|
|
# TODO: Assuming all wasm builds are for the browser. Require `no_std` support to break assumption.
|
|
bevy_app = { path = "../bevy_app", version = "0.16.0-dev", default-features = false, features = [
|
|
"web",
|
|
] }
|
|
bevy_tasks = { path = "../bevy_tasks", version = "0.16.0-dev", default-features = false, features = [
|
|
"web",
|
|
] }
|
|
bevy_platform_support = { path = "../bevy_platform_support", version = "0.16.0-dev", default-features = false, features = [
|
|
"web",
|
|
] }
|
|
bevy_reflect = { path = "../bevy_reflect", version = "0.16.0-dev", default-features = false, features = [
|
|
"web",
|
|
] }
|
|
|
|
[target.'cfg(all(target_arch = "wasm32", target_feature = "atomics"))'.dependencies]
|
|
send_wrapper = "0.6.0"
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[package.metadata.docs.rs]
|
|
rustdoc-args = ["-Zunstable-options", "--generate-link-to-definition"]
|
|
all-features = true
|