Skip to content

Commit 4cef923

Browse files
Zeophlitealice-i-cecileatlv24
authored
Remove dummy_white_gpu_image (#21572)
# Objective - `MeshPipeline`, `Mesh2dPipeline` and `SpritePipeline` have `dummy_white_gpu_image` , which is only used by `get_image_texture()` , which is unused - ## Solution - Remove unused ## Testing - CI --------- Co-authored-by: Alice Cecile <[email protected]> Co-authored-by: atlv <[email protected]>
1 parent 4618413 commit 4cef923

File tree

4 files changed

+72
-160
lines changed

4 files changed

+72
-160
lines changed

crates/bevy_pbr/src/render/mesh.rs

Lines changed: 56 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1764,8 +1764,6 @@ pub fn collect_meshes_for_gpu_building(
17641764
pub struct MeshPipeline {
17651765
/// A reference to all the mesh pipeline view layouts.
17661766
pub view_layouts: MeshPipelineViewLayouts,
1767-
// This dummy white texture is to be used in place of optional StandardMaterial textures
1768-
pub dummy_white_gpu_image: GpuImage,
17691767
pub clustered_forward_buffer_binding_type: BufferBindingType,
17701768
pub mesh_layouts: MeshLayouts,
17711769
/// The shader asset handle.
@@ -1803,55 +1801,16 @@ impl FromWorld for MeshPipeline {
18031801
let mut system_state: SystemState<(
18041802
Res<RenderDevice>,
18051803
Res<RenderAdapter>,
1806-
Res<DefaultImageSampler>,
1807-
Res<RenderQueue>,
18081804
Res<MeshPipelineViewLayouts>,
18091805
)> = SystemState::new(world);
1810-
let (render_device, render_adapter, default_sampler, render_queue, view_layouts) =
1811-
system_state.get_mut(world);
1806+
let (render_device, render_adapter, view_layouts) = system_state.get_mut(world);
18121807

18131808
let clustered_forward_buffer_binding_type = render_device
18141809
.get_supported_read_only_binding_type(CLUSTERED_FORWARD_STORAGE_BUFFER_COUNT);
18151810

1816-
// A 1x1x1 'all 1.0' texture to use as a dummy texture to use in place of optional StandardMaterial textures
1817-
let dummy_white_gpu_image = {
1818-
let image = Image::default();
1819-
let texture = render_device.create_texture(&image.texture_descriptor);
1820-
let sampler = match image.sampler {
1821-
ImageSampler::Default => (**default_sampler).clone(),
1822-
ImageSampler::Descriptor(ref descriptor) => {
1823-
render_device.create_sampler(&descriptor.as_wgpu())
1824-
}
1825-
};
1826-
1827-
if let Ok(format_size) = image.texture_descriptor.format.pixel_size() {
1828-
render_queue.write_texture(
1829-
texture.as_image_copy(),
1830-
image.data.as_ref().expect("Image was created without data"),
1831-
TexelCopyBufferLayout {
1832-
offset: 0,
1833-
bytes_per_row: Some(image.width() * format_size as u32),
1834-
rows_per_image: None,
1835-
},
1836-
image.texture_descriptor.size,
1837-
);
1838-
}
1839-
1840-
let texture_view = texture.create_view(&TextureViewDescriptor::default());
1841-
GpuImage {
1842-
texture,
1843-
texture_view,
1844-
texture_format: image.texture_descriptor.format,
1845-
sampler,
1846-
size: image.texture_descriptor.size,
1847-
mip_level_count: image.texture_descriptor.mip_level_count,
1848-
}
1849-
};
1850-
18511811
MeshPipeline {
18521812
view_layouts: view_layouts.clone(),
18531813
clustered_forward_buffer_binding_type,
1854-
dummy_white_gpu_image,
18551814
mesh_layouts: MeshLayouts::new(&render_device, &render_adapter),
18561815
shader,
18571816
per_object_buffer_batch_size: GpuArrayBuffer::<MeshUniform>::batch_size(
@@ -1868,22 +1827,6 @@ impl FromWorld for MeshPipeline {
18681827
}
18691828

18701829
impl MeshPipeline {
1871-
pub fn get_image_texture<'a>(
1872-
&'a self,
1873-
gpu_images: &'a RenderAssets<GpuImage>,
1874-
handle_option: &Option<Handle<Image>>,
1875-
) -> Option<(&'a TextureView, &'a Sampler)> {
1876-
if let Some(handle) = handle_option {
1877-
let gpu_image = gpu_images.get(handle)?;
1878-
Some((&gpu_image.texture_view, &gpu_image.sampler))
1879-
} else {
1880-
Some((
1881-
&self.dummy_white_gpu_image.texture_view,
1882-
&self.dummy_white_gpu_image.sampler,
1883-
))
1884-
}
1885-
}
1886-
18871830
pub fn get_view_layout(
18881831
&self,
18891832
layout_key: MeshPipelineViewLayoutKey,
@@ -1892,6 +1835,61 @@ impl MeshPipeline {
18921835
}
18931836
}
18941837

1838+
/// A 1x1x1 'all 1.0' texture to use as a dummy texture in place of optional [`crate::pbr_material::StandardMaterial`] textures
1839+
pub fn build_dummy_white_gpu_image(
1840+
render_device: Res<RenderDevice>,
1841+
default_sampler: Res<DefaultImageSampler>,
1842+
render_queue: Res<RenderQueue>,
1843+
) -> GpuImage {
1844+
let image = Image::default();
1845+
let texture = render_device.create_texture(&image.texture_descriptor);
1846+
let sampler = match image.sampler {
1847+
ImageSampler::Default => (**default_sampler).clone(),
1848+
ImageSampler::Descriptor(ref descriptor) => {
1849+
render_device.create_sampler(&descriptor.as_wgpu())
1850+
}
1851+
};
1852+
1853+
if let Ok(format_size) = image.texture_descriptor.format.pixel_size() {
1854+
render_queue.write_texture(
1855+
texture.as_image_copy(),
1856+
image.data.as_ref().expect("Image was created without data"),
1857+
TexelCopyBufferLayout {
1858+
offset: 0,
1859+
bytes_per_row: Some(image.width() * format_size as u32),
1860+
rows_per_image: None,
1861+
},
1862+
image.texture_descriptor.size,
1863+
);
1864+
}
1865+
1866+
let texture_view = texture.create_view(&TextureViewDescriptor::default());
1867+
GpuImage {
1868+
texture,
1869+
texture_view,
1870+
texture_format: image.texture_descriptor.format,
1871+
sampler,
1872+
size: image.texture_descriptor.size,
1873+
mip_level_count: image.texture_descriptor.mip_level_count,
1874+
}
1875+
}
1876+
1877+
pub fn get_image_texture<'a>(
1878+
dummy_white_gpu_image: &'a GpuImage,
1879+
gpu_images: &'a RenderAssets<GpuImage>,
1880+
handle_option: &Option<Handle<Image>>,
1881+
) -> Option<(&'a TextureView, &'a Sampler)> {
1882+
if let Some(handle) = handle_option {
1883+
let gpu_image = gpu_images.get(handle)?;
1884+
Some((&gpu_image.texture_view, &gpu_image.sampler))
1885+
} else {
1886+
Some((
1887+
&dummy_white_gpu_image.texture_view,
1888+
&dummy_white_gpu_image.sampler,
1889+
))
1890+
}
1891+
}
1892+
18951893
impl GetBatchData for MeshPipeline {
18961894
type Param = (
18971895
SRes<RenderMeshInstances>,

crates/bevy_sprite_render/src/mesh2d/mesh.rs

Lines changed: 3 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use bevy_ecs::{
2020
query::ROQueryItem,
2121
system::{lifetimeless::*, SystemParamItem},
2222
};
23-
use bevy_image::{BevyDefault, Image, ImageSampler, TextureFormatPixelInfo};
23+
use bevy_image::BevyDefault;
2424
use bevy_math::{Affine3, Vec4};
2525
use bevy_mesh::{Mesh, Mesh2d, MeshTag, MeshVertexBufferLayoutRef};
2626
use bevy_render::prelude::Msaa;
@@ -42,9 +42,9 @@ use bevy_render::{
4242
TrackedRenderPass,
4343
},
4444
render_resource::{binding_types::uniform_buffer, *},
45-
renderer::{RenderDevice, RenderQueue},
45+
renderer::RenderDevice,
4646
sync_world::{MainEntity, MainEntityHashMap},
47-
texture::{DefaultImageSampler, FallbackImage, GpuImage},
47+
texture::{FallbackImage, GpuImage},
4848
view::{ExtractedView, ViewTarget, ViewUniform, ViewUniformOffset, ViewUniforms},
4949
Extract, ExtractSchedule, Render, RenderApp, RenderSystems,
5050
};
@@ -286,16 +286,12 @@ pub struct Mesh2dPipeline {
286286
pub view_layout: BindGroupLayoutDescriptor,
287287
pub mesh_layout: BindGroupLayoutDescriptor,
288288
pub shader: Handle<Shader>,
289-
// This dummy white texture is to be used in place of optional textures
290-
pub dummy_white_gpu_image: GpuImage,
291289
pub per_object_buffer_batch_size: Option<u32>,
292290
}
293291

294292
pub fn init_mesh_2d_pipeline(
295293
mut commands: Commands,
296294
render_device: Res<RenderDevice>,
297-
render_queue: Res<RenderQueue>,
298-
default_sampler: Res<DefaultImageSampler>,
299295
asset_server: Res<AssetServer>,
300296
) {
301297
let tonemapping_lut_entries = get_lut_bind_group_layout_entries();
@@ -319,69 +315,17 @@ pub fn init_mesh_2d_pipeline(
319315
GpuArrayBuffer::<Mesh2dUniform>::binding_layout(&render_device.limits()),
320316
),
321317
);
322-
// A 1x1x1 'all 1.0' texture to use as a dummy texture to use in place of optional StandardMaterial textures
323-
let dummy_white_gpu_image = {
324-
let image = Image::default();
325-
let texture = render_device.create_texture(&image.texture_descriptor);
326-
let sampler = match image.sampler {
327-
ImageSampler::Default => (**default_sampler).clone(),
328-
ImageSampler::Descriptor(ref descriptor) => {
329-
render_device.create_sampler(&descriptor.as_wgpu())
330-
}
331-
};
332-
333-
if let Ok(format_size) = image.texture_descriptor.format.pixel_size() {
334-
render_queue.write_texture(
335-
texture.as_image_copy(),
336-
image.data.as_ref().expect("Image has no data"),
337-
TexelCopyBufferLayout {
338-
offset: 0,
339-
bytes_per_row: Some(image.width() * format_size as u32),
340-
rows_per_image: None,
341-
},
342-
image.texture_descriptor.size,
343-
);
344-
}
345318

346-
let texture_view = texture.create_view(&TextureViewDescriptor::default());
347-
GpuImage {
348-
texture,
349-
texture_view,
350-
texture_format: image.texture_descriptor.format,
351-
sampler,
352-
size: image.texture_descriptor.size,
353-
mip_level_count: image.texture_descriptor.mip_level_count,
354-
}
355-
};
356319
commands.insert_resource(Mesh2dPipeline {
357320
view_layout,
358321
mesh_layout,
359-
dummy_white_gpu_image,
360322
per_object_buffer_batch_size: GpuArrayBuffer::<Mesh2dUniform>::batch_size(
361323
&render_device.limits(),
362324
),
363325
shader: load_embedded_asset!(asset_server.as_ref(), "mesh2d.wgsl"),
364326
});
365327
}
366328

367-
impl Mesh2dPipeline {
368-
pub fn get_image_texture<'a>(
369-
&'a self,
370-
gpu_images: &'a RenderAssets<GpuImage>,
371-
handle_option: &Option<Handle<Image>>,
372-
) -> Option<(&'a TextureView, &'a Sampler)> {
373-
if let Some(handle) = handle_option {
374-
let gpu_image = gpu_images.get(handle)?;
375-
Some((&gpu_image.texture_view, &gpu_image.sampler))
376-
} else {
377-
Some((
378-
&self.dummy_white_gpu_image.texture_view,
379-
&self.dummy_white_gpu_image.sampler,
380-
))
381-
}
382-
}
383-
}
384-
385329
impl GetBatchData for Mesh2dPipeline {
386330
type Param = (
387331
SRes<RenderMesh2dInstances>,

crates/bevy_sprite_render/src/render/mod.rs

Lines changed: 3 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use bevy_ecs::{
1717
query::ROQueryItem,
1818
system::{lifetimeless::*, SystemParamItem},
1919
};
20-
use bevy_image::{BevyDefault, Image, ImageSampler, TextureAtlasLayout, TextureFormatPixelInfo};
20+
use bevy_image::{BevyDefault, Image, TextureAtlasLayout};
2121
use bevy_math::{Affine3A, FloatOrd, Quat, Rect, Vec2, Vec4};
2222
use bevy_mesh::VertexBufferLayout;
2323
use bevy_platform::collections::HashMap;
@@ -34,7 +34,7 @@ use bevy_render::{
3434
},
3535
renderer::{RenderDevice, RenderQueue},
3636
sync_world::RenderEntity,
37-
texture::{DefaultImageSampler, FallbackImage, GpuImage},
37+
texture::{FallbackImage, GpuImage},
3838
view::{ExtractedView, Msaa, ViewTarget, ViewUniform, ViewUniformOffset, ViewUniforms},
3939
Extract,
4040
};
@@ -50,16 +50,9 @@ pub struct SpritePipeline {
5050
view_layout: BindGroupLayoutDescriptor,
5151
material_layout: BindGroupLayoutDescriptor,
5252
shader: Handle<Shader>,
53-
pub dummy_white_gpu_image: GpuImage,
5453
}
5554

56-
pub fn init_sprite_pipeline(
57-
mut commands: Commands,
58-
render_device: Res<RenderDevice>,
59-
default_sampler: Res<DefaultImageSampler>,
60-
render_queue: Res<RenderQueue>,
61-
asset_server: Res<AssetServer>,
62-
) {
55+
pub fn init_sprite_pipeline(mut commands: Commands, asset_server: Res<AssetServer>) {
6356
let tonemapping_lut_entries = get_lut_bind_group_layout_entries();
6457
let view_layout = BindGroupLayoutDescriptor::new(
6558
"sprite_view_layout",
@@ -83,43 +76,10 @@ pub fn init_sprite_pipeline(
8376
),
8477
),
8578
);
86-
let dummy_white_gpu_image = {
87-
let image = Image::default();
88-
let texture = render_device.create_texture(&image.texture_descriptor);
89-
let sampler = match image.sampler {
90-
ImageSampler::Default => (**default_sampler).clone(),
91-
ImageSampler::Descriptor(ref descriptor) => {
92-
render_device.create_sampler(&descriptor.as_wgpu())
93-
}
94-
};
95-
96-
if let Ok(format_size) = image.texture_descriptor.format.pixel_size() {
97-
render_queue.write_texture(
98-
texture.as_image_copy(),
99-
image.data.as_ref().expect("Image has no data"),
100-
TexelCopyBufferLayout {
101-
offset: 0,
102-
bytes_per_row: Some(image.width() * format_size as u32),
103-
rows_per_image: None,
104-
},
105-
image.texture_descriptor.size,
106-
);
107-
}
108-
let texture_view = texture.create_view(&TextureViewDescriptor::default());
109-
GpuImage {
110-
texture,
111-
texture_view,
112-
texture_format: image.texture_descriptor.format,
113-
sampler,
114-
size: image.texture_descriptor.size,
115-
mip_level_count: image.texture_descriptor.mip_level_count,
116-
}
117-
};
11879

11980
commands.insert_resource(SpritePipeline {
12081
view_layout,
12182
material_layout,
122-
dummy_white_gpu_image,
12383
shader: load_embedded_asset!(asset_server.as_ref(), "sprite.wgsl"),
12484
});
12585
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
title: "Removed `dummy_white_gpu_image`"
3+
pull_requests: [21572]
4+
---
5+
6+
`MeshPipeline`, `Mesh2dPipeline` and `SpritePipeline` no longer have `dummy_white_gpu_image`.
7+
8+
`MeshPipeline` and `Mesh2dPipeline` no longer have `get_image_texture()` in their `impl`.
9+
10+
The method `build_dummy_white_gpu_image()` and `get_image_texture()` can be used if needed.

0 commit comments

Comments
 (0)