Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ use bevy_core_pipeline::{
FullscreenShader,
};
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},
Expand All @@ -17,7 +16,7 @@ use bevy_render::{
*,
},
renderer::RenderDevice,
view::{ExtractedView, ViewTarget},
view::ExtractedView,
Render, RenderApp, RenderStartup, RenderSystems,
};
use bevy_shader::Shader;
Expand Down Expand Up @@ -249,11 +248,7 @@ fn prepare_cas_pipelines(
&sharpening_pipeline,
CasPipelineKey {
denoise: denoise_cas.0,
texture_format: if view.hdr {
ViewTarget::TEXTURE_FORMAT_HDR
} else {
TextureFormat::bevy_default()
},
texture_format: view.target_format,
},
);

Expand Down
9 changes: 2 additions & 7 deletions crates/bevy_anti_alias/src/fxaa/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ use bevy_core_pipeline::{
FullscreenShader,
};
use bevy_ecs::prelude::*;
use bevy_image::BevyDefault as _;
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
use bevy_render::{
extract_component::{ExtractComponent, ExtractComponentPlugin},
Expand All @@ -17,7 +16,7 @@ use bevy_render::{
*,
},
renderer::RenderDevice,
view::{ExtractedView, ViewTarget},
view::ExtractedView,
Render, RenderApp, RenderStartup, RenderSystems,
};
use bevy_shader::Shader;
Expand Down Expand Up @@ -216,11 +215,7 @@ pub fn prepare_fxaa_pipelines(
FxaaPipelineKey {
edge_threshold: fxaa.edge_threshold,
edge_threshold_min: fxaa.edge_threshold_min,
texture_format: if view.hdr {
ViewTarget::TEXTURE_FORMAT_HDR
} else {
TextureFormat::bevy_default()
},
texture_format: view.target_format,
},
);

Expand Down
8 changes: 2 additions & 6 deletions crates/bevy_anti_alias/src/smaa/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ use bevy_ecs::{
system::{lifetimeless::Read, Commands, Query, Res, ResMut},
world::World,
};
use bevy_image::{BevyDefault, Image, ToExtents};
use bevy_image::{Image, ToExtents};
use bevy_math::{vec4, Vec4};
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
use bevy_render::{
Expand Down Expand Up @@ -605,11 +605,7 @@ fn prepare_smaa_pipelines(
&pipeline_cache,
&smaa_pipelines.neighborhood_blending,
SmaaNeighborhoodBlendingPipelineKey {
texture_format: if view.hdr {
ViewTarget::TEXTURE_FORMAT_HDR
} else {
TextureFormat::bevy_default()
},
texture_format: view.target_format,
preset: smaa.preset,
},
);
Expand Down
17 changes: 7 additions & 10 deletions crates/bevy_anti_alias/src/taa/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ use bevy_ecs::{
system::{Commands, Query, Res, ResMut},
world::World,
};
use bevy_image::{BevyDefault as _, ToExtents};
use bevy_image::ToExtents;
use bevy_math::vec2;
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
use bevy_render::{
Expand Down Expand Up @@ -295,6 +295,7 @@ fn init_taa_pipeline(
#[derive(PartialEq, Eq, Hash, Clone)]
struct TaaPipelineKey {
hdr: bool,
target_format: TextureFormat,
reset: bool,
}

Expand All @@ -304,17 +305,16 @@ impl SpecializedRenderPipeline for TaaPipeline {
fn specialize(&self, key: Self::Key) -> RenderPipelineDescriptor {
let mut shader_defs = vec![];

let format = if key.hdr {
if key.hdr {
shader_defs.push("TONEMAP".into());
ViewTarget::TEXTURE_FORMAT_HDR
} else {
TextureFormat::bevy_default()
};

if key.reset {
shader_defs.push("RESET".into());
}

let format = key.target_format;

RenderPipelineDescriptor {
label: Some("taa_pipeline".into()),
layout: vec![self.taa_bind_group_layout.clone()],
Expand Down Expand Up @@ -417,11 +417,7 @@ fn prepare_taa_history_textures(
mip_level_count: 1,
sample_count: 1,
dimension: TextureDimension::D2,
format: if view.hdr {
ViewTarget::TEXTURE_FORMAT_HDR
} else {
TextureFormat::bevy_default()
},
format: view.target_format,
usage: TextureUsages::TEXTURE_BINDING | TextureUsages::RENDER_ATTACHMENT,
view_formats: &[],
};
Expand Down Expand Up @@ -462,6 +458,7 @@ fn prepare_taa_pipelines(
for (entity, view, taa_settings) in &views {
let mut pipeline_key = TaaPipelineKey {
hdr: view.hdr,
target_format: view.target_format,
reset: taa_settings.reset,
};
let pipeline_id = pipelines.specialize(&pipeline_cache, &pipeline, pipeline_key.clone());
Expand Down
2 changes: 1 addition & 1 deletion crates/bevy_asset/src/io/source.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use bevy_ecs::resource::Resource;
use bevy_platform::collections::HashMap;
use core::{fmt::Display, hash::Hash, time::Duration};
use thiserror::Error;
use tracing::{error, warn};
use tracing::warn;

use super::{ErasedAssetReader, ErasedAssetWriter};

Expand Down
25 changes: 22 additions & 3 deletions crates/bevy_camera/src/camera.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@ use super::{
use bevy_asset::Handle;
use bevy_derive::Deref;
use bevy_ecs::{component::Component, entity::Entity, reflect::ReflectComponent};
use bevy_image::Image;
use bevy_image::{BevyDefault, Image};
use bevy_math::{ops, Dir3, FloatOrd, Mat4, Ray3d, Rect, URect, UVec2, Vec2, Vec3, Vec3A};
use bevy_reflect::prelude::*;
use bevy_transform::components::{GlobalTransform, Transform};
use bevy_window::{NormalizedWindowRef, WindowRef};
use core::ops::Range;
use derive_more::derive::From;
use thiserror::Error;
use wgpu_types::{BlendState, TextureUsages};
use wgpu_types::{BlendState, TextureFormat, TextureUsages};

/// Render viewport configuration for the [`Camera`] component.
///
Expand Down Expand Up @@ -345,6 +345,7 @@ pub enum ViewportConversionError {
#[require(
Frustum,
CameraMainTextureUsages,
CameraMainTextureFormat,
VisibleEntities,
Transform,
Visibility
Expand Down Expand Up @@ -949,7 +950,6 @@ impl Default for RenderTarget {

/// This component lets you control the [`TextureUsages`] field of the main texture generated for the camera
#[derive(Component, Clone, Copy, Reflect)]
#[reflect(opaque)]
#[reflect(Component, Default, Clone)]
pub struct CameraMainTextureUsages(pub TextureUsages);

Expand All @@ -970,6 +970,25 @@ impl CameraMainTextureUsages {
}
}

/// This component lets you control the [`TextureFormat`] field of the main texture generated for the camera
///
/// By default, bevy will use [`TextureFormat::Rgba8UnormSrgb`] for sdr and [`TextureFormat::Rgba16Float`] for hdr.
#[derive(Component, Clone, Copy, Reflect)]
#[reflect(Component, Default, Clone)]
pub struct CameraMainTextureFormat {
pub sdr_format: TextureFormat,
pub hdr_format: TextureFormat,
}

impl Default for CameraMainTextureFormat {
fn default() -> Self {
Self {
sdr_format: TextureFormat::bevy_default(),
hdr_format: TextureFormat::Rgba16Float,
}
}
}

#[cfg(test)]
mod test {
use bevy_math::{Vec2, Vec3};
Expand Down
10 changes: 3 additions & 7 deletions crates/bevy_core_pipeline/src/core_3d/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ use bevy_app::{App, Plugin, PostUpdate};
use bevy_asset::UntypedAssetId;
use bevy_color::LinearRgba;
use bevy_ecs::prelude::*;
use bevy_image::{BevyDefault, ToExtents};
use bevy_image::ToExtents;
use bevy_math::FloatOrd;
use bevy_platform::collections::{HashMap, HashSet};
use bevy_render::{
Expand All @@ -108,7 +108,7 @@ use bevy_render::{
renderer::RenderDevice,
sync_world::{MainEntity, RenderEntity},
texture::{ColorAttachment, TextureCache},
view::{ExtractedView, ViewDepthTexture, ViewTarget},
view::{ExtractedView, ViewDepthTexture},
Extract, ExtractSchedule, Render, RenderApp, RenderSystems,
};
use nonmax::NonMaxU32;
Expand Down Expand Up @@ -897,11 +897,7 @@ pub fn prepare_core_3d_transmission_textures(
.or_insert_with(|| {
let usage = TextureUsages::TEXTURE_BINDING | TextureUsages::COPY_DST;

let format = if view.hdr {
ViewTarget::TEXTURE_FORMAT_HDR
} else {
TextureFormat::bevy_default()
};
let format = view.target_format;

let descriptor = TextureDescriptor {
label: Some("view_transmission_texture"),
Expand Down
13 changes: 4 additions & 9 deletions crates/bevy_core_pipeline/src/oit/resolve/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ 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},
Expand All @@ -16,7 +15,7 @@ use bevy_render::{
FragmentState, PipelineCache, RenderPipelineDescriptor, ShaderStages, TextureFormat,
},
renderer::{RenderAdapter, RenderDevice},
view::{ExtractedView, ViewTarget, ViewUniform, ViewUniforms},
view::{ExtractedView, ViewUniform, ViewUniforms},
Render, RenderApp, RenderSystems,
};
use bevy_shader::ShaderDefVal;
Expand Down Expand Up @@ -137,7 +136,7 @@ pub struct OitResolvePipelineId(pub CachedRenderPipelineId);
/// This key is used to cache the pipeline id and to specialize the render pipeline descriptor.
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
pub struct OitResolvePipelineKey {
hdr: bool,
target_format: TextureFormat,
layer_count: i32,
}

Expand All @@ -163,7 +162,7 @@ pub fn queue_oit_resolve_pipeline(
for (e, view, oit_settings) in &views {
current_view_entities.insert(e);
let key = OitResolvePipelineKey {
hdr: view.hdr,
target_format: view.target_format,
layer_count: oit_settings.layer_count,
};

Expand Down Expand Up @@ -200,11 +199,7 @@ fn specialize_oit_resolve_pipeline(
fullscreen_shader: &FullscreenShader,
asset_server: &AssetServer,
) -> RenderPipelineDescriptor {
let format = if key.hdr {
ViewTarget::TEXTURE_FORMAT_HDR
} else {
TextureFormat::bevy_default()
};
let format = key.target_format;

RenderPipelineDescriptor {
label: Some("oit_resolve_pipeline".into()),
Expand Down
14 changes: 5 additions & 9 deletions crates/bevy_core_pipeline/src/skybox/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use bevy_ecs::{
schedule::IntoScheduleConfigs,
system::{Commands, Query, Res, ResMut},
};
use bevy_image::{BevyDefault, Image};
use bevy_image::Image;
use bevy_math::{Mat4, Quat};
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
use bevy_render::{
Expand All @@ -24,7 +24,7 @@ use bevy_render::{
},
renderer::RenderDevice,
texture::GpuImage,
view::{ExtractedView, Msaa, ViewTarget, ViewUniform, ViewUniforms},
view::{ExtractedView, Msaa, ViewUniform, ViewUniforms},
Render, RenderApp, RenderStartup, RenderSystems,
};
use bevy_shader::Shader;
Expand Down Expand Up @@ -185,7 +185,7 @@ fn init_skybox_pipeline(

#[derive(PartialEq, Eq, Hash, Clone, Copy)]
struct SkyboxPipelineKey {
hdr: bool,
target_format: TextureFormat,
samples: u32,
depth_format: TextureFormat,
}
Expand Down Expand Up @@ -225,11 +225,7 @@ impl SpecializedRenderPipeline for SkyboxPipeline {
fragment: Some(FragmentState {
shader: self.shader.clone(),
targets: vec![Some(ColorTargetState {
format: if key.hdr {
ViewTarget::TEXTURE_FORMAT_HDR
} else {
TextureFormat::bevy_default()
},
format: key.target_format,
// BlendState::REPLACE is not needed here, and None will be potentially much faster in some cases.
blend: None,
write_mask: ColorWrites::ALL,
Expand All @@ -256,7 +252,7 @@ fn prepare_skybox_pipelines(
&pipeline_cache,
&pipeline,
SkyboxPipelineKey {
hdr: view.hdr,
target_format: view.target_format,
samples: msaa.samples(),
depth_format: CORE_3D_DEPTH_FORMAT,
},
Expand Down
4 changes: 3 additions & 1 deletion crates/bevy_core_pipeline/src/tonemapping/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,7 @@ bitflags! {

#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub struct TonemappingPipelineKey {
target_format: TextureFormat,
deband_dither: DebandDither,
tonemapping: Tonemapping,
flags: TonemappingPipelineKeyFlags,
Expand Down Expand Up @@ -273,7 +274,7 @@ impl SpecializedRenderPipeline for TonemappingPipeline {
shader: self.fragment_shader.clone(),
shader_defs,
targets: vec![Some(ColorTargetState {
format: ViewTarget::TEXTURE_FORMAT_HDR,
format: key.target_format,
blend: None,
write_mask: ColorWrites::ALL,
})],
Expand Down Expand Up @@ -357,6 +358,7 @@ pub fn prepare_view_tonemapping_pipelines(
deband_dither: *dither.unwrap_or(&DebandDither::Disabled),
tonemapping: *tonemapping.unwrap_or(&Tonemapping::None),
flags,
target_format: view.target_format,
};
let pipeline = pipelines.specialize(&pipeline_cache, &upscaling_pipeline, key);

Expand Down
2 changes: 1 addition & 1 deletion crates/bevy_ecs/src/schedule/schedule.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ use core::{
fmt::{Debug, Write},
};
use fixedbitset::FixedBitSet;
use log::{error, info, warn};
use log::{info, warn};
use pass::ScheduleBuildPassObj;
use thiserror::Error;
#[cfg(feature = "trace")]
Expand Down
Loading
Loading