Skip to content

Commit b62b14c

Browse files
authored
Add UVec to_extents helper method (#19807)
# Objective - Simplify common usecase ## Solution - Helper trait
1 parent 96dcbc5 commit b62b14c

File tree

21 files changed

+100
-198
lines changed

21 files changed

+100
-198
lines changed

crates/bevy_anti_aliasing/src/smaa/mod.rs

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ use bevy_ecs::{
5050
system::{lifetimeless::Read, Commands, Query, Res, ResMut},
5151
world::{FromWorld, World},
5252
};
53-
use bevy_image::{BevyDefault, Image};
53+
use bevy_image::{BevyDefault, Image, ToExtents};
5454
use bevy_math::{vec4, Vec4};
5555
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
5656
use bevy_render::{
@@ -64,14 +64,13 @@ use bevy_render::{
6464
binding_types::{sampler, texture_2d, uniform_buffer},
6565
AddressMode, BindGroup, BindGroupEntries, BindGroupLayout, BindGroupLayoutEntries,
6666
CachedRenderPipelineId, ColorTargetState, ColorWrites, CompareFunction, DepthStencilState,
67-
DynamicUniformBuffer, Extent3d, FilterMode, FragmentState, LoadOp, MultisampleState,
68-
Operations, PipelineCache, PrimitiveState, RenderPassColorAttachment,
69-
RenderPassDepthStencilAttachment, RenderPassDescriptor, RenderPipeline,
70-
RenderPipelineDescriptor, SamplerBindingType, SamplerDescriptor, Shader, ShaderDefVal,
71-
ShaderStages, ShaderType, SpecializedRenderPipeline, SpecializedRenderPipelines,
72-
StencilFaceState, StencilOperation, StencilState, StoreOp, TextureDescriptor,
73-
TextureDimension, TextureFormat, TextureSampleType, TextureUsages, TextureView,
74-
VertexState,
67+
DynamicUniformBuffer, FilterMode, FragmentState, LoadOp, MultisampleState, Operations,
68+
PipelineCache, PrimitiveState, RenderPassColorAttachment, RenderPassDepthStencilAttachment,
69+
RenderPassDescriptor, RenderPipeline, RenderPipelineDescriptor, SamplerBindingType,
70+
SamplerDescriptor, Shader, ShaderDefVal, ShaderStages, ShaderType,
71+
SpecializedRenderPipeline, SpecializedRenderPipelines, StencilFaceState, StencilOperation,
72+
StencilState, StoreOp, TextureDescriptor, TextureDimension, TextureFormat,
73+
TextureSampleType, TextureUsages, TextureView, VertexState,
7574
},
7675
renderer::{RenderContext, RenderDevice, RenderQueue},
7776
texture::{CachedTexture, GpuImage, TextureCache},
@@ -704,18 +703,12 @@ fn prepare_smaa_textures(
704703
continue;
705704
};
706705

707-
let texture_size = Extent3d {
708-
width: texture_size.x,
709-
height: texture_size.y,
710-
depth_or_array_layers: 1,
711-
};
712-
713706
// Create the two-channel RG texture for phase 1 (edge detection).
714707
let edge_detection_color_texture = texture_cache.get(
715708
&render_device,
716709
TextureDescriptor {
717710
label: Some("SMAA edge detection color texture"),
718-
size: texture_size,
711+
size: texture_size.to_extents(),
719712
mip_level_count: 1,
720713
sample_count: 1,
721714
dimension: TextureDimension::D2,
@@ -730,7 +723,7 @@ fn prepare_smaa_textures(
730723
&render_device,
731724
TextureDescriptor {
732725
label: Some("SMAA edge detection stencil texture"),
733-
size: texture_size,
726+
size: texture_size.to_extents(),
734727
mip_level_count: 1,
735728
sample_count: 1,
736729
dimension: TextureDimension::D2,
@@ -746,7 +739,7 @@ fn prepare_smaa_textures(
746739
&render_device,
747740
TextureDescriptor {
748741
label: Some("SMAA blend texture"),
749-
size: texture_size,
742+
size: texture_size.to_extents(),
750743
mip_level_count: 1,
751744
sample_count: 1,
752745
dimension: TextureDimension::D2,

crates/bevy_anti_aliasing/src/taa/mod.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use bevy_ecs::{
1515
system::{Commands, Query, Res, ResMut},
1616
world::{FromWorld, World},
1717
};
18-
use bevy_image::BevyDefault as _;
18+
use bevy_image::{BevyDefault as _, ToExtents};
1919
use bevy_math::vec2;
2020
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
2121
use bevy_render::{
@@ -25,8 +25,8 @@ use bevy_render::{
2525
render_resource::{
2626
binding_types::{sampler, texture_2d, texture_depth_2d},
2727
BindGroupEntries, BindGroupLayout, BindGroupLayoutEntries, CachedRenderPipelineId,
28-
ColorTargetState, ColorWrites, Extent3d, FilterMode, FragmentState, MultisampleState,
29-
Operations, PipelineCache, PrimitiveState, RenderPassColorAttachment, RenderPassDescriptor,
28+
ColorTargetState, ColorWrites, FilterMode, FragmentState, MultisampleState, Operations,
29+
PipelineCache, PrimitiveState, RenderPassColorAttachment, RenderPassDescriptor,
3030
RenderPipelineDescriptor, Sampler, SamplerBindingType, SamplerDescriptor, Shader,
3131
ShaderStages, SpecializedRenderPipeline, SpecializedRenderPipelines, TextureDescriptor,
3232
TextureDimension, TextureFormat, TextureSampleType, TextureUsages,
@@ -420,11 +420,7 @@ fn prepare_taa_history_textures(
420420
if let Some(physical_target_size) = camera.physical_target_size {
421421
let mut texture_descriptor = TextureDescriptor {
422422
label: None,
423-
size: Extent3d {
424-
depth_or_array_layers: 1,
425-
width: physical_target_size.x,
426-
height: physical_target_size.y,
427-
},
423+
size: physical_target_size.to_extents(),
428424
mip_level_count: 1,
429425
sample_count: 1,
430426
dimension: TextureDimension::D2,

crates/bevy_core_pipeline/src/bloom/mod.rs

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ mod downsampling_pipeline;
22
mod settings;
33
mod upsampling_pipeline;
44

5+
use bevy_image::ToExtents;
56
pub use settings::{Bloom, BloomCompositeMode, BloomPrefilter};
67

78
use crate::{
@@ -347,26 +348,22 @@ fn prepare_bloom_textures(
347348
views: Query<(Entity, &ExtractedCamera, &Bloom)>,
348349
) {
349350
for (entity, camera, bloom) in &views {
350-
if let Some(UVec2 {
351-
x: width,
352-
y: height,
353-
}) = camera.physical_viewport_size
354-
{
351+
if let Some(viewport) = camera.physical_viewport_size {
355352
// How many times we can halve the resolution minus one so we don't go unnecessarily low
356353
let mip_count = bloom.max_mip_dimension.ilog2().max(2) - 1;
357-
let mip_height_ratio = if height != 0 {
358-
bloom.max_mip_dimension as f32 / height as f32
354+
let mip_height_ratio = if viewport.y != 0 {
355+
bloom.max_mip_dimension as f32 / viewport.y as f32
359356
} else {
360357
0.
361358
};
362359

363360
let texture_descriptor = TextureDescriptor {
364361
label: Some("bloom_texture"),
365-
size: Extent3d {
366-
width: ((width as f32 * mip_height_ratio).round() as u32).max(1),
367-
height: ((height as f32 * mip_height_ratio).round() as u32).max(1),
368-
depth_or_array_layers: 1,
369-
},
362+
size: (viewport.as_vec2() * mip_height_ratio)
363+
.round()
364+
.as_uvec2()
365+
.max(UVec2::ONE)
366+
.to_extents(),
370367
mip_level_count: mip_count,
371368
sample_count: 1,
372369
dimension: TextureDimension::D2,

crates/bevy_core_pipeline/src/core_2d/mod.rs

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ pub mod graph {
3434
use core::ops::Range;
3535

3636
use bevy_asset::UntypedAssetId;
37+
use bevy_image::ToExtents;
3738
use bevy_platform::collections::{HashMap, HashSet};
3839
use bevy_render::{
3940
batching::gpu_preprocessing::GpuPreprocessingMode,
@@ -58,8 +59,8 @@ use bevy_render::{
5859
ViewSortedRenderPhases,
5960
},
6061
render_resource::{
61-
BindGroupId, CachedRenderPipelineId, Extent3d, TextureDescriptor, TextureDimension,
62-
TextureFormat, TextureUsages,
62+
BindGroupId, CachedRenderPipelineId, TextureDescriptor, TextureDimension, TextureFormat,
63+
TextureUsages,
6364
},
6465
renderer::RenderDevice,
6566
sync_world::MainEntity,
@@ -474,16 +475,10 @@ pub fn prepare_core_2d_depth_textures(
474475
let cached_texture = textures
475476
.entry(camera.target.clone())
476477
.or_insert_with(|| {
477-
// The size of the depth texture
478-
let size = Extent3d {
479-
depth_or_array_layers: 1,
480-
width: physical_target_size.x,
481-
height: physical_target_size.y,
482-
};
483-
484478
let descriptor = TextureDescriptor {
485479
label: Some("view_depth_texture"),
486-
size,
480+
// The size of the depth texture
481+
size: physical_target_size.to_extents(),
487482
mip_level_count: 1,
488483
sample_count: msaa.samples(),
489484
dimension: TextureDimension::D2,

crates/bevy_core_pipeline/src/core_3d/main_transmissive_pass_3d_node.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
use super::{Camera3d, ViewTransmissionTexture};
22
use crate::core_3d::Transmissive3d;
33
use bevy_ecs::{prelude::*, query::QueryItem};
4+
use bevy_image::ToExtents;
45
use bevy_render::{
56
camera::ExtractedCamera,
67
render_graph::{NodeRunError, RenderGraphContext, ViewNode},
78
render_phase::ViewSortedRenderPhases,
8-
render_resource::{Extent3d, RenderPassDescriptor, StoreOp},
9+
render_resource::{RenderPassDescriptor, StoreOp},
910
renderer::RenderContext,
1011
view::{ExtractedView, ViewDepthTexture, ViewTarget},
1112
};
@@ -85,11 +86,7 @@ impl ViewNode for MainTransmissivePass3dNode {
8586
render_context.command_encoder().copy_texture_to_texture(
8687
target.main_texture().as_image_copy(),
8788
transmission.texture.as_image_copy(),
88-
Extent3d {
89-
width: physical_target_size.x,
90-
height: physical_target_size.y,
91-
depth_or_array_layers: 1,
92-
},
89+
physical_target_size.to_extents(),
9390
);
9491

9592
let mut render_pass =

crates/bevy_core_pipeline/src/core_3d/mod.rs

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ use bevy_app::{App, Plugin, PostUpdate};
8585
use bevy_asset::UntypedAssetId;
8686
use bevy_color::LinearRgba;
8787
use bevy_ecs::prelude::*;
88-
use bevy_image::BevyDefault;
88+
use bevy_image::{BevyDefault, ToExtents};
8989
use bevy_math::FloatOrd;
9090
use bevy_platform::collections::{HashMap, HashSet};
9191
use bevy_render::{
@@ -99,8 +99,8 @@ use bevy_render::{
9999
ViewSortedRenderPhases,
100100
},
101101
render_resource::{
102-
CachedRenderPipelineId, Extent3d, FilterMode, Sampler, SamplerDescriptor, Texture,
103-
TextureDescriptor, TextureDimension, TextureFormat, TextureUsages, TextureView,
102+
CachedRenderPipelineId, FilterMode, Sampler, SamplerDescriptor, Texture, TextureDescriptor,
103+
TextureDimension, TextureFormat, TextureUsages, TextureView,
104104
},
105105
renderer::RenderDevice,
106106
sync_world::{MainEntity, RenderEntity},
@@ -811,20 +811,14 @@ pub fn prepare_core_3d_depth_textures(
811811
let cached_texture = textures
812812
.entry((camera.target.clone(), msaa))
813813
.or_insert_with(|| {
814-
// The size of the depth texture
815-
let size = Extent3d {
816-
depth_or_array_layers: 1,
817-
width: physical_target_size.x,
818-
height: physical_target_size.y,
819-
};
820-
821814
let usage = *render_target_usage
822815
.get(&camera.target.clone())
823816
.expect("The depth texture usage should already exist for this target");
824817

825818
let descriptor = TextureDescriptor {
826819
label: Some("view_depth_texture"),
827-
size,
820+
// The size of the depth texture
821+
size: physical_target_size.to_extents(),
828822
mip_level_count: 1,
829823
sample_count: msaa.samples(),
830824
dimension: TextureDimension::D2,
@@ -897,13 +891,6 @@ pub fn prepare_core_3d_transmission_textures(
897891
.or_insert_with(|| {
898892
let usage = TextureUsages::TEXTURE_BINDING | TextureUsages::COPY_DST;
899893

900-
// The size of the transmission texture
901-
let size = Extent3d {
902-
depth_or_array_layers: 1,
903-
width: physical_target_size.x,
904-
height: physical_target_size.y,
905-
};
906-
907894
let format = if view.hdr {
908895
ViewTarget::TEXTURE_FORMAT_HDR
909896
} else {
@@ -912,7 +899,8 @@ pub fn prepare_core_3d_transmission_textures(
912899

913900
let descriptor = TextureDescriptor {
914901
label: Some("view_transmission_texture"),
915-
size,
902+
// The size of the transmission texture
903+
size: physical_target_size.to_extents(),
916904
mip_level_count: 1,
917905
sample_count: 1, // No need for MSAA, as we'll only copy the main texture here
918906
dimension: TextureDimension::D2,
@@ -1023,11 +1011,7 @@ pub fn prepare_prepass_textures(
10231011
continue;
10241012
};
10251013

1026-
let size = Extent3d {
1027-
depth_or_array_layers: 1,
1028-
width: physical_target_size.x,
1029-
height: physical_target_size.y,
1030-
};
1014+
let size = physical_target_size.to_extents();
10311015

10321016
let cached_depth_texture = depth_prepass.then(|| {
10331017
depth_textures

crates/bevy_core_pipeline/src/deferred/copy_lighting_id.rs

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use crate::{
55
use bevy_app::prelude::*;
66
use bevy_asset::{embedded_asset, load_embedded_asset};
77
use bevy_ecs::prelude::*;
8-
use bevy_math::UVec2;
8+
use bevy_image::ToExtents;
99
use bevy_render::{
1010
camera::ExtractedCamera,
1111
render_resource::{binding_types::texture_2d, *},
@@ -178,18 +178,10 @@ fn prepare_deferred_lighting_id_textures(
178178
views: Query<(Entity, &ExtractedCamera), With<DeferredPrepass>>,
179179
) {
180180
for (entity, camera) in &views {
181-
if let Some(UVec2 {
182-
x: width,
183-
y: height,
184-
}) = camera.physical_target_size
185-
{
181+
if let Some(physical_target_size) = camera.physical_target_size {
186182
let texture_descriptor = TextureDescriptor {
187183
label: Some("deferred_lighting_id_depth_texture_a"),
188-
size: Extent3d {
189-
width,
190-
height,
191-
depth_or_array_layers: 1,
192-
},
184+
size: physical_target_size.to_extents(),
193185
mip_level_count: 1,
194186
sample_count: 1,
195187
dimension: TextureDimension::D2,

crates/bevy_core_pipeline/src/experimental/mip_generation/mod.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -529,11 +529,7 @@ pub fn create_depth_pyramid_dummy_texture(
529529
render_device
530530
.create_texture(&TextureDescriptor {
531531
label: Some(texture_label),
532-
size: Extent3d {
533-
width: 1,
534-
height: 1,
535-
depth_or_array_layers: 1,
536-
},
532+
size: Extent3d::default(),
537533
mip_level_count: 1,
538534
sample_count: 1,
539535
dimension: TextureDimension::D2,

crates/bevy_core_pipeline/src/tonemapping/mod.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -448,11 +448,7 @@ pub fn lut_placeholder() -> Image {
448448
Image {
449449
data: Some(data),
450450
texture_descriptor: TextureDescriptor {
451-
size: Extent3d {
452-
width: 1,
453-
height: 1,
454-
depth_or_array_layers: 1,
455-
},
451+
size: Extent3d::default(),
456452
format,
457453
dimension: TextureDimension::D3,
458454
label: None,

0 commit comments

Comments
 (0)