Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion crates/bevy_color/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ bevy_reflect = { path = "../bevy_reflect", version = "0.15.0-dev", features = [
bytemuck = { version = "1", features = ["derive"] }
serde = { version = "1.0", features = ["derive"], optional = true }
thiserror = "1.0"
wgpu-types = { version = "0.20", default-features = false, optional = true }
wgpu-types = { version = "22", default-features = false, optional = true }
encase = { version = "0.9", default-features = false }

[features]
Expand Down
11 changes: 5 additions & 6 deletions crates/bevy_render/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ zstd = ["ruzstd"]

trace = ["profiling"]
tracing-tracy = []
wgpu_trace = ["wgpu/trace"]
wgpu_trace = []
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wgpu_trace was temporarily removed gfx-rs/wgpu#5974. We should remove our feature for now too imo (and the corresponding docs we have referencing it).

Copy link
Contributor

@LikeLakers2 LikeLakers2 Aug 11, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi, I was browsing around and looking at Bevy's PRs, so please excuse me if I seem a bit out of place.

I assume that if the wgpu_trace feature is removed, it'll be re-added back eventually? If so, then I might recommend keeping the wgpu_trace feature, but have a note somewhere (in the docs? during compilation? as a compile error? etc.) that the feature does not currently work, linking to the wgpu issue you mentioned.

That said, if you actually mean to remove it permanently, then my suggestion would be nil.

(P.S. Personally, I don't see the use in this feature, compared to just saying "pull in wgpu and include the trace feature". But that's me - maybe bevy has the wgpu_trace feature for a reason I'm not aware of?)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm in favor of just removing it outright, but if we really wanted to keep it, putting in a compile error with a link to an issue seems like a good idea to me.

ci_limits = []
webgl = ["wgpu/webgl"]
webgpu = ["wgpu/webgpu"]
Expand Down Expand Up @@ -70,15 +70,14 @@ codespan-reporting = "0.11.0"
# 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 = "0.20", default-features = false, features = [
wgpu = { version = "22", default-features = false, features = [
"wgsl",
"dx12",
"metal",
"naga",
"naga-ir",
"fragile-send-sync-non-atomic-wasm",
] }
naga = { version = "0.20", features = ["wgsl-in"] }
naga = { version = "22", features = ["wgsl-in"] }
serde = { version = "1", features = ["derive"] }
bitflags = { version = "2.3", features = ["serde"] }
bytemuck = { version = "1.5", features = ["derive", "must_cast"] }
Expand All @@ -105,12 +104,12 @@ offset-allocator = "0.2"

[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
# Omit the `glsl` feature in non-WebAssembly by default.
naga_oil = { version = "0.14", default-features = false, features = [
naga_oil = { version = "0.15", default-features = false, features = [
"test_shader",
] }

[target.'cfg(target_arch = "wasm32")'.dependencies]
naga_oil = "0.14"
naga_oil = "0.15"
js-sys = "0.3"
web-sys = { version = "0.3.67", features = [
'Blob',
Expand Down
41 changes: 22 additions & 19 deletions crates/bevy_render/src/render_resource/pipeline_cache.rs
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ impl ShaderDefVal {

impl ShaderCache {
fn new(render_device: &RenderDevice, render_adapter: &RenderAdapter) -> Self {
let (capabilities, subgroup_stages) = get_capabilities(
let capabilities = get_capabilities(
render_device.features(),
render_adapter.get_downlevel_capabilities().flags,
);
Expand All @@ -183,7 +183,7 @@ impl ShaderCache {
#[cfg(not(debug_assertions))]
let composer = naga_oil::compose::Composer::non_validating();

let composer = composer.with_capabilities(capabilities, subgroup_stages);
let composer = composer.with_capabilities(capabilities);

Self {
composer,
Expand Down Expand Up @@ -742,6 +742,7 @@ impl PipelineCache {
let compilation_options = PipelineCompilationOptions {
constants: &std::collections::HashMap::new(),
zero_initialize_workgroup_memory: false,
vertex_pulling_transform: Default::default(),
};

let descriptor = RawRenderPipelineDescriptor {
Expand All @@ -767,6 +768,7 @@ impl PipelineCache {
// TODO: Should this be the same as the vertex compilation options?
compilation_options,
}),
cache: None,
};

Ok(Pipeline::RenderPipeline(
Expand Down Expand Up @@ -822,7 +824,9 @@ impl PipelineCache {
compilation_options: PipelineCompilationOptions {
constants: &std::collections::HashMap::new(),
zero_initialize_workgroup_memory: false,
vertex_pulling_transform: Default::default(),
},
cache: None,
};

Ok(Pipeline::ComputePipeline(
Expand Down Expand Up @@ -992,14 +996,9 @@ pub enum PipelineCacheError {

// TODO: This needs to be kept up to date with the capabilities in the `create_validator` function in wgpu-core
// https://github.com/gfx-rs/wgpu/blob/trunk/wgpu-core/src/device/mod.rs#L449
// We use a modified version of the `create_validator` function because `naga_oil`'s composer stores the capabilities
// and subgroup shader stages instead of a `Validator`.
// We also can't use that function because `wgpu-core` isn't included in WebGPU builds.
/// Get the device capabilities and subgroup support for use in `naga_oil`.
fn get_capabilities(
features: Features,
downlevel: DownlevelFlags,
) -> (Capabilities, naga::valid::ShaderStages) {
// We can't use the `wgpu-core` function to detect the device's capabilities because `wgpu-core` isn't included in WebGPU builds.
/// Get the device's capabilities for use in `naga_oil`.
fn get_capabilities(features: Features, downlevel: DownlevelFlags) -> Capabilities {
let mut capabilities = Capabilities::empty();
capabilities.set(
Capabilities::PUSH_CONSTANT,
Expand Down Expand Up @@ -1042,6 +1041,16 @@ fn get_capabilities(
Capabilities::SHADER_INT64,
features.contains(Features::SHADER_INT64),
);
capabilities.set(
Capabilities::SHADER_INT64_ATOMIC_MIN_MAX,
features.intersects(
Features::SHADER_INT64_ATOMIC_MIN_MAX | Features::SHADER_INT64_ATOMIC_ALL_OPS,
),
);
capabilities.set(
Capabilities::SHADER_INT64_ATOMIC_ALL_OPS,
features.contains(Features::SHADER_INT64_ATOMIC_ALL_OPS),
);
capabilities.set(
Capabilities::MULTISAMPLED_SHADING,
downlevel.contains(DownlevelFlags::MULTISAMPLED_SHADING),
Expand All @@ -1062,16 +1071,10 @@ fn get_capabilities(
Capabilities::SUBGROUP_BARRIER,
features.intersects(Features::SUBGROUP_BARRIER),
);

let mut subgroup_stages = naga::valid::ShaderStages::empty();
subgroup_stages.set(
naga::valid::ShaderStages::COMPUTE | naga::valid::ShaderStages::FRAGMENT,
features.contains(Features::SUBGROUP),
);
subgroup_stages.set(
naga::valid::ShaderStages::VERTEX,
capabilities.set(
Capabilities::SUBGROUP_VERTEX_STAGE,
features.contains(Features::SUBGROUP_VERTEX),
);

(capabilities, subgroup_stages)
capabilities
}
3 changes: 2 additions & 1 deletion crates/bevy_render/src/renderer/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -355,6 +355,7 @@ pub async fn initialize_renderer(
label: options.device_label.as_ref().map(AsRef::as_ref),
required_features: features,
required_limits: limits,
memory_hints: options.memory_hints.clone(),
},
trace_path,
)
Expand Down Expand Up @@ -431,7 +432,7 @@ impl<'w> RenderContext<'w> {
/// configured using the provided `descriptor`.
pub fn begin_tracked_render_pass<'a>(
&'a mut self,
descriptor: RenderPassDescriptor<'a, '_>,
descriptor: RenderPassDescriptor<'_>,
) -> TrackedRenderPass<'a> {
// Cannot use command_encoder() as we need to split the borrow on self
let command_encoder = self.command_encoder.get_or_insert_with(|| {
Expand Down
5 changes: 4 additions & 1 deletion crates/bevy_render/src/settings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use std::borrow::Cow;

pub use wgpu::{
Backends, Dx12Compiler, Features as WgpuFeatures, Gles3MinorVersion, InstanceFlags,
Limits as WgpuLimits, PowerPreference,
Limits as WgpuLimits, MemoryHints, PowerPreference,
};

/// Configures the priority used when automatically configuring the features/limits of `wgpu`.
Expand Down Expand Up @@ -50,6 +50,8 @@ pub struct WgpuSettings {
pub gles3_minor_version: Gles3MinorVersion,
/// These are for controlling WGPU's debug information to eg. enable validation and shader debug info in release builds.
pub instance_flags: InstanceFlags,
/// This hints to the WGPU device about the preferred memory allocation strategy.
pub memory_hints: MemoryHints,
}

impl Default for WgpuSettings {
Expand Down Expand Up @@ -113,6 +115,7 @@ impl Default for WgpuSettings {
dx12_shader_compiler: dx12_compiler,
gles3_minor_version,
instance_flags,
memory_hints: MemoryHints::default(),
}
}
}
Expand Down