diff --git a/.github/ISSUE_TEMPLATE/performance_regression.md b/.github/ISSUE_TEMPLATE/performance_regression.md index c1ff69775c..0f8cd00eeb 100644 --- a/.github/ISSUE_TEMPLATE/performance_regression.md +++ b/.github/ISSUE_TEMPLATE/performance_regression.md @@ -2,7 +2,7 @@ name: Performance Regression about: Bevy running slowly after upgrading? Report a performance regression. title: '' -labels: C-Bug, C-Performance, C-Regression, S-Needs-Triage +labels: C-Bug, C-Performance, P-Regression, S-Needs-Triage assignees: '' --- diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4d6ab6f153..3427abae06 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -72,8 +72,7 @@ jobs: run: cargo run -p ci -- lints miri: - # Explicitly use macOS 14 to take advantage of M1 chip. - runs-on: macos-14 + runs-on: macos-latest timeout-minutes: 60 steps: - uses: actions/checkout@v4 @@ -127,7 +126,7 @@ jobs: - name: Check Compile # See tools/ci/src/main.rs for the commands this runs run: cargo run -p ci -- compile - + check-compiles-no-std: runs-on: ubuntu-latest timeout-minutes: 30 @@ -254,8 +253,7 @@ jobs: echo 'You can find the extension here: https://marketplace.visualstudio.com/items?itemName=tekumara.typos-vscode' run-examples-macos-metal: - # Explicitly use macOS 14 to take advantage of M1 chip. - runs-on: macos-14 + runs-on: macos-latest timeout-minutes: 30 steps: - uses: actions/checkout@v4 @@ -301,7 +299,7 @@ jobs: with: name: example-run-macos path: example-run/ - + check-doc: runs-on: ubuntu-latest timeout-minutes: 30 @@ -316,7 +314,9 @@ jobs: ~/.cargo/git/db/ target/ key: ${{ runner.os }}-check-doc-${{ hashFiles('**/Cargo.toml') }} - - uses: dtolnay/rust-toolchain@stable + - uses: dtolnay/rust-toolchain@master + with: + toolchain: ${{ env.NIGHTLY_TOOLCHAIN }} - name: Install Linux dependencies uses: ./.github/actions/install-linux-deps with: @@ -327,7 +327,7 @@ jobs: run: cargo run -p ci -- doc env: CARGO_INCREMENTAL: 0 - RUSTFLAGS: "-C debuginfo=0" + RUSTFLAGS: "-C debuginfo=0 --cfg docsrs_dep" # This currently report a lot of false positives # Enable it again once it's fixed - https://github.com/bevyengine/bevy/issues/1983 # - name: Installs cargo-deadlinks diff --git a/.github/workflows/validation-jobs.yml b/.github/workflows/validation-jobs.yml index ba79f4c834..424177e37d 100644 --- a/.github/workflows/validation-jobs.yml +++ b/.github/workflows/validation-jobs.yml @@ -244,7 +244,7 @@ jobs: - name: First Wasm build run: | - cargo build --release --example ui --target wasm32-unknown-unknown + cargo build --release --example testbed_ui --target wasm32-unknown-unknown - name: Run examples shell: bash diff --git a/.github/workflows/weekly.yml b/.github/workflows/weekly.yml index 8c78f165fe..c824dcee87 100644 --- a/.github/workflows/weekly.yml +++ b/.github/workflows/weekly.yml @@ -75,7 +75,7 @@ jobs: run: cargo run -p ci -- doc env: CARGO_INCREMENTAL: 0 - RUSTFLAGS: "-C debuginfo=0" + RUSTFLAGS: "-C debuginfo=0 --cfg docsrs_dep" open-issue: name: Warn that weekly CI fails @@ -83,7 +83,7 @@ jobs: needs: [test, lint, check-compiles, check-doc] permissions: issues: write - # Use always() so the job doesn't get canceled if any other jobs fail + # Use always() so the job doesn't get canceled if any other jobs fail if: ${{ always() && contains(needs.*.result, 'failure') }} steps: - name: Create issue @@ -94,7 +94,7 @@ jobs: --jq '.[0].number') if [[ -n $previous_issue_number ]]; then gh issue comment $previous_issue_number \ - --body "Weekly pipeline still fails: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" + --body "Weekly pipeline still fails: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" else gh issue create \ --title "$TITLE" \ @@ -106,6 +106,6 @@ jobs: GH_REPO: ${{ github.repository }} TITLE: Main branch fails to compile on Rust beta. LABELS: C-Bug,S-Needs-Triage - BODY: | + BODY: | ## Weekly CI run has failed. [The offending run.](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) diff --git a/Cargo.toml b/Cargo.toml index 9e1ea7c57d..8ed4833a00 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -474,6 +474,7 @@ hyper = { version = "1", features = ["server", "http1"] } http-body-util = "0.1" anyhow = "1" macro_rules_attribute = "0.2" +accesskit = "0.17" [target.'cfg(not(target_family = "wasm"))'.dev-dependencies] smol = "2" @@ -3136,17 +3137,6 @@ description = "Demonstrates how to control the relative depth (z-position) of UI category = "UI (User Interface)" wasm = true -[[example]] -name = "ui" -path = "examples/ui/ui.rs" -doc-scrape-examples = true - -[package.metadata.example.ui] -name = "UI" -description = "Illustrates various features of Bevy UI" -category = "UI (User Interface)" -wasm = true - [[example]] name = "ui_scaling" path = "examples/ui/ui_scaling.rs" @@ -3857,6 +3847,13 @@ doc-scrape-examples = true [package.metadata.example.testbed_3d] hidden = true +[[example]] +name = "testbed_ui" +path = "examples/testbed/ui.rs" +doc-scrape-examples = true + +[package.metadata.example.testbed_ui] +hidden = true [[example]] name = "testbed_ui_layout_rounding" diff --git a/benches/benches/bevy_ecs/benches.rs b/benches/benches/bevy_ecs/benches.rs index af5a38c963..58300bda95 100644 --- a/benches/benches/bevy_ecs/benches.rs +++ b/benches/benches/bevy_ecs/benches.rs @@ -1,3 +1,5 @@ +#![expect(dead_code, reason = "Many fields are unused/unread as they are just for benchmarking purposes.")] + use criterion::criterion_main; mod components; diff --git a/benches/benches/bevy_ecs/components/add_remove.rs b/benches/benches/bevy_ecs/components/add_remove.rs index a41f8ed953..b381ccb434 100644 --- a/benches/benches/bevy_ecs/components/add_remove.rs +++ b/benches/benches/bevy_ecs/components/add_remove.rs @@ -1,6 +1,6 @@ -use bevy::prelude::*; +use bevy_ecs::prelude::*; -#[derive(Component)] +#[derive(Component, Clone)] struct A(f32); #[derive(Component)] struct B(f32); @@ -12,19 +12,18 @@ impl Benchmark { let mut world = World::default(); let entities = world - .spawn_batch((0..10000).map(|_| A(0.0))) - .collect::>(); - + .spawn_batch(core::iter::repeat(A(0.)).take(10000)) + .collect(); Self(world, entities) } pub fn run(&mut self) { for entity in &self.1 { - self.0.insert_one(*entity, B(0.0)).unwrap(); + self.0.entity_mut(*entity).insert(B(0.)); } for entity in &self.1 { - self.0.remove_one::(*entity).unwrap(); + self.0.entity_mut(*entity).remove::(); } } } diff --git a/benches/benches/bevy_ecs/components/mod.rs b/benches/benches/bevy_ecs/components/mod.rs index 592f40fba7..f696d33870 100644 --- a/benches/benches/bevy_ecs/components/mod.rs +++ b/benches/benches/bevy_ecs/components/mod.rs @@ -5,6 +5,7 @@ mod add_remove_big_table; mod add_remove_sparse_set; mod add_remove_table; mod add_remove_very_big_table; +mod add_remove; mod archetype_updates; mod insert_simple; mod insert_simple_unbatched; diff --git a/crates/bevy_a11y/src/lib.rs b/crates/bevy_a11y/src/lib.rs index 49943bd719..77ddf2073d 100644 --- a/crates/bevy_a11y/src/lib.rs +++ b/crates/bevy_a11y/src/lib.rs @@ -6,13 +6,18 @@ )] //! Accessibility for Bevy +//! +//! As of Bevy version 0.15 `accesskit` is no longer re-exported from this crate. +//! +//! If you need to use `accesskit`, you will need to add it as a separate dependency in your `Cargo.toml`. +//! +//! Make sure to use the same version of `accesskit` as Bevy. extern crate alloc; use alloc::sync::Arc; use core::sync::atomic::{AtomicBool, Ordering}; -pub use accesskit; use accesskit::Node; use bevy_app::Plugin; use bevy_derive::{Deref, DerefMut}; diff --git a/crates/bevy_animation/src/animation_curves.rs b/crates/bevy_animation/src/animation_curves.rs index 14ee7f24fc..fbe555ca3b 100644 --- a/crates/bevy_animation/src/animation_curves.rs +++ b/crates/bevy_animation/src/animation_curves.rs @@ -746,7 +746,15 @@ impl WeightsCurveEvaluator { None => { self.blend_register_blend_weight = Some(weight_to_blend); self.blend_register_morph_target_weights.clear(); - self.blend_register_morph_target_weights.extend(stack_iter); + + // In the additive case, the values pushed onto the blend register need + // to be scaled by the weight. + if additive { + self.blend_register_morph_target_weights + .extend(stack_iter.map(|m| m * weight_to_blend)); + } else { + self.blend_register_morph_target_weights.extend(stack_iter); + } } Some(ref mut current_weight) => { @@ -877,7 +885,9 @@ where } = self.stack.pop().unwrap(); match self.blend_register.take() { - None => self.blend_register = Some((value_to_blend, weight_to_blend)), + None => { + self.initialize_blend_register(value_to_blend, weight_to_blend, additive); + } Some((mut current_value, mut current_weight)) => { current_weight += weight_to_blend; @@ -912,6 +922,22 @@ where Ok(()) } + fn initialize_blend_register(&mut self, value: A, weight: f32, additive: bool) { + if additive { + let scaled_value = A::blend( + [BlendInput { + weight, + value, + additive: true, + }] + .into_iter(), + ); + self.blend_register = Some((scaled_value, weight)); + } else { + self.blend_register = Some((value, weight)); + } + } + fn push_blend_register( &mut self, weight: f32, diff --git a/crates/bevy_animation/src/graph.rs b/crates/bevy_animation/src/graph.rs index d3bf1cc52d..eb0589c539 100644 --- a/crates/bevy_animation/src/graph.rs +++ b/crates/bevy_animation/src/graph.rs @@ -217,9 +217,8 @@ pub enum AnimationNodeType { /// additively. /// /// The weights of all the children of this node are *not* normalized to - /// 1.0. Rather, the first child is used as a base, ignoring its weight, - /// while the others are multiplied by their respective weights and then - /// added in sequence to the base. + /// 1.0. Rather, each child is multiplied by its respective weight and + /// added in sequence. /// /// Add nodes are primarily useful for superimposing an animation for a /// portion of a rig on top of the main animation. For example, an add node diff --git a/crates/bevy_animation/src/lib.rs b/crates/bevy_animation/src/lib.rs old mode 100755 new mode 100644 diff --git a/crates/bevy_audio/src/audio.rs b/crates/bevy_audio/src/audio.rs index 58dc0e49a1..7c020a0333 100644 --- a/crates/bevy_audio/src/audio.rs +++ b/crates/bevy_audio/src/audio.rs @@ -264,6 +264,17 @@ where } } +impl AudioPlayer { + /// Creates a new [`AudioPlayer`] with the given [`Handle`]. + /// + /// For convenience reasons, this hard-codes the [`AudioSource`] type. If you want to + /// initialize an [`AudioPlayer`] with a different type, just initialize it directly using normal + /// tuple struct syntax. + pub fn new(source: Handle) -> Self { + Self(source) + } +} + /// Bundle for playing a sound. /// /// Insert this bundle onto an entity to trigger a sound source to begin playing. diff --git a/crates/bevy_audio/src/lib.rs b/crates/bevy_audio/src/lib.rs index 5120a341a1..1519987a4b 100644 --- a/crates/bevy_audio/src/lib.rs +++ b/crates/bevy_audio/src/lib.rs @@ -21,7 +21,7 @@ //! //! fn play_background_audio(asset_server: Res, mut commands: Commands) { //! commands.spawn(( -//! AudioPlayer::(asset_server.load("background_audio.ogg")), +//! AudioPlayer::new(asset_server.load("background_audio.ogg")), //! PlaybackSettings::LOOP, //! )); //! } diff --git a/crates/bevy_core_pipeline/src/auto_exposure/pipeline.rs b/crates/bevy_core_pipeline/src/auto_exposure/pipeline.rs index 410b7deb6d..87d6abd8cf 100644 --- a/crates/bevy_core_pipeline/src/auto_exposure/pipeline.rs +++ b/crates/bevy_core_pipeline/src/auto_exposure/pipeline.rs @@ -3,11 +3,11 @@ use super::compensation_curve::{ }; use bevy_asset::prelude::*; use bevy_ecs::prelude::*; +use bevy_image::Image; use bevy_render::{ globals::GlobalsUniform, render_resource::{binding_types::*, *}, renderer::RenderDevice, - texture::Image, view::ViewUniform, }; use core::num::NonZero; @@ -89,6 +89,7 @@ impl SpecializedComputePipeline for AutoExposurePipeline { AutoExposurePass::Average => "compute_average".into(), }, push_constant_ranges: vec![], + zero_initialize_workgroup_memory: false, } } } diff --git a/crates/bevy_core_pipeline/src/auto_exposure/settings.rs b/crates/bevy_core_pipeline/src/auto_exposure/settings.rs index 066e8d3c88..91bdf836ee 100644 --- a/crates/bevy_core_pipeline/src/auto_exposure/settings.rs +++ b/crates/bevy_core_pipeline/src/auto_exposure/settings.rs @@ -3,8 +3,9 @@ use core::ops::RangeInclusive; use super::compensation_curve::AutoExposureCompensationCurve; use bevy_asset::Handle; use bevy_ecs::{prelude::Component, reflect::ReflectComponent}; +use bevy_image::Image; use bevy_reflect::{std_traits::ReflectDefault, Reflect}; -use bevy_render::{extract_component::ExtractComponent, texture::Image}; +use bevy_render::extract_component::ExtractComponent; use bevy_utils::default; /// Component that enables auto exposure for an HDR-enabled 2d or 3d camera. diff --git a/crates/bevy_core_pipeline/src/blit/mod.rs b/crates/bevy_core_pipeline/src/blit/mod.rs index d11a99cbb3..96c0394f30 100644 --- a/crates/bevy_core_pipeline/src/blit/mod.rs +++ b/crates/bevy_core_pipeline/src/blit/mod.rs @@ -98,6 +98,7 @@ impl SpecializedRenderPipeline for BlitPipeline { ..Default::default() }, push_constant_ranges: Vec::new(), + zero_initialize_workgroup_memory: false, } } } diff --git a/crates/bevy_core_pipeline/src/bloom/downsampling_pipeline.rs b/crates/bevy_core_pipeline/src/bloom/downsampling_pipeline.rs index 28d55d360a..e3efe5cad8 100644 --- a/crates/bevy_core_pipeline/src/bloom/downsampling_pipeline.rs +++ b/crates/bevy_core_pipeline/src/bloom/downsampling_pipeline.rs @@ -127,6 +127,7 @@ impl SpecializedRenderPipeline for BloomDownsamplingPipeline { depth_stencil: None, multisample: MultisampleState::default(), push_constant_ranges: Vec::new(), + zero_initialize_workgroup_memory: false, } } } diff --git a/crates/bevy_core_pipeline/src/bloom/upsampling_pipeline.rs b/crates/bevy_core_pipeline/src/bloom/upsampling_pipeline.rs index 91a23310ef..b63a3eb633 100644 --- a/crates/bevy_core_pipeline/src/bloom/upsampling_pipeline.rs +++ b/crates/bevy_core_pipeline/src/bloom/upsampling_pipeline.rs @@ -124,6 +124,7 @@ impl SpecializedRenderPipeline for BloomUpsamplingPipeline { depth_stencil: None, multisample: MultisampleState::default(), push_constant_ranges: Vec::new(), + zero_initialize_workgroup_memory: false, } } } diff --git a/crates/bevy_core_pipeline/src/contrast_adaptive_sharpening/mod.rs b/crates/bevy_core_pipeline/src/contrast_adaptive_sharpening/mod.rs index 71c9cc2bb2..e76be196d5 100644 --- a/crates/bevy_core_pipeline/src/contrast_adaptive_sharpening/mod.rs +++ b/crates/bevy_core_pipeline/src/contrast_adaptive_sharpening/mod.rs @@ -6,6 +6,7 @@ use crate::{ use bevy_app::prelude::*; use bevy_asset::{load_internal_asset, Handle}; use bevy_ecs::{prelude::*, query::QueryItem}; +use bevy_image::BevyDefault as _; use bevy_reflect::{std_traits::ReflectDefault, Reflect}; use bevy_render::{ extract_component::{ExtractComponent, ExtractComponentPlugin, UniformComponentPlugin}, @@ -16,7 +17,6 @@ use bevy_render::{ *, }, renderer::RenderDevice, - texture::BevyDefault, view::{ExtractedView, ViewTarget}, Render, RenderApp, RenderSet, }; @@ -233,6 +233,7 @@ impl SpecializedRenderPipeline for CasPipeline { depth_stencil: None, multisample: MultisampleState::default(), push_constant_ranges: Vec::new(), + zero_initialize_workgroup_memory: false, } } } diff --git a/crates/bevy_core_pipeline/src/core_3d/mod.rs b/crates/bevy_core_pipeline/src/core_3d/mod.rs index ae88905bac..4a616226d1 100644 --- a/crates/bevy_core_pipeline/src/core_3d/mod.rs +++ b/crates/bevy_core_pipeline/src/core_3d/mod.rs @@ -65,14 +65,15 @@ pub const DEPTH_TEXTURE_SAMPLING_SUPPORTED: bool = true; use core::ops::Range; -use bevy_asset::{AssetId, UntypedAssetId}; -use bevy_color::LinearRgba; pub use camera_3d::*; pub use main_opaque_pass_3d_node::*; pub use main_transparent_pass_3d_node::*; use bevy_app::{App, Plugin, PostUpdate}; +use bevy_asset::{AssetId, UntypedAssetId}; +use bevy_color::LinearRgba; use bevy_ecs::{entity::EntityHashSet, prelude::*}; +use bevy_image::{BevyDefault, Image}; use bevy_math::FloatOrd; use bevy_render::sync_world::MainEntity; use bevy_render::{ @@ -91,7 +92,7 @@ use bevy_render::{ }, renderer::RenderDevice, sync_world::RenderEntity, - texture::{BevyDefault, ColorAttachment, Image, TextureCache}, + texture::{ColorAttachment, TextureCache}, view::{ExtractedView, ViewDepthTexture, ViewTarget}, Extract, ExtractSchedule, Render, RenderApp, RenderSet, }; diff --git a/crates/bevy_core_pipeline/src/deferred/copy_lighting_id.rs b/crates/bevy_core_pipeline/src/deferred/copy_lighting_id.rs index 4f5462d1f5..f645d22092 100644 --- a/crates/bevy_core_pipeline/src/deferred/copy_lighting_id.rs +++ b/crates/bevy_core_pipeline/src/deferred/copy_lighting_id.rs @@ -160,6 +160,7 @@ impl FromWorld for CopyDeferredLightingIdPipeline { }), multisample: MultisampleState::default(), push_constant_ranges: vec![], + zero_initialize_workgroup_memory: false, }); Self { diff --git a/crates/bevy_core_pipeline/src/dof/mod.rs b/crates/bevy_core_pipeline/src/dof/mod.rs index ccf54dd4d5..06cbbe3e9d 100644 --- a/crates/bevy_core_pipeline/src/dof/mod.rs +++ b/crates/bevy_core_pipeline/src/dof/mod.rs @@ -26,6 +26,7 @@ use bevy_ecs::{ system::{lifetimeless::Read, Commands, Query, Res, ResMut, Resource}, world::{FromWorld, World}, }; +use bevy_image::BevyDefault as _; use bevy_math::ops; use bevy_reflect::{prelude::ReflectDefault, Reflect}; use bevy_render::{ @@ -48,7 +49,7 @@ use bevy_render::{ renderer::{RenderContext, RenderDevice}, sync_component::SyncComponentPlugin, sync_world::RenderEntity, - texture::{BevyDefault, CachedTexture, TextureCache}, + texture::{CachedTexture, TextureCache}, view::{ prepare_view_targets, ExtractedView, Msaa, ViewDepthTexture, ViewTarget, ViewUniform, ViewUniformOffset, ViewUniforms, @@ -806,6 +807,7 @@ impl SpecializedRenderPipeline for DepthOfFieldPipeline { }, targets, }), + zero_initialize_workgroup_memory: false, } } } diff --git a/crates/bevy_core_pipeline/src/fxaa/mod.rs b/crates/bevy_core_pipeline/src/fxaa/mod.rs index a448444baf..547b597624 100644 --- a/crates/bevy_core_pipeline/src/fxaa/mod.rs +++ b/crates/bevy_core_pipeline/src/fxaa/mod.rs @@ -6,6 +6,7 @@ use crate::{ use bevy_app::prelude::*; use bevy_asset::{load_internal_asset, Handle}; use bevy_ecs::prelude::*; +use bevy_image::BevyDefault as _; use bevy_reflect::{std_traits::ReflectDefault, Reflect}; use bevy_render::{ extract_component::{ExtractComponent, ExtractComponentPlugin}, @@ -16,7 +17,6 @@ use bevy_render::{ *, }, renderer::RenderDevice, - texture::BevyDefault, view::{ExtractedView, ViewTarget}, Render, RenderApp, RenderSet, }; @@ -196,6 +196,7 @@ impl SpecializedRenderPipeline for FxaaPipeline { depth_stencil: None, multisample: MultisampleState::default(), push_constant_ranges: Vec::new(), + zero_initialize_workgroup_memory: false, } } } diff --git a/crates/bevy_core_pipeline/src/motion_blur/pipeline.rs b/crates/bevy_core_pipeline/src/motion_blur/pipeline.rs index cff26a9e22..8109beeb4e 100644 --- a/crates/bevy_core_pipeline/src/motion_blur/pipeline.rs +++ b/crates/bevy_core_pipeline/src/motion_blur/pipeline.rs @@ -5,6 +5,7 @@ use bevy_ecs::{ system::{Commands, Query, Res, ResMut, Resource}, world::FromWorld, }; +use bevy_image::BevyDefault as _; use bevy_render::{ globals::GlobalsUniform, render_resource::{ @@ -19,7 +20,6 @@ use bevy_render::{ TextureFormat, TextureSampleType, }, renderer::RenderDevice, - texture::BevyDefault, view::{ExtractedView, Msaa, ViewTarget}, }; @@ -141,6 +141,7 @@ impl SpecializedRenderPipeline for MotionBlurPipeline { depth_stencil: None, multisample: MultisampleState::default(), push_constant_ranges: vec![], + zero_initialize_workgroup_memory: false, } } } diff --git a/crates/bevy_core_pipeline/src/oit/resolve/mod.rs b/crates/bevy_core_pipeline/src/oit/resolve/mod.rs index 2fdb3944ac..101f7b1ed9 100644 --- a/crates/bevy_core_pipeline/src/oit/resolve/mod.rs +++ b/crates/bevy_core_pipeline/src/oit/resolve/mod.rs @@ -9,6 +9,7 @@ use bevy_ecs::{ entity::{EntityHashMap, EntityHashSet}, prelude::*, }; +use bevy_image::BevyDefault as _; use bevy_render::{ render_resource::{ binding_types::{storage_buffer_sized, texture_depth_2d, uniform_buffer}, @@ -18,7 +19,6 @@ use bevy_render::{ Shader, ShaderDefVal, ShaderStages, TextureFormat, }, renderer::{RenderAdapter, RenderDevice}, - texture::BevyDefault, view::{ExtractedView, ViewTarget, ViewUniform, ViewUniforms}, Render, RenderApp, RenderSet, }; @@ -208,6 +208,7 @@ fn specialize_oit_resolve_pipeline( depth_stencil: None, multisample: MultisampleState::default(), push_constant_ranges: vec![], + zero_initialize_workgroup_memory: false, } } diff --git a/crates/bevy_core_pipeline/src/post_process/mod.rs b/crates/bevy_core_pipeline/src/post_process/mod.rs index 79c41f990b..a633134b27 100644 --- a/crates/bevy_core_pipeline/src/post_process/mod.rs +++ b/crates/bevy_core_pipeline/src/post_process/mod.rs @@ -14,6 +14,7 @@ use bevy_ecs::{ system::{lifetimeless::Read, Commands, Query, Res, ResMut, Resource}, world::{FromWorld, World}, }; +use bevy_image::{BevyDefault, Image}; use bevy_reflect::{std_traits::ReflectDefault, Reflect}; use bevy_render::{ camera::Camera, @@ -32,7 +33,7 @@ use bevy_render::{ TextureDimension, TextureFormat, TextureSampleType, }, renderer::{RenderContext, RenderDevice, RenderQueue}, - texture::{BevyDefault, GpuImage, Image}, + texture::GpuImage, view::{ExtractedView, ViewTarget}, Render, RenderApp, RenderSet, }; @@ -344,6 +345,7 @@ impl SpecializedRenderPipeline for PostProcessingPipeline { depth_stencil: None, multisample: default(), push_constant_ranges: vec![], + zero_initialize_workgroup_memory: false, } } } diff --git a/crates/bevy_core_pipeline/src/skybox/mod.rs b/crates/bevy_core_pipeline/src/skybox/mod.rs index 59cfa90886..5ca7c3fce2 100644 --- a/crates/bevy_core_pipeline/src/skybox/mod.rs +++ b/crates/bevy_core_pipeline/src/skybox/mod.rs @@ -6,6 +6,7 @@ use bevy_ecs::{ schedule::IntoSystemConfigs, system::{Commands, Query, Res, ResMut, Resource}, }; +use bevy_image::{BevyDefault, Image}; use bevy_math::{Mat4, Quat}; use bevy_render::{ camera::Exposure, @@ -19,7 +20,7 @@ use bevy_render::{ *, }, renderer::RenderDevice, - texture::{BevyDefault, GpuImage, Image}, + texture::GpuImage, view::{ExtractedView, Msaa, ViewTarget, ViewUniform, ViewUniforms}, Render, RenderApp, RenderSet, }; @@ -233,6 +234,7 @@ impl SpecializedRenderPipeline for SkyboxPipeline { write_mask: ColorWrites::ALL, })], }), + zero_initialize_workgroup_memory: false, } } } diff --git a/crates/bevy_core_pipeline/src/skybox/prepass.rs b/crates/bevy_core_pipeline/src/skybox/prepass.rs index fb8df89b4b..c51e707808 100644 --- a/crates/bevy_core_pipeline/src/skybox/prepass.rs +++ b/crates/bevy_core_pipeline/src/skybox/prepass.rs @@ -105,6 +105,7 @@ impl SpecializedRenderPipeline for SkyboxPrepassPipeline { entry_point: "fragment".into(), targets: prepass_target_descriptors(key.normal_prepass, true, false), }), + zero_initialize_workgroup_memory: false, } } } diff --git a/crates/bevy_core_pipeline/src/smaa/mod.rs b/crates/bevy_core_pipeline/src/smaa/mod.rs index a41a77c806..ae294c19b2 100644 --- a/crates/bevy_core_pipeline/src/smaa/mod.rs +++ b/crates/bevy_core_pipeline/src/smaa/mod.rs @@ -30,6 +30,10 @@ //! //! [SMAA]: https://www.iryoku.com/smaa/ +use crate::{ + core_2d::graph::{Core2d, Node2d}, + core_3d::graph::{Core3d, Node3d}, +}; use bevy_app::{App, Plugin}; #[cfg(feature = "smaa_luts")] use bevy_asset::load_internal_binary_asset; @@ -44,6 +48,7 @@ use bevy_ecs::{ system::{lifetimeless::Read, Commands, Query, Res, ResMut, Resource}, world::{FromWorld, World}, }; +use bevy_image::{BevyDefault, Image}; use bevy_math::{vec4, Vec4}; use bevy_reflect::{std_traits::ReflectDefault, Reflect}; use bevy_render::{ @@ -67,24 +72,12 @@ use bevy_render::{ VertexState, }, renderer::{RenderContext, RenderDevice, RenderQueue}, - texture::{BevyDefault, CachedTexture, GpuImage, Image, TextureCache}, + texture::{CachedTexture, GpuImage, TextureCache}, view::{ExtractedView, ViewTarget}, Render, RenderApp, RenderSet, }; -#[cfg(feature = "smaa_luts")] -use bevy_render::{ - render_asset::RenderAssetUsages, - texture::{CompressedImageFormats, ImageFormat, ImageSampler, ImageType}, -}; use bevy_utils::prelude::default; -#[cfg(not(feature = "smaa_luts"))] -use crate::tonemapping::lut_placeholder; -use crate::{ - core_2d::graph::{Core2d, Node2d}, - core_3d::graph::{Core3d, Node3d}, -}; - /// The handle of the `smaa.wgsl` shader. const SMAA_SHADER_HANDLE: Handle = Handle::weak_from_u128(12247928498010601081); /// The handle of the area LUT, a KTX2 format texture that SMAA uses internally. @@ -306,11 +299,11 @@ impl Plugin for SmaaPlugin { #[cfg(all(debug_assertions, feature = "dds"))] "SMAAAreaLUT".to_owned(), bytes, - ImageType::Format(ImageFormat::Ktx2), - CompressedImageFormats::NONE, + bevy_image::ImageType::Format(bevy_image::ImageFormat::Ktx2), + bevy_image::CompressedImageFormats::NONE, false, - ImageSampler::Default, - RenderAssetUsages::RENDER_WORLD, + bevy_image::ImageSampler::Default, + bevy_asset::RenderAssetUsages::RENDER_WORLD, ) .expect("Failed to load SMAA area LUT") ); @@ -324,11 +317,11 @@ impl Plugin for SmaaPlugin { #[cfg(all(debug_assertions, feature = "dds"))] "SMAASearchLUT".to_owned(), bytes, - ImageType::Format(ImageFormat::Ktx2), - CompressedImageFormats::NONE, + bevy_image::ImageType::Format(bevy_image::ImageFormat::Ktx2), + bevy_image::CompressedImageFormats::NONE, false, - ImageSampler::Default, - RenderAssetUsages::RENDER_WORLD, + bevy_image::ImageSampler::Default, + bevy_asset::RenderAssetUsages::RENDER_WORLD, ) .expect("Failed to load SMAA search LUT") ); @@ -512,6 +505,7 @@ impl SpecializedRenderPipeline for SmaaEdgeDetectionPipeline { bias: default(), }), multisample: MultisampleState::default(), + zero_initialize_workgroup_memory: false, } } } @@ -571,6 +565,7 @@ impl SpecializedRenderPipeline for SmaaBlendingWeightCalculationPipeline { bias: default(), }), multisample: MultisampleState::default(), + zero_initialize_workgroup_memory: false, } } } @@ -607,6 +602,7 @@ impl SpecializedRenderPipeline for SmaaNeighborhoodBlendingPipeline { primitive: PrimitiveState::default(), depth_stencil: None, multisample: MultisampleState::default(), + zero_initialize_workgroup_memory: false, } } } diff --git a/crates/bevy_core_pipeline/src/taa/mod.rs b/crates/bevy_core_pipeline/src/taa/mod.rs index f8333fc538..e9f8f1ac3d 100644 --- a/crates/bevy_core_pipeline/src/taa/mod.rs +++ b/crates/bevy_core_pipeline/src/taa/mod.rs @@ -16,6 +16,7 @@ use bevy_ecs::{ system::{Commands, Query, Res, ResMut, Resource}, world::{FromWorld, World}, }; +use bevy_image::BevyDefault as _; use bevy_math::vec2; use bevy_reflect::{std_traits::ReflectDefault, Reflect}; use bevy_render::{ @@ -34,7 +35,7 @@ use bevy_render::{ renderer::{RenderContext, RenderDevice}, sync_component::SyncComponentPlugin, sync_world::RenderEntity, - texture::{BevyDefault, CachedTexture, TextureCache}, + texture::{CachedTexture, TextureCache}, view::{ExtractedView, Msaa, ViewTarget}, ExtractSchedule, MainWorld, Render, RenderApp, RenderSet, }; @@ -355,6 +356,7 @@ impl SpecializedRenderPipeline for TaaPipeline { depth_stencil: None, multisample: MultisampleState::default(), push_constant_ranges: Vec::new(), + zero_initialize_workgroup_memory: false, } } } diff --git a/crates/bevy_core_pipeline/src/tonemapping/mod.rs b/crates/bevy_core_pipeline/src/tonemapping/mod.rs index 972fd7836a..c6fb321725 100644 --- a/crates/bevy_core_pipeline/src/tonemapping/mod.rs +++ b/crates/bevy_core_pipeline/src/tonemapping/mod.rs @@ -2,6 +2,7 @@ use crate::fullscreen_vertex_shader::fullscreen_shader_vertex_state; use bevy_app::prelude::*; use bevy_asset::{load_internal_asset, Assets, Handle}; use bevy_ecs::prelude::*; +use bevy_image::{CompressedImageFormats, Image, ImageSampler, ImageType}; use bevy_reflect::{std_traits::ReflectDefault, Reflect}; use bevy_render::{ camera::Camera, @@ -13,7 +14,7 @@ use bevy_render::{ *, }, renderer::RenderDevice, - texture::{CompressedImageFormats, FallbackImage, GpuImage, Image, ImageSampler, ImageType}, + texture::{FallbackImage, GpuImage}, view::{ExtractedView, ViewTarget, ViewUniform}, Render, RenderApp, RenderSet, }; @@ -307,6 +308,7 @@ impl SpecializedRenderPipeline for TonemappingPipeline { depth_stencil: None, multisample: MultisampleState::default(), push_constant_ranges: Vec::new(), + zero_initialize_workgroup_memory: false, } } } @@ -432,14 +434,14 @@ pub fn get_lut_bind_group_layout_entries() -> [BindGroupLayoutEntryBuilder; 2] { // allow(dead_code) so it doesn't complain when the tonemapping_luts feature is disabled #[allow(dead_code)] fn setup_tonemapping_lut_image(bytes: &[u8], image_type: ImageType) -> Image { - let image_sampler = ImageSampler::Descriptor(bevy_render::texture::ImageSamplerDescriptor { + let image_sampler = ImageSampler::Descriptor(bevy_image::ImageSamplerDescriptor { label: Some("Tonemapping LUT sampler".to_string()), - address_mode_u: bevy_render::texture::ImageAddressMode::ClampToEdge, - address_mode_v: bevy_render::texture::ImageAddressMode::ClampToEdge, - address_mode_w: bevy_render::texture::ImageAddressMode::ClampToEdge, - mag_filter: bevy_render::texture::ImageFilterMode::Linear, - min_filter: bevy_render::texture::ImageFilterMode::Linear, - mipmap_filter: bevy_render::texture::ImageFilterMode::Linear, + address_mode_u: bevy_image::ImageAddressMode::ClampToEdge, + address_mode_v: bevy_image::ImageAddressMode::ClampToEdge, + address_mode_w: bevy_image::ImageAddressMode::ClampToEdge, + mag_filter: bevy_image::ImageFilterMode::Linear, + min_filter: bevy_image::ImageFilterMode::Linear, + mipmap_filter: bevy_image::ImageFilterMode::Linear, ..default() }); Image::from_buffer( diff --git a/crates/bevy_ecs/src/component.rs b/crates/bevy_ecs/src/component.rs index 4c0323f2a5..022b9def6b 100644 --- a/crates/bevy_ecs/src/component.rs +++ b/crates/bevy_ecs/src/component.rs @@ -1512,8 +1512,11 @@ impl<'a> TickCells<'a> { #[derive(Copy, Clone, Debug)] #[cfg_attr(feature = "bevy_reflect", derive(Reflect), reflect(Debug))] pub struct ComponentTicks { - pub(crate) added: Tick, - pub(crate) changed: Tick, + /// Tick recording the time this component or resource was added. + pub added: Tick, + + /// Tick recording the time this component or resource was most recently changed. + pub changed: Tick, } impl ComponentTicks { @@ -1531,19 +1534,8 @@ impl ComponentTicks { self.changed.is_newer_than(last_run, this_run) } - /// Returns the tick recording the time this component or resource was most recently changed. - #[inline] - pub fn last_changed_tick(&self) -> Tick { - self.changed - } - - /// Returns the tick recording the time this component or resource was added. - #[inline] - pub fn added_tick(&self) -> Tick { - self.added - } - - pub(crate) fn new(change_tick: Tick) -> Self { + /// Creates a new instance with the same change tick for `added` and `changed`. + pub fn new(change_tick: Tick) -> Self { Self { added: change_tick, changed: change_tick, diff --git a/crates/bevy_ecs/src/schedule/schedule.rs b/crates/bevy_ecs/src/schedule/schedule.rs index 5ec6621572..b00304ae14 100644 --- a/crates/bevy_ecs/src/schedule/schedule.rs +++ b/crates/bevy_ecs/src/schedule/schedule.rs @@ -1961,13 +1961,13 @@ pub enum ScheduleBuildError { #[display("System dependencies contain cycle(s).\n{_0}")] DependencyCycle(String), /// Tried to order a system (set) relative to a system set it belongs to. - #[display("`{0}` and `{_1}` have both `in_set` and `before`-`after` relationships (these might be transitive). This combination is unsolvable as a system cannot run before or after a set it belongs to.")] + #[display("`{_0}` and `{_1}` have both `in_set` and `before`-`after` relationships (these might be transitive). This combination is unsolvable as a system cannot run before or after a set it belongs to.")] CrossDependency(String, String), /// Tried to order system sets that share systems. - #[display("`{0}` and `{_1}` have a `before`-`after` relationship (which may be transitive) but share systems.")] + #[display("`{_0}` and `{_1}` have a `before`-`after` relationship (which may be transitive) but share systems.")] SetsHaveOrderButIntersect(String, String), /// Tried to order a system (set) relative to all instances of some system function. - #[display("Tried to order against `{0}` in a schedule that has more than one `{0}` instance. `{_0}` is a `SystemTypeSet` and cannot be used for ordering if ambiguous. Use a different set without this restriction.")] + #[display("Tried to order against `{_0}` in a schedule that has more than one `{_0}` instance. `{_0}` is a `SystemTypeSet` and cannot be used for ordering if ambiguous. Use a different set without this restriction.")] SystemTypeSetAmbiguity(String), /// Systems with conflicting access have indeterminate run order. /// diff --git a/crates/bevy_gizmos/Cargo.toml b/crates/bevy_gizmos/Cargo.toml index 5f79b93d3a..e880e985ff 100644 --- a/crates/bevy_gizmos/Cargo.toml +++ b/crates/bevy_gizmos/Cargo.toml @@ -20,6 +20,7 @@ bevy_sprite = { path = "../bevy_sprite", version = "0.15.0-dev", optional = true bevy_app = { path = "../bevy_app", version = "0.15.0-dev" } bevy_color = { path = "../bevy_color", version = "0.15.0-dev" } bevy_ecs = { path = "../bevy_ecs", version = "0.15.0-dev" } +bevy_image = { path = "../bevy_image", version = "0.15.0-dev" } bevy_math = { path = "../bevy_math", version = "0.15.0-dev" } bevy_asset = { path = "../bevy_asset", version = "0.15.0-dev" } bevy_render = { path = "../bevy_render", version = "0.15.0-dev", optional = true } diff --git a/crates/bevy_gizmos/src/pipeline_2d.rs b/crates/bevy_gizmos/src/pipeline_2d.rs index 995b59af22..9e122782f7 100644 --- a/crates/bevy_gizmos/src/pipeline_2d.rs +++ b/crates/bevy_gizmos/src/pipeline_2d.rs @@ -13,6 +13,7 @@ use bevy_ecs::{ system::{Query, Res, ResMut, Resource}, world::{FromWorld, World}, }; +use bevy_image::BevyDefault as _; use bevy_math::FloatOrd; use bevy_render::sync_world::MainEntity; use bevy_render::{ @@ -22,7 +23,6 @@ use bevy_render::{ ViewSortedRenderPhases, }, render_resource::*, - texture::BevyDefault, view::{ExtractedView, Msaa, RenderLayers, ViewTarget}, Render, RenderApp, RenderSet, }; @@ -161,6 +161,7 @@ impl SpecializedRenderPipeline for LineGizmoPipeline { }, label: Some("LineGizmo Pipeline 2D".into()), push_constant_ranges: vec![], + zero_initialize_workgroup_memory: false, } } } @@ -261,6 +262,7 @@ impl SpecializedRenderPipeline for LineJointGizmoPipeline { }, label: Some("LineJointGizmo Pipeline 2D".into()), push_constant_ranges: vec![], + zero_initialize_workgroup_memory: false, } } } diff --git a/crates/bevy_gizmos/src/pipeline_3d.rs b/crates/bevy_gizmos/src/pipeline_3d.rs index 6d16db4711..2d3f2bbd8d 100644 --- a/crates/bevy_gizmos/src/pipeline_3d.rs +++ b/crates/bevy_gizmos/src/pipeline_3d.rs @@ -17,6 +17,7 @@ use bevy_ecs::{ system::{Query, Res, ResMut, Resource}, world::{FromWorld, World}, }; +use bevy_image::BevyDefault as _; use bevy_pbr::{MeshPipeline, MeshPipelineKey, SetMeshViewBindGroup}; use bevy_render::sync_world::MainEntity; use bevy_render::{ @@ -26,7 +27,6 @@ use bevy_render::{ ViewSortedRenderPhases, }, render_resource::*, - texture::BevyDefault, view::{ExtractedView, Msaa, RenderLayers, ViewTarget}, Render, RenderApp, RenderSet, }; @@ -158,6 +158,7 @@ impl SpecializedRenderPipeline for LineGizmoPipeline { }, label: Some("LineGizmo Pipeline".into()), push_constant_ranges: vec![], + zero_initialize_workgroup_memory: false, } } } @@ -256,6 +257,7 @@ impl SpecializedRenderPipeline for LineJointGizmoPipeline { }, label: Some("LineJointGizmo Pipeline".into()), push_constant_ranges: vec![], + zero_initialize_workgroup_memory: false, } } } diff --git a/crates/bevy_gltf/src/lib.rs b/crates/bevy_gltf/src/lib.rs index 05d4c596f8..46f9ad3ae9 100644 --- a/crates/bevy_gltf/src/lib.rs +++ b/crates/bevy_gltf/src/lib.rs @@ -103,12 +103,12 @@ pub use loader::*; use bevy_app::prelude::*; use bevy_asset::{Asset, AssetApp, AssetPath, Handle}; use bevy_ecs::{prelude::Component, reflect::ReflectComponent}; +use bevy_image::CompressedImageFormats; use bevy_pbr::StandardMaterial; use bevy_reflect::{std_traits::ReflectDefault, Reflect, TypePath}; use bevy_render::{ mesh::{skinning::SkinnedMeshInverseBindposes, Mesh, MeshVertexAttribute}, renderer::RenderDevice, - texture::CompressedImageFormats, }; use bevy_scene::Scene; diff --git a/crates/bevy_gltf/src/loader.rs b/crates/bevy_gltf/src/loader.rs index 1cc747264e..d9d1571ce9 100644 --- a/crates/bevy_gltf/src/loader.rs +++ b/crates/bevy_gltf/src/loader.rs @@ -15,6 +15,10 @@ use bevy_ecs::{ world::World, }; use bevy_hierarchy::{BuildChildren, ChildBuild, WorldChildBuilder}; +use bevy_image::{ + CompressedImageFormats, Image, ImageAddressMode, ImageFilterMode, ImageLoaderSettings, + ImageSampler, ImageSamplerDescriptor, ImageType, TextureError, +}; use bevy_math::{Affine2, Mat4, Vec3}; use bevy_pbr::{ DirectionalLight, MeshMaterial3d, PointLight, SpotLight, StandardMaterial, UvChannel, @@ -31,10 +35,6 @@ use bevy_render::{ primitives::Aabb, render_asset::RenderAssetUsages, render_resource::{Face, PrimitiveTopology}, - texture::{ - CompressedImageFormats, Image, ImageAddressMode, ImageFilterMode, ImageLoaderSettings, - ImageSampler, ImageSamplerDescriptor, ImageType, TextureError, - }, view::Visibility, }; use bevy_scene::Scene; diff --git a/crates/bevy_gltf/src/vertex_attributes.rs b/crates/bevy_gltf/src/vertex_attributes.rs index c08d072f4c..1ecf477f7b 100644 --- a/crates/bevy_gltf/src/vertex_attributes.rs +++ b/crates/bevy_gltf/src/vertex_attributes.rs @@ -248,7 +248,7 @@ pub(crate) enum ConvertAttributeError { "Vertex attribute {_0} has format {_1:?} but expected {_3:?} for target attribute {_2}" )] WrongFormat(String, VertexFormat, String, VertexFormat), - #[display("{0} in accessor {_1}")] + #[display("{_0} in accessor {_1}")] AccessFailed(AccessFailed, usize), #[display("Unknown vertex attribute {_0}")] UnknownName(String), diff --git a/crates/bevy_hierarchy/src/lib.rs b/crates/bevy_hierarchy/src/lib.rs old mode 100755 new mode 100644 diff --git a/crates/bevy_image/src/dds.rs b/crates/bevy_image/src/dds.rs index 4ba311377d..f146f07c71 100644 --- a/crates/bevy_image/src/dds.rs +++ b/crates/bevy_image/src/dds.rs @@ -1,3 +1,5 @@ +//! [DirectDraw Surface](https://en.wikipedia.org/wiki/DirectDraw_Surface) functionality. + #[cfg(debug_assertions)] use bevy_utils::warn_once; use ddsfile::{Caps2, D3DFormat, Dds, DxgiFormat}; @@ -16,7 +18,8 @@ pub fn dds_buffer_to_image( is_srgb: bool, ) -> Result { let mut cursor = Cursor::new(buffer); - let dds = Dds::read(&mut cursor).expect("Failed to parse DDS file"); + let dds = Dds::read(&mut cursor) + .map_err(|error| TextureError::InvalidData(format!("Failed to parse DDS file: {error}")))?; let texture_format = dds_format_to_texture_format(&dds, is_srgb)?; if !supported_compressed_formats.supports(texture_format) { return Err(TextureError::UnsupportedTextureFormat(format!( diff --git a/crates/bevy_image/src/image.rs b/crates/bevy_image/src/image.rs index abf504536e..cfe3a768d6 100644 --- a/crates/bevy_image/src/image.rs +++ b/crates/bevy_image/src/image.rs @@ -14,6 +14,7 @@ use core::hash::Hash; use derive_more::derive::{Display, Error, From}; use serde::{Deserialize, Serialize}; use wgpu::{Extent3d, TextureDimension, TextureFormat, TextureViewDescriptor}; + pub trait BevyDefault { fn bevy_default() -> Self; } diff --git a/crates/bevy_image/src/lib.rs b/crates/bevy_image/src/lib.rs index ac5510e5e3..ce2e932826 100644 --- a/crates/bevy_image/src/lib.rs +++ b/crates/bevy_image/src/lib.rs @@ -2,6 +2,10 @@ #![allow(missing_docs, reason = "Not all docs are written yet, see #3492.")] #![allow(unsafe_code)] +pub mod prelude { + pub use crate::{BevyDefault as _, Image, ImageFormat, TextureError}; +} + mod image; pub use self::image::*; #[cfg(feature = "basis-universal")] diff --git a/crates/bevy_internal/src/lib.rs b/crates/bevy_internal/src/lib.rs index bc553af972..aa9ad4c830 100644 --- a/crates/bevy_internal/src/lib.rs +++ b/crates/bevy_internal/src/lib.rs @@ -37,6 +37,8 @@ pub use bevy_gizmos as gizmos; #[cfg(feature = "bevy_gltf")] pub use bevy_gltf as gltf; pub use bevy_hierarchy as hierarchy; +#[cfg(feature = "bevy_image")] +pub use bevy_image as image; pub use bevy_input as input; pub use bevy_log as log; pub use bevy_math as math; diff --git a/crates/bevy_internal/src/prelude.rs b/crates/bevy_internal/src/prelude.rs index bec80694fd..6d8830eb4d 100644 --- a/crates/bevy_internal/src/prelude.rs +++ b/crates/bevy_internal/src/prelude.rs @@ -6,6 +6,10 @@ pub use crate::{ MinimalPlugins, }; +#[doc(hidden)] +#[cfg(feature = "bevy_image")] +pub use crate::image::prelude::*; + pub use bevy_derive::{bevy_main, Deref, DerefMut}; #[doc(hidden)] diff --git a/crates/bevy_pbr/Cargo.toml b/crates/bevy_pbr/Cargo.toml index 5dde710843..4cad902a4c 100644 --- a/crates/bevy_pbr/Cargo.toml +++ b/crates/bevy_pbr/Cargo.toml @@ -37,6 +37,7 @@ bevy_color = { path = "../bevy_color", version = "0.15.0-dev" } bevy_core_pipeline = { path = "../bevy_core_pipeline", version = "0.15.0-dev" } bevy_derive = { path = "../bevy_derive", version = "0.15.0-dev" } bevy_ecs = { path = "../bevy_ecs", version = "0.15.0-dev" } +bevy_image = { path = "../bevy_image", version = "0.15.0-dev" } bevy_math = { path = "../bevy_math", version = "0.15.0-dev" } bevy_reflect = { path = "../bevy_reflect", version = "0.15.0-dev", features = [ "bevy", diff --git a/crates/bevy_pbr/src/deferred/mod.rs b/crates/bevy_pbr/src/deferred/mod.rs index bcb23a7048..67271a916f 100644 --- a/crates/bevy_pbr/src/deferred/mod.rs +++ b/crates/bevy_pbr/src/deferred/mod.rs @@ -5,6 +5,9 @@ use crate::{ ViewScreenSpaceReflectionsUniformOffset, TONEMAPPING_LUT_SAMPLER_BINDING_INDEX, TONEMAPPING_LUT_TEXTURE_BINDING_INDEX, }; +use crate::{ + MeshPipelineKey, ShadowFilteringMethod, ViewFogUniformOffset, ViewLightsUniformOffset, +}; use bevy_app::prelude::*; use bevy_asset::{load_internal_asset, Handle}; use bevy_core_pipeline::{ @@ -16,6 +19,7 @@ use bevy_core_pipeline::{ tonemapping::{DebandDither, Tonemapping}, }; use bevy_ecs::{prelude::*, query::QueryItem}; +use bevy_image::BevyDefault as _; use bevy_render::{ extract_component::{ ComponentUniforms, ExtractComponent, ExtractComponentPlugin, UniformComponentPlugin, @@ -23,15 +27,10 @@ use bevy_render::{ render_graph::{NodeRunError, RenderGraphApp, RenderGraphContext, ViewNode, ViewNodeRunner}, render_resource::{binding_types::uniform_buffer, *}, renderer::{RenderContext, RenderDevice}, - texture::BevyDefault, view::{ExtractedView, ViewTarget, ViewUniformOffset}, Render, RenderApp, RenderSet, }; -use crate::{ - MeshPipelineKey, ShadowFilteringMethod, ViewFogUniformOffset, ViewLightsUniformOffset, -}; - pub struct DeferredPbrLightingPlugin; pub const DEFERRED_LIGHTING_SHADER_HANDLE: Handle = @@ -390,6 +389,7 @@ impl SpecializedRenderPipeline for DeferredLightingLayout { }), multisample: MultisampleState::default(), push_constant_ranges: vec![], + zero_initialize_workgroup_memory: false, } } } diff --git a/crates/bevy_pbr/src/lib.rs b/crates/bevy_pbr/src/lib.rs index 559fa99dcc..7526f384e2 100644 --- a/crates/bevy_pbr/src/lib.rs +++ b/crates/bevy_pbr/src/lib.rs @@ -116,6 +116,7 @@ use bevy_app::prelude::*; use bevy_asset::{load_internal_asset, AssetApp, Assets, Handle}; use bevy_core_pipeline::core_3d::graph::{Core3d, Node3d}; use bevy_ecs::prelude::*; +use bevy_image::Image; use bevy_render::{ alpha::AlphaMode, camera::{ @@ -128,10 +129,11 @@ use bevy_render::{ render_graph::RenderGraph, render_resource::Shader, sync_component::SyncComponentPlugin, - texture::{GpuImage, Image}, + texture::GpuImage, view::{check_visibility, VisibilitySystems}, ExtractSchedule, Render, RenderApp, RenderSet, }; + use bevy_transform::TransformSystem; pub const PBR_TYPES_SHADER_HANDLE: Handle = Handle::weak_from_u128(1708015359337029744); diff --git a/crates/bevy_pbr/src/light_probe/environment_map.rs b/crates/bevy_pbr/src/light_probe/environment_map.rs index 4fff505427..6b47c9915a 100644 --- a/crates/bevy_pbr/src/light_probe/environment_map.rs +++ b/crates/bevy_pbr/src/light_probe/environment_map.rs @@ -51,6 +51,7 @@ use bevy_ecs::{ bundle::Bundle, component::Component, query::QueryItem, reflect::ReflectComponent, system::lifetimeless::Read, }; +use bevy_image::Image; use bevy_math::Quat; use bevy_reflect::{std_traits::ReflectDefault, Reflect}; use bevy_render::{ @@ -63,7 +64,7 @@ use bevy_render::{ TextureSampleType, TextureView, }, renderer::RenderDevice, - texture::{FallbackImage, GpuImage, Image}, + texture::{FallbackImage, GpuImage}, }; use core::{num::NonZero, ops::Deref}; diff --git a/crates/bevy_pbr/src/light_probe/irradiance_volume.rs b/crates/bevy_pbr/src/light_probe/irradiance_volume.rs index f43d84d4e7..bc8fc542fb 100644 --- a/crates/bevy_pbr/src/light_probe/irradiance_volume.rs +++ b/crates/bevy_pbr/src/light_probe/irradiance_volume.rs @@ -133,6 +133,7 @@ //! [Why ambient cubes?]: #why-ambient-cubes use bevy_ecs::{component::Component, reflect::ReflectComponent}; +use bevy_image::Image; use bevy_render::{ render_asset::RenderAssets, render_resource::{ @@ -140,7 +141,7 @@ use bevy_render::{ TextureSampleType, TextureView, }, renderer::RenderDevice, - texture::{FallbackImage, GpuImage, Image}, + texture::{FallbackImage, GpuImage}, }; use core::{num::NonZero, ops::Deref}; diff --git a/crates/bevy_pbr/src/light_probe/mod.rs b/crates/bevy_pbr/src/light_probe/mod.rs index 0cda05f055..cab462c280 100644 --- a/crates/bevy_pbr/src/light_probe/mod.rs +++ b/crates/bevy_pbr/src/light_probe/mod.rs @@ -12,6 +12,7 @@ use bevy_ecs::{ schedule::IntoSystemConfigs, system::{Commands, Local, Query, Res, ResMut, Resource}, }; +use bevy_image::Image; use bevy_math::{Affine3A, FloatOrd, Mat4, Vec3A, Vec4}; use bevy_reflect::{std_traits::ReflectDefault, Reflect}; use bevy_render::{ @@ -22,7 +23,7 @@ use bevy_render::{ renderer::{RenderDevice, RenderQueue}, settings::WgpuFeatures, sync_world::RenderEntity, - texture::{FallbackImage, GpuImage, Image}, + texture::{FallbackImage, GpuImage}, view::{ExtractedView, Visibility}, Extract, ExtractSchedule, Render, RenderApp, RenderSet, }; diff --git a/crates/bevy_pbr/src/lightmap/mod.rs b/crates/bevy_pbr/src/lightmap/mod.rs index 982f7214a8..0e0debc92e 100644 --- a/crates/bevy_pbr/src/lightmap/mod.rs +++ b/crates/bevy_pbr/src/lightmap/mod.rs @@ -39,6 +39,7 @@ use bevy_ecs::{ schedule::IntoSystemConfigs, system::{Query, Res, ResMut, Resource}, }; +use bevy_image::Image; use bevy_math::{uvec2, vec4, Rect, UVec2}; use bevy_reflect::{std_traits::ReflectDefault, Reflect}; use bevy_render::sync_world::MainEntityHashMap; @@ -46,7 +47,7 @@ use bevy_render::{ mesh::{Mesh, RenderMesh}, render_asset::RenderAssets, render_resource::Shader, - texture::{GpuImage, Image}, + texture::GpuImage, view::ViewVisibility, Extract, ExtractSchedule, RenderApp, }; diff --git a/crates/bevy_pbr/src/material.rs b/crates/bevy_pbr/src/material.rs index 916b5a4676..65d935226e 100644 --- a/crates/bevy_pbr/src/material.rs +++ b/crates/bevy_pbr/src/material.rs @@ -60,8 +60,9 @@ use core::{ /// ``` /// # use bevy_pbr::{Material, MeshMaterial3d}; /// # use bevy_ecs::prelude::*; +/// # use bevy_image::Image; /// # use bevy_reflect::TypePath; -/// # use bevy_render::{mesh::{Mesh, Mesh3d}, render_resource::{AsBindGroup, ShaderRef}, texture::Image}; +/// # use bevy_render::{mesh::{Mesh, Mesh3d}, render_resource::{AsBindGroup, ShaderRef}}; /// # use bevy_color::LinearRgba; /// # use bevy_color::palettes::basic::RED; /// # use bevy_asset::{Handle, AssetServer, Assets, Asset}; diff --git a/crates/bevy_pbr/src/meshlet/material_pipeline_prepare.rs b/crates/bevy_pbr/src/meshlet/material_pipeline_prepare.rs index b1b91e8cc5..06582133e1 100644 --- a/crates/bevy_pbr/src/meshlet/material_pipeline_prepare.rs +++ b/crates/bevy_pbr/src/meshlet/material_pipeline_prepare.rs @@ -200,6 +200,7 @@ pub fn prepare_material_meshlet_meshes_main_opaque_pass( entry_point: material_fragment.entry_point, targets: material_fragment.targets, }), + zero_initialize_workgroup_memory: false, }; let material_id = instance_manager.get_material_id(material_id.untyped()); @@ -353,6 +354,7 @@ pub fn prepare_material_meshlet_meshes_prepass( entry_point, targets: material_fragment.targets, }), + zero_initialize_workgroup_memory: false, }; let material_id = instance_manager.get_material_id(material_id.untyped()); diff --git a/crates/bevy_pbr/src/meshlet/pipelines.rs b/crates/bevy_pbr/src/meshlet/pipelines.rs index 0ee25bde6a..ab333e736c 100644 --- a/crates/bevy_pbr/src/meshlet/pipelines.rs +++ b/crates/bevy_pbr/src/meshlet/pipelines.rs @@ -76,6 +76,7 @@ impl FromWorld for MeshletPipelines { shader: MESHLET_FILL_CLUSTER_BUFFERS_SHADER_HANDLE, shader_defs: vec!["MESHLET_FILL_CLUSTER_BUFFERS_PASS".into()], entry_point: "fill_cluster_buffers".into(), + zero_initialize_workgroup_memory: false, }, ), @@ -92,6 +93,7 @@ impl FromWorld for MeshletPipelines { "MESHLET_FIRST_CULLING_PASS".into(), ], entry_point: "cull_clusters".into(), + zero_initialize_workgroup_memory: false, }), cull_second: pipeline_cache.queue_compute_pipeline(ComputePipelineDescriptor { @@ -107,6 +109,7 @@ impl FromWorld for MeshletPipelines { "MESHLET_SECOND_CULLING_PASS".into(), ], entry_point: "cull_clusters".into(), + zero_initialize_workgroup_memory: false, }), downsample_depth_first: pipeline_cache.queue_compute_pipeline( @@ -120,6 +123,7 @@ impl FromWorld for MeshletPipelines { shader: MESHLET_DOWNSAMPLE_DEPTH_SHADER_HANDLE, shader_defs: vec!["MESHLET_VISIBILITY_BUFFER_RASTER_PASS_OUTPUT".into()], entry_point: "downsample_depth_first".into(), + zero_initialize_workgroup_memory: false, }, ), @@ -134,6 +138,7 @@ impl FromWorld for MeshletPipelines { shader: MESHLET_DOWNSAMPLE_DEPTH_SHADER_HANDLE, shader_defs: vec!["MESHLET_VISIBILITY_BUFFER_RASTER_PASS_OUTPUT".into()], entry_point: "downsample_depth_second".into(), + zero_initialize_workgroup_memory: false, }, ), @@ -148,6 +153,7 @@ impl FromWorld for MeshletPipelines { shader: MESHLET_DOWNSAMPLE_DEPTH_SHADER_HANDLE, shader_defs: vec![], entry_point: "downsample_depth_first".into(), + zero_initialize_workgroup_memory: false, }, ), @@ -162,6 +168,7 @@ impl FromWorld for MeshletPipelines { shader: MESHLET_DOWNSAMPLE_DEPTH_SHADER_HANDLE, shader_defs: vec![], entry_point: "downsample_depth_second".into(), + zero_initialize_workgroup_memory: false, }, ), @@ -182,6 +189,7 @@ impl FromWorld for MeshletPipelines { .into(), ], entry_point: "rasterize_cluster".into(), + zero_initialize_workgroup_memory: false, }, ), @@ -203,6 +211,7 @@ impl FromWorld for MeshletPipelines { .into(), ], entry_point: "rasterize_cluster".into(), + zero_initialize_workgroup_memory: false, }, ), @@ -226,6 +235,7 @@ impl FromWorld for MeshletPipelines { .into(), ], entry_point: "rasterize_cluster".into(), + zero_initialize_workgroup_memory: false, }), visibility_buffer_hardware_raster: pipeline_cache.queue_render_pipeline( @@ -269,6 +279,7 @@ impl FromWorld for MeshletPipelines { write_mask: ColorWrites::empty(), })], }), + zero_initialize_workgroup_memory: false, }, ), @@ -309,6 +320,7 @@ impl FromWorld for MeshletPipelines { write_mask: ColorWrites::empty(), })], }), + zero_initialize_workgroup_memory: false, }, ), @@ -356,6 +368,7 @@ impl FromWorld for MeshletPipelines { write_mask: ColorWrites::empty(), })], }), + zero_initialize_workgroup_memory: false, }), resolve_depth: pipeline_cache.queue_render_pipeline(RenderPipelineDescriptor { @@ -381,6 +394,7 @@ impl FromWorld for MeshletPipelines { entry_point: "resolve_depth".into(), targets: vec![], }), + zero_initialize_workgroup_memory: false, }), resolve_depth_shadow_view: pipeline_cache.queue_render_pipeline( @@ -407,6 +421,7 @@ impl FromWorld for MeshletPipelines { entry_point: "resolve_depth".into(), targets: vec![], }), + zero_initialize_workgroup_memory: false, }, ), @@ -434,6 +449,7 @@ impl FromWorld for MeshletPipelines { entry_point: "resolve_material_depth".into(), targets: vec![], }), + zero_initialize_workgroup_memory: false, }, ), @@ -448,6 +464,7 @@ impl FromWorld for MeshletPipelines { shader: MESHLET_REMAP_1D_TO_2D_DISPATCH_SHADER_HANDLE, shader_defs: vec![], entry_point: "remap_dispatch".into(), + zero_initialize_workgroup_memory: false, }) }), } diff --git a/crates/bevy_pbr/src/prepass/mod.rs b/crates/bevy_pbr/src/prepass/mod.rs index 6fae9a60ac..8bd10f9678 100644 --- a/crates/bevy_pbr/src/prepass/mod.rs +++ b/crates/bevy_pbr/src/prepass/mod.rs @@ -571,6 +571,7 @@ where }, push_constant_ranges: vec![], label: Some("prepass_pipeline".into()), + zero_initialize_workgroup_memory: false, }; // This is a bit risky because it's possible to change something that would diff --git a/crates/bevy_pbr/src/render/gpu_preprocess.rs b/crates/bevy_pbr/src/render/gpu_preprocess.rs index ee28005a8c..2350b8c704 100644 --- a/crates/bevy_pbr/src/render/gpu_preprocess.rs +++ b/crates/bevy_pbr/src/render/gpu_preprocess.rs @@ -290,6 +290,7 @@ impl SpecializedComputePipeline for PreprocessPipeline { shader: MESH_PREPROCESS_SHADER_HANDLE, shader_defs, entry_point: "main".into(), + zero_initialize_workgroup_memory: false, } } } diff --git a/crates/bevy_pbr/src/render/mesh.rs b/crates/bevy_pbr/src/render/mesh.rs index aea88e0246..06a1de09e2 100644 --- a/crates/bevy_pbr/src/render/mesh.rs +++ b/crates/bevy_pbr/src/render/mesh.rs @@ -14,6 +14,7 @@ use bevy_ecs::{ query::ROQueryItem, system::{lifetimeless::*, SystemParamItem, SystemState}, }; +use bevy_image::{BevyDefault, ImageSampler, TextureFormatPixelInfo}; use bevy_math::{Affine3, Rect, UVec2, Vec3, Vec4}; use bevy_render::{ batching::{ @@ -32,7 +33,7 @@ use bevy_render::{ }, render_resource::*, renderer::{RenderDevice, RenderQueue}, - texture::{BevyDefault, DefaultImageSampler, ImageSampler, TextureFormatPixelInfo}, + texture::DefaultImageSampler, view::{ prepare_view_targets, GpuCulling, RenderVisibilityRanges, ViewTarget, ViewUniformOffset, ViewVisibility, VisibilityRange, @@ -2020,6 +2021,7 @@ impl SpecializedMeshPipeline for MeshPipeline { alpha_to_coverage_enabled, }, label: Some(label), + zero_initialize_workgroup_memory: false, }) } } diff --git a/crates/bevy_pbr/src/render/mesh_view_bindings.rs b/crates/bevy_pbr/src/render/mesh_view_bindings.rs index 159a87bd1c..bbf158564d 100644 --- a/crates/bevy_pbr/src/render/mesh_view_bindings.rs +++ b/crates/bevy_pbr/src/render/mesh_view_bindings.rs @@ -15,13 +15,14 @@ use bevy_ecs::{ system::{Commands, Query, Res, Resource}, world::{FromWorld, World}, }; +use bevy_image::BevyDefault as _; use bevy_math::Vec4; use bevy_render::{ globals::{GlobalsBuffer, GlobalsUniform}, render_asset::RenderAssets, render_resource::{binding_types::*, *}, renderer::RenderDevice, - texture::{BevyDefault, FallbackImage, FallbackImageMsaa, FallbackImageZero, GpuImage}, + texture::{FallbackImage, FallbackImageMsaa, FallbackImageZero, GpuImage}, view::{ Msaa, RenderVisibilityRanges, ViewUniform, ViewUniforms, VISIBILITY_RANGES_STORAGE_BUFFER_COUNT, diff --git a/crates/bevy_pbr/src/ssao/mod.rs b/crates/bevy_pbr/src/ssao/mod.rs index 42ac9978f6..366ac91e22 100644 --- a/crates/bevy_pbr/src/ssao/mod.rs +++ b/crates/bevy_pbr/src/ssao/mod.rs @@ -448,6 +448,7 @@ impl FromWorld for SsaoPipelines { shader: PREPROCESS_DEPTH_SHADER_HANDLE, shader_defs: Vec::new(), entry_point: "preprocess_depth".into(), + zero_initialize_workgroup_memory: false, }); let spatial_denoise_pipeline = @@ -461,6 +462,7 @@ impl FromWorld for SsaoPipelines { shader: SPATIAL_DENOISE_SHADER_HANDLE, shader_defs: Vec::new(), entry_point: "spatial_denoise".into(), + zero_initialize_workgroup_memory: false, }); Self { @@ -513,6 +515,7 @@ impl SpecializedComputePipeline for SsaoPipelines { shader: SSAO_SHADER_HANDLE, shader_defs, entry_point: "ssao".into(), + zero_initialize_workgroup_memory: false, } } } diff --git a/crates/bevy_pbr/src/ssr/mod.rs b/crates/bevy_pbr/src/ssr/mod.rs index 5852315f58..935e5f5b8f 100644 --- a/crates/bevy_pbr/src/ssr/mod.rs +++ b/crates/bevy_pbr/src/ssr/mod.rs @@ -23,6 +23,7 @@ use bevy_ecs::{ system::{lifetimeless::Read, Commands, Query, Res, ResMut, Resource}, world::{FromWorld, World}, }; +use bevy_image::BevyDefault as _; use bevy_reflect::{std_traits::ReflectDefault, Reflect}; use bevy_render::{ extract_component::{ExtractComponent, ExtractComponentPlugin}, @@ -36,7 +37,6 @@ use bevy_render::{ TextureFormat, TextureSampleType, }, renderer::{RenderContext, RenderDevice, RenderQueue}, - texture::BevyDefault as _, view::{ExtractedView, Msaa, ViewTarget, ViewUniformOffset}, Render, RenderApp, RenderSet, }; @@ -560,6 +560,7 @@ impl SpecializedRenderPipeline for ScreenSpaceReflectionsPipeline { primitive: default(), depth_stencil: None, multisample: default(), + zero_initialize_workgroup_memory: false, } } } diff --git a/crates/bevy_pbr/src/volumetric_fog/mod.rs b/crates/bevy_pbr/src/volumetric_fog/mod.rs index 7a94a1e135..5291276495 100644 --- a/crates/bevy_pbr/src/volumetric_fog/mod.rs +++ b/crates/bevy_pbr/src/volumetric_fog/mod.rs @@ -42,6 +42,7 @@ use bevy_ecs::{ bundle::Bundle, component::Component, reflect::ReflectComponent, schedule::IntoSystemConfigs as _, }; +use bevy_image::Image; use bevy_math::{ primitives::{Cuboid, Plane3d}, Vec2, Vec3, @@ -52,7 +53,6 @@ use bevy_render::{ render_graph::{RenderGraphApp, ViewNodeRunner}, render_resource::{Shader, SpecializedRenderPipelines}, sync_component::SyncComponentPlugin, - texture::Image, view::{InheritedVisibility, ViewVisibility, Visibility}, ExtractSchedule, Render, RenderApp, RenderSet, }; diff --git a/crates/bevy_pbr/src/volumetric_fog/render.rs b/crates/bevy_pbr/src/volumetric_fog/render.rs index d1dd500f44..76039bbbe4 100644 --- a/crates/bevy_pbr/src/volumetric_fog/render.rs +++ b/crates/bevy_pbr/src/volumetric_fog/render.rs @@ -16,6 +16,7 @@ use bevy_ecs::{ system::{lifetimeless::Read, Commands, Local, Query, Res, ResMut, Resource}, world::{FromWorld, World}, }; +use bevy_image::{BevyDefault, Image}; use bevy_math::{vec4, Mat3A, Mat4, Vec3, Vec3A, Vec4, Vec4Swizzles as _}; use bevy_render::{ mesh::{ @@ -37,7 +38,7 @@ use bevy_render::{ }, renderer::{RenderContext, RenderDevice, RenderQueue}, sync_world::RenderEntity, - texture::{BevyDefault as _, GpuImage, Image}, + texture::GpuImage, view::{ExtractedView, Msaa, ViewDepthTexture, ViewTarget, ViewUniformOffset}, Extract, }; @@ -600,6 +601,7 @@ impl SpecializedRenderPipeline for VolumetricFogPipeline { write_mask: ColorWrites::ALL, })], }), + zero_initialize_workgroup_memory: false, } } } diff --git a/crates/bevy_picking/src/lib.rs b/crates/bevy_picking/src/lib.rs index 6c8e05e7a4..945385e5f6 100644 --- a/crates/bevy_picking/src/lib.rs +++ b/crates/bevy_picking/src/lib.rs @@ -30,8 +30,8 @@ //! ## Expressive Events //! //! The events in this module (see [`events`]) cannot be listened to with normal `EventReader`s. -//! Instead, they are dispatched to *ovservers* attached to specific entities. When events are generated, they -//! bubble up the entity hierarchy starting from their target, until they reach the root or bubbling is haulted +//! Instead, they are dispatched to *observers* attached to specific entities. When events are generated, they +//! bubble up the entity hierarchy starting from their target, until they reach the root or bubbling is halted //! with a call to [`Trigger::propagate`](bevy_ecs::observer::Trigger::propagate). //! See [`Observer`] for details. //! @@ -73,8 +73,8 @@ //! //! #### Input Agnostic //! -//! Picking provides a generic Pointer abstracton, which is useful for reacting to many different -//! types of input devices. Pointers can be controlled with anything, whether its the included mouse +//! Picking provides a generic Pointer abstraction, which is useful for reacting to many different +//! types of input devices. Pointers can be controlled with anything, whether it's the included mouse //! or touch inputs, or a custom gamepad input system you write yourself to control a virtual pointer. //! //! ## Robustness diff --git a/crates/bevy_render/macros/src/as_bind_group.rs b/crates/bevy_render/macros/src/as_bind_group.rs index d0edd18dd6..8f871bd0e0 100644 --- a/crates/bevy_render/macros/src/as_bind_group.rs +++ b/crates/bevy_render/macros/src/as_bind_group.rs @@ -41,6 +41,7 @@ enum BindingState<'a> { pub fn derive_as_bind_group(ast: syn::DeriveInput) -> Result { let manifest = BevyManifest::default(); let render_path = manifest.get_path("bevy_render"); + let image_path = manifest.get_path("bevy_image"); let asset_path = manifest.get_path("bevy_asset"); let ecs_path = manifest.get_path("bevy_ecs"); @@ -264,7 +265,7 @@ pub fn derive_as_bind_group(ast: syn::DeriveInput) -> Result { binding_impls.insert(0, quote! { ( #binding_index, #render_path::render_resource::OwnedBindingResource::TextureView({ - let handle: Option<&#asset_path::Handle<#render_path::texture::Image>> = (&self.#field_name).into(); + let handle: Option<&#asset_path::Handle<#image_path::Image>> = (&self.#field_name).into(); if let Some(handle) = handle { images.get(handle).ok_or_else(|| #render_path::render_resource::AsBindGroupError::RetryNextUpdate)?.texture_view.clone() } else { @@ -305,7 +306,7 @@ pub fn derive_as_bind_group(ast: syn::DeriveInput) -> Result { ( #binding_index, #render_path::render_resource::OwnedBindingResource::TextureView({ - let handle: Option<&#asset_path::Handle<#render_path::texture::Image>> = (&self.#field_name).into(); + let handle: Option<&#asset_path::Handle<#image_path::Image>> = (&self.#field_name).into(); if let Some(handle) = handle { images.get(handle).ok_or_else(|| #render_path::render_resource::AsBindGroupError::RetryNextUpdate)?.texture_view.clone() } else { @@ -362,7 +363,7 @@ pub fn derive_as_bind_group(ast: syn::DeriveInput) -> Result { ( #binding_index, #render_path::render_resource::OwnedBindingResource::Sampler({ - let handle: Option<&#asset_path::Handle<#render_path::texture::Image>> = (&self.#field_name).into(); + let handle: Option<&#asset_path::Handle<#image_path::Image>> = (&self.#field_name).into(); if let Some(handle) = handle { let image = images.get(handle).ok_or_else(|| #render_path::render_resource::AsBindGroupError::RetryNextUpdate)?; diff --git a/crates/bevy_render/src/camera/camera.rs b/crates/bevy_render/src/camera/camera.rs index f00ebb5e9d..7e7036d1e8 100644 --- a/crates/bevy_render/src/camera/camera.rs +++ b/crates/bevy_render/src/camera/camera.rs @@ -4,7 +4,6 @@ use crate::view::RenderVisibleEntities; use crate::{ batching::gpu_preprocessing::GpuPreprocessingSupport, camera::{CameraProjection, ManualTextureViewHandle, ManualTextureViews}, - prelude::Image, primitives::Frustum, render_asset::RenderAssets, render_graph::{InternedRenderSubGraph, RenderSubGraph}, @@ -30,6 +29,7 @@ use bevy_ecs::{ system::{Commands, Query, Res, ResMut, Resource}, world::DeferredWorld, }; +use bevy_image::Image; use bevy_math::{ops, vec2, Dir3, Mat4, Ray3d, Rect, URect, UVec2, UVec4, Vec2, Vec3}; use bevy_reflect::prelude::*; use bevy_render_macros::ExtractComponent; diff --git a/crates/bevy_render/src/camera/manual_texture_view.rs b/crates/bevy_render/src/camera/manual_texture_view.rs index a1353b9d0f..11d82364a6 100644 --- a/crates/bevy_render/src/camera/manual_texture_view.rs +++ b/crates/bevy_render/src/camera/manual_texture_view.rs @@ -1,7 +1,6 @@ -use crate::{ - extract_resource::ExtractResource, render_resource::TextureView, texture::BevyDefault, -}; +use crate::{extract_resource::ExtractResource, render_resource::TextureView}; use bevy_ecs::{prelude::Component, reflect::ReflectComponent, system::Resource}; +use bevy_image::BevyDefault as _; use bevy_math::UVec2; use bevy_reflect::prelude::*; use bevy_utils::HashMap; diff --git a/crates/bevy_render/src/gpu_readback.rs b/crates/bevy_render/src/gpu_readback.rs index 434b4603ca..bb0092edf1 100644 --- a/crates/bevy_render/src/gpu_readback.rs +++ b/crates/bevy_render/src/gpu_readback.rs @@ -1,12 +1,11 @@ use crate::{ extract_component::ExtractComponentPlugin, - prelude::Image, render_asset::RenderAssets, render_resource::{Buffer, BufferUsages, Extent3d, ImageDataLayout, Texture, TextureFormat}, renderer::{render_system, RenderDevice}, storage::{GpuShaderStorageBuffer, ShaderStorageBuffer}, sync_world::MainEntity, - texture::{GpuImage, TextureFormatPixelInfo}, + texture::GpuImage, ExtractSchedule, MainWorld, Render, RenderApp, RenderSet, }; use async_channel::{Receiver, Sender}; @@ -21,6 +20,7 @@ use bevy_ecs::{ prelude::{Component, Resource, World}, system::{Query, Res}, }; +use bevy_image::{Image, TextureFormatPixelInfo}; use bevy_reflect::Reflect; use bevy_render_macros::ExtractComponent; use bevy_utils::{default, tracing::warn, HashMap}; diff --git a/crates/bevy_render/src/lib.rs b/crates/bevy_render/src/lib.rs index a682f2b954..c220470e48 100644 --- a/crates/bevy_render/src/lib.rs +++ b/crates/bevy_render/src/lib.rs @@ -61,12 +61,11 @@ pub mod prelude { }, render_resource::Shader, spatial_bundle::SpatialBundle, - texture::{Image, ImagePlugin, IntoDynamicImageError}, + texture::ImagePlugin, view::{InheritedVisibility, Msaa, ViewVisibility, Visibility, VisibilityBundle}, ExtractSchedule, }; } - use batching::gpu_preprocessing::BatchingPlugin; use bevy_ecs::schedule::ScheduleBuildSettings; use bevy_utils::prelude::default; diff --git a/crates/bevy_render/src/render_phase/mod.rs b/crates/bevy_render/src/render_phase/mod.rs index 5f05bf1870..f460a37d04 100644 --- a/crates/bevy_render/src/render_phase/mod.rs +++ b/crates/bevy_render/src/render_phase/mod.rs @@ -101,7 +101,7 @@ where /// /// Each bin corresponds to a single batch set. For unbatchable entities, /// prefer `unbatchable_values` instead. - pub(crate) batchable_mesh_values: HashMap>, + pub batchable_mesh_values: HashMap>, /// A list of `BinKey`s for unbatchable items. /// @@ -112,7 +112,7 @@ where /// The unbatchable bins. /// /// Each entity here is rendered in a separate drawcall. - pub(crate) unbatchable_mesh_values: HashMap, + pub unbatchable_mesh_values: HashMap, /// Items in the bin that aren't meshes at all. /// @@ -155,9 +155,9 @@ pub struct BinnedRenderPhaseBatch { } /// Information about the unbatchable entities in a bin. -pub(crate) struct UnbatchableBinnedEntities { +pub struct UnbatchableBinnedEntities { /// The entities. - pub(crate) entities: Vec<(Entity, MainEntity)>, + pub entities: Vec<(Entity, MainEntity)>, /// The GPU array buffer indices of each unbatchable binned entity. pub(crate) buffer_indices: UnbatchableBinnedEntityIndexSet, diff --git a/crates/bevy_render/src/render_resource/bind_group.rs b/crates/bevy_render/src/render_resource/bind_group.rs index 73e2579406..2753616aa0 100644 --- a/crates/bevy_render/src/render_resource/bind_group.rs +++ b/crates/bevy_render/src/render_resource/bind_group.rs @@ -78,7 +78,7 @@ impl Deref for BindGroup { /// ok to do "expensive" work here, such as creating a [`Buffer`] for a uniform. /// /// If for some reason a [`BindGroup`] cannot be created yet (for example, the [`Texture`](crate::render_resource::Texture) -/// for an [`Image`](crate::texture::Image) hasn't loaded yet), just return [`AsBindGroupError::RetryNextUpdate`], which signals that the caller +/// for an [`Image`](bevy_image::Image) hasn't loaded yet), just return [`AsBindGroupError::RetryNextUpdate`], which signals that the caller /// should retry again later. /// /// # Deriving @@ -87,7 +87,8 @@ impl Deref for BindGroup { /// what their binding type is, and what index they should be bound at: /// /// ``` -/// # use bevy_render::{render_resource::*, texture::Image}; +/// # use bevy_render::render_resource::*; +/// # use bevy_image::Image; /// # use bevy_color::LinearRgba; /// # use bevy_asset::Handle; /// # use bevy_render::storage::ShaderStorageBuffer; @@ -133,7 +134,7 @@ impl Deref for BindGroup { /// GPU resource, which will be bound as a texture in shaders. The field will be assumed to implement [`Into>>`]. In practice, /// most fields should be a [`Handle`](bevy_asset::Handle) or [`Option>`]. If the value of an [`Option>`] is /// [`None`], the [`crate::texture::FallbackImage`] resource will be used instead. This attribute can be used in conjunction with a `sampler` binding attribute -/// (with a different binding index) if a binding of the sampler for the [`Image`](crate::texture::Image) is also required. +/// (with a different binding index) if a binding of the sampler for the [`Image`](bevy_image::Image) is also required. /// /// | Arguments | Values | Default | /// |-----------------------|-------------------------------------------------------------------------|----------------------| @@ -161,7 +162,7 @@ impl Deref for BindGroup { /// resource, which will be bound as a sampler in shaders. The field will be assumed to implement [`Into>>`]. In practice, /// most fields should be a [`Handle`](bevy_asset::Handle) or [`Option>`]. If the value of an [`Option>`] is /// [`None`], the [`crate::texture::FallbackImage`] resource will be used instead. This attribute can be used in conjunction with a `texture` binding attribute -/// (with a different binding index) if a binding of the texture for the [`Image`](crate::texture::Image) is also required. +/// (with a different binding index) if a binding of the texture for the [`Image`](bevy_image::Image) is also required. /// /// | Arguments | Values | Default | /// |------------------------|-------------------------------------------------------------------------|------------------------| @@ -194,9 +195,10 @@ impl Deref for BindGroup { /// /// As mentioned above, [`Option>`] is also supported: /// ``` -/// # use bevy_render::{render_resource::AsBindGroup, texture::Image}; -/// # use bevy_color::LinearRgba; /// # use bevy_asset::Handle; +/// # use bevy_color::LinearRgba; +/// # use bevy_image::Image; +/// # use bevy_render::render_resource::AsBindGroup; /// #[derive(AsBindGroup)] /// struct CoolMaterial { /// #[uniform(0)] @@ -433,8 +435,9 @@ where #[cfg(test)] mod test { use super::*; - use crate::{self as bevy_render, prelude::Image}; + use crate as bevy_render; use bevy_asset::Handle; + use bevy_image::Image; #[test] fn texture_visibility() { diff --git a/crates/bevy_render/src/render_resource/pipeline.rs b/crates/bevy_render/src/render_resource/pipeline.rs index 6b70f93e86..be400a02e9 100644 --- a/crates/bevy_render/src/render_resource/pipeline.rs +++ b/crates/bevy_render/src/render_resource/pipeline.rs @@ -108,6 +108,9 @@ pub struct RenderPipelineDescriptor { pub multisample: MultisampleState, /// The compiled fragment stage, its entry point, and the color targets. pub fragment: Option, + /// Whether to zero-initialize workgroup memory by default. If you're not sure, set this to true. + /// If this is false, reading from workgroup variables before writing to them will result in garbage values. + pub zero_initialize_workgroup_memory: bool, } #[derive(Clone, Debug, Eq, PartialEq)] @@ -147,4 +150,7 @@ pub struct ComputePipelineDescriptor { /// The name of the entry point in the compiled shader. There must be a /// function with this name in the shader. pub entry_point: Cow<'static, str>, + /// Whether to zero-initialize workgroup memory by default. If you're not sure, set this to true. + /// If this is false, reading from workgroup variables before writing to them will result in garbage values. + pub zero_initialize_workgroup_memory: bool, } diff --git a/crates/bevy_render/src/render_resource/pipeline_cache.rs b/crates/bevy_render/src/render_resource/pipeline_cache.rs index c3ed894fc4..5396b720e3 100644 --- a/crates/bevy_render/src/render_resource/pipeline_cache.rs +++ b/crates/bevy_render/src/render_resource/pipeline_cache.rs @@ -669,6 +669,7 @@ impl PipelineCache { let device = self.device.clone(); let shader_cache = self.shader_cache.clone(); let layout_cache = self.layout_cache.clone(); + create_pipeline_task( async move { let mut shader_cache = shader_cache.lock().unwrap(); @@ -731,10 +732,10 @@ impl PipelineCache { ) }); - // TODO: Expose this somehow + // TODO: Expose the rest of this somehow let compilation_options = PipelineCompilationOptions { - constants: &std::collections::HashMap::new(), - zero_initialize_workgroup_memory: false, + constants: &default(), + zero_initialize_workgroup_memory: descriptor.zero_initialize_workgroup_memory, }; let descriptor = RawRenderPipelineDescriptor { @@ -779,6 +780,7 @@ impl PipelineCache { let device = self.device.clone(); let shader_cache = self.shader_cache.clone(); let layout_cache = self.layout_cache.clone(); + create_pipeline_task( async move { let mut shader_cache = shader_cache.lock().unwrap(); @@ -812,10 +814,11 @@ impl PipelineCache { layout: layout.as_ref().map(|layout| -> &PipelineLayout { layout }), module: &compute_module, entry_point: Some(&descriptor.entry_point), - // TODO: Expose this somehow + // TODO: Expose the rest of this somehow compilation_options: PipelineCompilationOptions { - constants: &std::collections::HashMap::new(), - zero_initialize_workgroup_memory: false, + constants: &default(), + zero_initialize_workgroup_memory: descriptor + .zero_initialize_workgroup_memory, }, cache: None, }; diff --git a/crates/bevy_render/src/texture/mod.rs b/crates/bevy_render/src/texture/mod.rs index 351a356be2..3671b7a0c8 100644 --- a/crates/bevy_render/src/texture/mod.rs +++ b/crates/bevy_render/src/texture/mod.rs @@ -4,18 +4,11 @@ mod texture_attachment; mod texture_cache; pub use crate::render_resource::DefaultImageSampler; -#[cfg(feature = "exr")] -pub use bevy_image::ExrTextureLoader; -#[cfg(feature = "hdr")] -pub use bevy_image::HdrTextureLoader; -pub use bevy_image::{ - BevyDefault, CompressedImageFormats, FileTextureError, Image, ImageAddressMode, - ImageFilterMode, ImageFormat, ImageFormatSetting, ImageLoader, ImageLoaderError, - ImageLoaderSettings, ImageSampler, ImageSamplerDescriptor, ImageType, IntoDynamicImageError, - TextureError, TextureFormatPixelInfo, -}; #[cfg(feature = "basis-universal")] -pub use bevy_image::{CompressedImageSaver, CompressedImageSaverError}; +use bevy_image::CompressedImageSaver; +#[cfg(feature = "hdr")] +use bevy_image::HdrTextureLoader; +use bevy_image::{CompressedImageFormats, Image, ImageLoader, ImageSamplerDescriptor}; pub use fallback_image::*; pub use gpu_image::*; pub use texture_attachment::*; @@ -39,7 +32,7 @@ pub const TRANSPARENT_IMAGE_HANDLE: Handle = // TODO: replace Texture names with Image names? /// Adds the [`Image`] as an asset and makes sure that they are extracted and prepared for the GPU. pub struct ImagePlugin { - /// The default image sampler to use when [`ImageSampler`] is set to `Default`. + /// The default image sampler to use when [`bevy_image::ImageSampler`] is set to `Default`. pub default_sampler: ImageSamplerDescriptor, } @@ -69,7 +62,7 @@ impl Plugin for ImagePlugin { fn build(&self, app: &mut App) { #[cfg(feature = "exr")] { - app.init_asset_loader::(); + app.init_asset_loader::(); } #[cfg(feature = "hdr")] diff --git a/crates/bevy_render/src/view/mod.rs b/crates/bevy_render/src/view/mod.rs index 2e306d610f..572a1db7b8 100644 --- a/crates/bevy_render/src/view/mod.rs +++ b/crates/bevy_render/src/view/mod.rs @@ -18,8 +18,8 @@ use crate::{ render_resource::{DynamicUniformBuffer, ShaderType, Texture, TextureView}, renderer::{RenderDevice, RenderQueue}, texture::{ - BevyDefault, CachedTexture, ColorAttachment, DepthAttachment, GpuImage, - OutputColorAttachment, TextureCache, + CachedTexture, ColorAttachment, DepthAttachment, GpuImage, OutputColorAttachment, + TextureCache, }, Render, RenderApp, RenderSet, }; @@ -28,6 +28,7 @@ use bevy_app::{App, Plugin}; use bevy_color::LinearRgba; use bevy_derive::{Deref, DerefMut}; use bevy_ecs::prelude::*; +use bevy_image::BevyDefault as _; use bevy_math::{mat3, vec2, vec3, Mat3, Mat4, UVec4, Vec2, Vec3, Vec4, Vec4Swizzles}; use bevy_reflect::{std_traits::ReflectDefault, Reflect}; use bevy_render_macros::ExtractComponent; diff --git a/crates/bevy_render/src/view/window/screenshot.rs b/crates/bevy_render/src/view/window/screenshot.rs index 38606a9b77..ad03ca0920 100644 --- a/crates/bevy_render/src/view/window/screenshot.rs +++ b/crates/bevy_render/src/view/window/screenshot.rs @@ -2,7 +2,7 @@ use super::ExtractedWindows; use crate::{ camera::{ManualTextureViewHandle, ManualTextureViews, NormalizedRenderTarget, RenderTarget}, gpu_readback, - prelude::{Image, Shader}, + prelude::Shader, render_asset::{RenderAssetUsages, RenderAssets}, render_resource::{ binding_types::texture_2d, BindGroup, BindGroupEntries, BindGroupLayout, @@ -11,7 +11,7 @@ use crate::{ SpecializedRenderPipelines, Texture, TextureUsages, TextureView, VertexState, }, renderer::RenderDevice, - texture::{GpuImage, OutputColorAttachment, TextureFormatPixelInfo}, + texture::{GpuImage, OutputColorAttachment}, view::{prepare_view_attachments, prepare_view_targets, ViewTargetAttachments, WindowSurfaces}, ExtractSchedule, MainWorld, Render, RenderApp, RenderSet, }; @@ -23,6 +23,7 @@ use bevy_ecs::{ entity::EntityHashMap, event::event_update_system, prelude::*, system::SystemState, }; use bevy_hierarchy::DespawnRecursiveExt; +use bevy_image::{Image, TextureFormatPixelInfo}; use bevy_reflect::Reflect; use bevy_tasks::AsyncComputeTaskPool; use bevy_utils::{ @@ -496,6 +497,7 @@ impl SpecializedRenderPipeline for ScreenshotToScreenPipeline { })], }), push_constant_ranges: Vec::new(), + zero_initialize_workgroup_memory: false, } } } diff --git a/crates/bevy_sprite/Cargo.toml b/crates/bevy_sprite/Cargo.toml index 59ee9b8fe1..0709eead67 100644 --- a/crates/bevy_sprite/Cargo.toml +++ b/crates/bevy_sprite/Cargo.toml @@ -22,6 +22,7 @@ bevy_asset = { path = "../bevy_asset", version = "0.15.0-dev" } bevy_color = { path = "../bevy_color", version = "0.15.0-dev" } bevy_core_pipeline = { path = "../bevy_core_pipeline", version = "0.15.0-dev" } bevy_ecs = { path = "../bevy_ecs", version = "0.15.0-dev" } +bevy_image = { path = "../bevy_image", version = "0.15.0-dev" } bevy_math = { path = "../bevy_math", version = "0.15.0-dev" } bevy_picking = { path = "../bevy_picking", version = "0.15.0-dev", optional = true } bevy_reflect = { path = "../bevy_reflect", version = "0.15.0-dev", features = [ diff --git a/crates/bevy_sprite/src/dynamic_texture_atlas_builder.rs b/crates/bevy_sprite/src/dynamic_texture_atlas_builder.rs index 879a9af3a4..4c53e321ae 100644 --- a/crates/bevy_sprite/src/dynamic_texture_atlas_builder.rs +++ b/crates/bevy_sprite/src/dynamic_texture_atlas_builder.rs @@ -1,8 +1,9 @@ use crate::TextureAtlasLayout; +use bevy_image::{Image, TextureFormatPixelInfo}; use bevy_math::{URect, UVec2}; use bevy_render::{ render_asset::{RenderAsset, RenderAssetUsages}, - texture::{GpuImage, Image, TextureFormatPixelInfo}, + texture::GpuImage, }; use guillotiere::{size2, Allocation, AtlasAllocator}; diff --git a/crates/bevy_sprite/src/lib.rs b/crates/bevy_sprite/src/lib.rs index 265be52209..8ea962eec2 100644 --- a/crates/bevy_sprite/src/lib.rs +++ b/crates/bevy_sprite/src/lib.rs @@ -51,13 +51,13 @@ use bevy_app::prelude::*; use bevy_asset::{load_internal_asset, AssetApp, Assets, Handle}; use bevy_core_pipeline::core_2d::Transparent2d; use bevy_ecs::{prelude::*, query::QueryItem}; +use bevy_image::Image; use bevy_render::{ extract_component::{ExtractComponent, ExtractComponentPlugin}, mesh::{Mesh, Mesh2d, MeshAabb}, primitives::Aabb, render_phase::AddRenderCommand, render_resource::{Shader, SpecializedRenderPipelines}, - texture::Image, view::{check_visibility, NoFrustumCulling, VisibilitySystems}, ExtractSchedule, Render, RenderApp, RenderSet, }; diff --git a/crates/bevy_sprite/src/mesh2d/color_material.rs b/crates/bevy_sprite/src/mesh2d/color_material.rs index 3b4ce76416..8c3267c40b 100644 --- a/crates/bevy_sprite/src/mesh2d/color_material.rs +++ b/crates/bevy_sprite/src/mesh2d/color_material.rs @@ -4,13 +4,10 @@ use crate::{AlphaMode2d, Material2d, Material2dPlugin, MaterialMesh2dBundle}; use bevy_app::{App, Plugin}; use bevy_asset::{load_internal_asset, Asset, AssetApp, Assets, Handle}; use bevy_color::{Alpha, Color, ColorToComponents, LinearRgba}; +use bevy_image::Image; use bevy_math::Vec4; use bevy_reflect::prelude::*; -use bevy_render::{ - render_asset::RenderAssets, - render_resource::*, - texture::{GpuImage, Image}, -}; +use bevy_render::{render_asset::RenderAssets, render_resource::*, texture::GpuImage}; pub const COLOR_MATERIAL_SHADER_HANDLE: Handle = Handle::weak_from_u128(3253086872234592509); diff --git a/crates/bevy_sprite/src/mesh2d/material.rs b/crates/bevy_sprite/src/mesh2d/material.rs index cfef74be39..4eb064de20 100644 --- a/crates/bevy_sprite/src/mesh2d/material.rs +++ b/crates/bevy_sprite/src/mesh2d/material.rs @@ -58,8 +58,9 @@ use derive_more::derive::From; /// ``` /// # use bevy_sprite::{Material2d, MeshMaterial2d}; /// # use bevy_ecs::prelude::*; +/// # use bevy_image::Image; /// # use bevy_reflect::TypePath; -/// # use bevy_render::{mesh::{Mesh, Mesh2d}, render_resource::{AsBindGroup, ShaderRef}, texture::Image}; +/// # use bevy_render::{mesh::{Mesh, Mesh2d}, render_resource::{AsBindGroup, ShaderRef}}; /// # use bevy_color::LinearRgba; /// # use bevy_color::palettes::basic::RED; /// # use bevy_asset::{Handle, AssetServer, Assets, Asset}; diff --git a/crates/bevy_sprite/src/mesh2d/mesh.rs b/crates/bevy_sprite/src/mesh2d/mesh.rs index fd65b19d4a..bc67c75aa5 100644 --- a/crates/bevy_sprite/src/mesh2d/mesh.rs +++ b/crates/bevy_sprite/src/mesh2d/mesh.rs @@ -14,8 +14,8 @@ use bevy_ecs::{ query::ROQueryItem, system::{lifetimeless::*, SystemParamItem, SystemState}, }; +use bevy_image::{BevyDefault, Image, ImageSampler, TextureFormatPixelInfo}; use bevy_math::{Affine3, Vec4}; -use bevy_render::sync_world::{MainEntity, MainEntityHashMap}; use bevy_render::{ batching::{ gpu_preprocessing::IndirectParameters, @@ -34,10 +34,8 @@ use bevy_render::{ render_phase::{PhaseItem, RenderCommand, RenderCommandResult, TrackedRenderPass}, render_resource::{binding_types::uniform_buffer, *}, renderer::{RenderDevice, RenderQueue}, - texture::{ - BevyDefault, DefaultImageSampler, FallbackImage, GpuImage, Image, ImageSampler, - TextureFormatPixelInfo, - }, + sync_world::{MainEntity, MainEntityHashMap}, + texture::{DefaultImageSampler, FallbackImage, GpuImage}, view::{ ExtractedView, ViewTarget, ViewUniform, ViewUniformOffset, ViewUniforms, ViewVisibility, }, @@ -674,6 +672,7 @@ impl SpecializedMeshPipeline for Mesh2dPipeline { alpha_to_coverage_enabled: false, }, label: Some(label.into()), + zero_initialize_workgroup_memory: false, }) } } diff --git a/crates/bevy_sprite/src/picking_backend.rs b/crates/bevy_sprite/src/picking_backend.rs index 55c06a8ec9..ad2afc33d1 100644 --- a/crates/bevy_sprite/src/picking_backend.rs +++ b/crates/bevy_sprite/src/picking_backend.rs @@ -8,6 +8,7 @@ use crate::{Sprite, TextureAtlasLayout}; use bevy_app::prelude::*; use bevy_asset::prelude::*; use bevy_ecs::prelude::*; +use bevy_image::Image; use bevy_math::{prelude::*, FloatExt, FloatOrd}; use bevy_picking::backend::prelude::*; use bevy_render::prelude::*; diff --git a/crates/bevy_sprite/src/render/mod.rs b/crates/bevy_sprite/src/render/mod.rs index ac55d47cce..9ef692452f 100644 --- a/crates/bevy_sprite/src/render/mod.rs +++ b/crates/bevy_sprite/src/render/mod.rs @@ -18,6 +18,7 @@ use bevy_ecs::{ query::ROQueryItem, system::{lifetimeless::*, SystemParamItem, SystemState}, }; +use bevy_image::{BevyDefault, Image, ImageSampler, TextureFormatPixelInfo}; use bevy_math::{Affine3A, FloatOrd, Quat, Rect, Vec2, Vec4}; use bevy_render::sync_world::MainEntity; use bevy_render::view::RenderVisibleEntities; @@ -33,10 +34,7 @@ use bevy_render::{ }, renderer::{RenderDevice, RenderQueue}, sync_world::{RenderEntity, TemporaryRenderEntity}, - texture::{ - BevyDefault, DefaultImageSampler, FallbackImage, GpuImage, Image, ImageSampler, - TextureFormatPixelInfo, - }, + texture::{DefaultImageSampler, FallbackImage, GpuImage}, view::{ ExtractedView, Msaa, ViewTarget, ViewUniform, ViewUniformOffset, ViewUniforms, ViewVisibility, @@ -323,6 +321,7 @@ impl SpecializedRenderPipeline for SpritePipeline { }, label: Some("sprite_pipeline".into()), push_constant_ranges: Vec::new(), + zero_initialize_workgroup_memory: false, } } } diff --git a/crates/bevy_sprite/src/sprite.rs b/crates/bevy_sprite/src/sprite.rs index 88faf4af10..f6b8b266d5 100644 --- a/crates/bevy_sprite/src/sprite.rs +++ b/crates/bevy_sprite/src/sprite.rs @@ -1,9 +1,10 @@ use bevy_asset::Handle; use bevy_color::Color; use bevy_ecs::{component::Component, reflect::ReflectComponent}; +use bevy_image::Image; use bevy_math::{Rect, Vec2}; use bevy_reflect::{std_traits::ReflectDefault, Reflect}; -use bevy_render::{sync_world::SyncToRenderWorld, texture::Image, view::Visibility}; +use bevy_render::{sync_world::SyncToRenderWorld, view::Visibility}; use bevy_transform::components::Transform; use crate::{TextureAtlas, TextureSlicer}; diff --git a/crates/bevy_sprite/src/texture_atlas.rs b/crates/bevy_sprite/src/texture_atlas.rs index a4d82b2ca1..797fb4aa20 100644 --- a/crates/bevy_sprite/src/texture_atlas.rs +++ b/crates/bevy_sprite/src/texture_atlas.rs @@ -1,9 +1,9 @@ use bevy_asset::{Asset, AssetId, Assets, Handle}; +use bevy_image::Image; use bevy_math::{URect, UVec2}; use bevy_reflect::{std_traits::ReflectDefault, Reflect}; #[cfg(feature = "serialize")] use bevy_reflect::{ReflectDeserialize, ReflectSerialize}; -use bevy_render::texture::Image; use bevy_utils::HashMap; /// Stores a mapping from sub texture handles to the related area index. diff --git a/crates/bevy_sprite/src/texture_atlas_builder.rs b/crates/bevy_sprite/src/texture_atlas_builder.rs index 2428fd4b15..b59c9423b9 100644 --- a/crates/bevy_sprite/src/texture_atlas_builder.rs +++ b/crates/bevy_sprite/src/texture_atlas_builder.rs @@ -1,9 +1,9 @@ use bevy_asset::AssetId; +use bevy_image::{Image, TextureFormatPixelInfo}; use bevy_math::{URect, UVec2}; use bevy_render::{ render_asset::RenderAssetUsages, render_resource::{Extent3d, TextureDimension, TextureFormat}, - texture::{Image, TextureFormatPixelInfo}, }; use bevy_utils::{ tracing::{debug, error, warn}, @@ -179,6 +179,7 @@ impl<'a> TextureAtlasBuilder<'a> { /// # use bevy_ecs::prelude::*; /// # use bevy_asset::*; /// # use bevy_render::prelude::*; + /// # use bevy_image::Image; /// /// fn my_system(mut commands: Commands, mut textures: ResMut>, mut layouts: ResMut>) { /// // Declare your builder diff --git a/crates/bevy_sprite/src/texture_slice/computed_slices.rs b/crates/bevy_sprite/src/texture_slice/computed_slices.rs index 6e2d94198c..490071a600 100644 --- a/crates/bevy_sprite/src/texture_slice/computed_slices.rs +++ b/crates/bevy_sprite/src/texture_slice/computed_slices.rs @@ -3,8 +3,8 @@ use crate::{ExtractedSprite, Sprite, SpriteImageMode, TextureAtlasLayout}; use super::TextureSlice; use bevy_asset::{AssetEvent, Assets}; use bevy_ecs::prelude::*; +use bevy_image::Image; use bevy_math::{Rect, Vec2}; -use bevy_render::texture::Image; use bevy_transform::prelude::*; use bevy_utils::HashSet; diff --git a/crates/bevy_text/Cargo.toml b/crates/bevy_text/Cargo.toml index ef3d235113..479ebed5f4 100644 --- a/crates/bevy_text/Cargo.toml +++ b/crates/bevy_text/Cargo.toml @@ -19,6 +19,7 @@ bevy_color = { path = "../bevy_color", version = "0.15.0-dev" } bevy_derive = { path = "../bevy_derive", version = "0.15.0-dev" } bevy_ecs = { path = "../bevy_ecs", version = "0.15.0-dev" } bevy_hierarchy = { path = "../bevy_hierarchy", version = "0.15.0-dev" } +bevy_image = { path = "../bevy_image", version = "0.15.0-dev" } bevy_math = { path = "../bevy_math", version = "0.15.0-dev" } bevy_reflect = { path = "../bevy_reflect", version = "0.15.0-dev", features = [ "bevy", diff --git a/crates/bevy_text/src/font_atlas.rs b/crates/bevy_text/src/font_atlas.rs index 8f32dade93..4ce4ea6207 100644 --- a/crates/bevy_text/src/font_atlas.rs +++ b/crates/bevy_text/src/font_atlas.rs @@ -1,9 +1,9 @@ use bevy_asset::{Assets, Handle}; +use bevy_image::{Image, ImageSampler}; use bevy_math::{IVec2, UVec2}; use bevy_render::{ render_asset::RenderAssetUsages, render_resource::{Extent3d, TextureDimension, TextureFormat}, - texture::{Image, ImageSampler}, }; use bevy_sprite::{DynamicTextureAtlasBuilder, TextureAtlasLayout}; use bevy_utils::HashMap; diff --git a/crates/bevy_text/src/font_atlas_set.rs b/crates/bevy_text/src/font_atlas_set.rs index 3be8cf74b7..5547ea5fdb 100644 --- a/crates/bevy_text/src/font_atlas_set.rs +++ b/crates/bevy_text/src/font_atlas_set.rs @@ -3,12 +3,12 @@ use bevy_ecs::{ event::EventReader, system::{ResMut, Resource}, }; +use bevy_image::Image; use bevy_math::{IVec2, UVec2}; use bevy_reflect::TypePath; use bevy_render::{ render_asset::RenderAssetUsages, render_resource::{Extent3d, TextureDimension, TextureFormat}, - texture::Image, }; use bevy_sprite::TextureAtlasLayout; use bevy_utils::HashMap; diff --git a/crates/bevy_text/src/glyph.rs b/crates/bevy_text/src/glyph.rs index 4b264a8c89..b5295c655e 100644 --- a/crates/bevy_text/src/glyph.rs +++ b/crates/bevy_text/src/glyph.rs @@ -1,9 +1,9 @@ //! This module exports types related to rendering glyphs. use bevy_asset::Handle; +use bevy_image::Image; use bevy_math::{IVec2, Vec2}; use bevy_reflect::Reflect; -use bevy_render::texture::Image; use bevy_sprite::TextureAtlasLayout; /// A glyph of a font, typically representing a single character, positioned in screen space. diff --git a/crates/bevy_text/src/lib.rs b/crates/bevy_text/src/lib.rs index f7129c359f..6b85675c94 100644 --- a/crates/bevy_text/src/lib.rs +++ b/crates/bevy_text/src/lib.rs @@ -116,6 +116,8 @@ impl Plugin for TextPlugin { .register_type::() .register_type::() .register_type::() + .register_type::() + .register_type::() .init_asset_loader::() .init_resource::() .init_resource::() diff --git a/crates/bevy_text/src/pipeline.rs b/crates/bevy_text/src/pipeline.rs index cf5fe2f90c..92b5cd902e 100644 --- a/crates/bevy_text/src/pipeline.rs +++ b/crates/bevy_text/src/pipeline.rs @@ -9,9 +9,9 @@ use bevy_ecs::{ reflect::ReflectComponent, system::{ResMut, Resource}, }; +use bevy_image::Image; use bevy_math::{UVec2, Vec2}; use bevy_reflect::{std_traits::ReflectDefault, Reflect}; -use bevy_render::texture::Image; use bevy_sprite::TextureAtlasLayout; use bevy_utils::HashMap; diff --git a/crates/bevy_text/src/text.rs b/crates/bevy_text/src/text.rs index 8543daea3d..13e464451b 100644 --- a/crates/bevy_text/src/text.rs +++ b/crates/bevy_text/src/text.rs @@ -28,7 +28,8 @@ impl Default for CosmicBuffer { /// A sub-entity of a [`ComputedTextBlock`]. /// /// Returned by [`ComputedTextBlock::entities`]. -#[derive(Debug, Copy, Clone)] +#[derive(Debug, Copy, Clone, Reflect)] +#[reflect(Debug)] pub struct TextEntity { /// The entity. pub entity: Entity, @@ -41,7 +42,8 @@ pub struct TextEntity { /// See [`TextLayout`]. /// /// Automatically updated by 2d and UI text systems. -#[derive(Component, Debug, Clone)] +#[derive(Component, Debug, Clone, Reflect)] +#[reflect(Component, Debug, Default)] pub struct ComputedTextBlock { /// Buffer for managing text layout and creating [`TextLayoutInfo`]. /// @@ -49,6 +51,7 @@ pub struct ComputedTextBlock { /// `TextLayoutInfo`. If you want to control the buffer contents manually or use the `cosmic-text` /// editor, then you need to not use `TextLayout` and instead manually implement the conversion to /// `TextLayoutInfo`. + #[reflect(ignore)] pub(crate) buffer: CosmicBuffer, /// Entities for all text spans in the block, including the root-level text. /// diff --git a/crates/bevy_text/src/text2d.rs b/crates/bevy_text/src/text2d.rs index 509108cb50..36448baab7 100644 --- a/crates/bevy_text/src/text2d.rs +++ b/crates/bevy_text/src/text2d.rs @@ -16,13 +16,13 @@ use bevy_ecs::{ query::{Changed, Without}, system::{Commands, Local, Query, Res, ResMut}, }; +use bevy_image::Image; use bevy_math::Vec2; use bevy_reflect::{prelude::ReflectDefault, Reflect}; use bevy_render::sync_world::TemporaryRenderEntity; use bevy_render::view::Visibility; use bevy_render::{ primitives::Aabb, - texture::Image, view::{NoFrustumCulling, ViewVisibility}, Extract, }; diff --git a/crates/bevy_ui/Cargo.toml b/crates/bevy_ui/Cargo.toml index cc6098b02f..1184b94b09 100644 --- a/crates/bevy_ui/Cargo.toml +++ b/crates/bevy_ui/Cargo.toml @@ -18,6 +18,7 @@ bevy_core_pipeline = { path = "../bevy_core_pipeline", version = "0.15.0-dev" } bevy_derive = { path = "../bevy_derive", version = "0.15.0-dev" } bevy_ecs = { path = "../bevy_ecs", version = "0.15.0-dev" } bevy_hierarchy = { path = "../bevy_hierarchy", version = "0.15.0-dev" } +bevy_image = { path = "../bevy_image", version = "0.15.0-dev" } bevy_input = { path = "../bevy_input", version = "0.15.0-dev" } bevy_math = { path = "../bevy_math", version = "0.15.0-dev" } bevy_reflect = { path = "../bevy_reflect", version = "0.15.0-dev", features = [ @@ -43,6 +44,7 @@ derive_more = { version = "1", default-features = false, features = [ ] } nonmax = "0.5" smallvec = "1.11" +accesskit = "0.17" [features] default = ["bevy_ui_picking_backend"] diff --git a/crates/bevy_ui/src/accessibility.rs b/crates/bevy_ui/src/accessibility.rs index f4d331b9ca..d67babc411 100644 --- a/crates/bevy_ui/src/accessibility.rs +++ b/crates/bevy_ui/src/accessibility.rs @@ -1,13 +1,10 @@ use crate::{ experimental::UiChildren, prelude::{Button, Label}, - widget::{TextUiReader, UiImage}, + widget::{ImageNode, TextUiReader}, ComputedNode, }; -use bevy_a11y::{ - accesskit::{Node, Rect, Role}, - AccessibilityNode, -}; +use bevy_a11y::AccessibilityNode; use bevy_app::{App, Plugin, PostUpdate}; use bevy_ecs::{ prelude::{DetectChanges, Entity}, @@ -19,6 +16,8 @@ use bevy_ecs::{ use bevy_render::{camera::CameraUpdateSystem, prelude::Camera}; use bevy_transform::prelude::GlobalTransform; +use accesskit::{Node, Rect, Role}; + fn calc_label( text_reader: &mut TextUiReader, children: impl Iterator, @@ -92,7 +91,10 @@ fn button_changed( fn image_changed( mut commands: Commands, - mut query: Query<(Entity, Option<&mut AccessibilityNode>), (Changed, Without