Skip to content

Commit 31b40cf

Browse files
committed
gles: make TextureView impl Copy
1 parent 8b0df02 commit 31b40cf

6 files changed

Lines changed: 34 additions & 46 deletions

File tree

wgpu-hal/src/empty.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ pub struct Api;
77
pub struct Context;
88
#[derive(Debug)]
99
pub struct Encoder;
10-
#[derive(Debug)]
10+
#[derive(Clone, Copy, Debug)]
1111
pub struct Resource;
1212

1313
type DeviceResult<T> = Result<T, crate::DeviceError>;

wgpu-hal/src/gles/command.rs

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ impl crate::CommandEncoder<super::Api> for super::CommandEncoder {
279279

280280
unsafe fn clear_buffer(&mut self, buffer: &super::Buffer, range: crate::MemoryRange) {
281281
self.cmd_buffer.commands.push(C::ClearBuffer {
282-
dst: buffer.clone(),
282+
dst: *buffer,
283283
dst_target: buffer.target,
284284
range,
285285
});
@@ -300,9 +300,9 @@ impl crate::CommandEncoder<super::Api> for super::CommandEncoder {
300300
};
301301
for copy in regions {
302302
self.cmd_buffer.commands.push(C::CopyBufferToBuffer {
303-
src: src.clone(),
303+
src: *src,
304304
src_target,
305-
dst: dst.clone(),
305+
dst: *dst,
306306
dst_target,
307307
copy,
308308
})
@@ -346,7 +346,7 @@ impl crate::CommandEncoder<super::Api> for super::CommandEncoder {
346346
for mut copy in regions {
347347
copy.clamp_size_to_virtual(&dst.copy_size);
348348
self.cmd_buffer.commands.push(C::CopyBufferToTexture {
349-
src: src.clone(),
349+
src: *src,
350350
src_target: src.target,
351351
dst: dst_raw,
352352
dst_target,
@@ -372,7 +372,7 @@ impl crate::CommandEncoder<super::Api> for super::CommandEncoder {
372372
src: src_raw,
373373
src_target,
374374
src_format: src.format,
375-
dst: dst.clone(),
375+
dst: *dst,
376376
dst_target: dst.target,
377377
copy,
378378
})
@@ -409,7 +409,7 @@ impl crate::CommandEncoder<super::Api> for super::CommandEncoder {
409409
let query_range = start as u32..self.cmd_buffer.queries.len() as u32;
410410
self.cmd_buffer.commands.push(C::CopyQueryResults {
411411
query_range,
412-
dst: buffer.clone(),
412+
dst: *buffer,
413413
dst_target: buffer.target,
414414
dst_offset: offset,
415415
});
@@ -450,12 +450,10 @@ impl crate::CommandEncoder<super::Api> for super::CommandEncoder {
450450
let attachment = glow::COLOR_ATTACHMENT0 + i as u32;
451451
self.cmd_buffer.commands.push(C::BindAttachment {
452452
attachment,
453-
view: cat.target.view.clone(),
453+
view: *cat.target.view,
454454
});
455455
if let Some(ref rat) = cat.resolve_target {
456-
self.state
457-
.resolve_attachments
458-
.push((attachment, rat.view.clone()));
456+
self.state.resolve_attachments.push((attachment, *rat.view));
459457
}
460458
if !cat.ops.contains(crate::AttachmentOps::STORE) {
461459
self.state.invalidate_attachments.push(attachment);
@@ -471,7 +469,7 @@ impl crate::CommandEncoder<super::Api> for super::CommandEncoder {
471469
};
472470
self.cmd_buffer.commands.push(C::BindAttachment {
473471
attachment,
474-
view: dsat.target.view.clone(),
472+
view: *dsat.target.view,
475473
});
476474
if aspects.contains(crate::FormatAspects::DEPTH)
477475
&& !dsat.depth_ops.contains(crate::AttachmentOps::STORE)

wgpu-hal/src/gles/device.rs

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,6 @@ impl super::Device {
103103
target,
104104
},
105105
externally_owned,
106-
mip_level_count: desc.mip_level_count,
107106
array_layer_count: if desc.dimension == wgt::TextureDimension::D2 {
108107
desc.size.depth_or_array_layers
109108
} else {
@@ -135,7 +134,6 @@ impl super::Device {
135134
raw: glow::NativeRenderbuffer(name),
136135
},
137136
externally_owned,
138-
mip_level_count: desc.mip_level_count,
139137
array_layer_count: if desc.dimension == wgt::TextureDimension::D2 {
140138
desc.size.depth_or_array_layers
141139
} else {
@@ -711,7 +709,6 @@ impl crate::Device<super::Api> for super::Device {
711709
Ok(super::Texture {
712710
inner,
713711
externally_owned: false,
714-
mip_level_count: desc.mip_level_count,
715712
array_layer_count: if desc.dimension == wgt::TextureDimension::D2 {
716713
desc.size.depth_or_array_layers
717714
} else {
@@ -743,22 +740,18 @@ impl crate::Device<super::Api> for super::Device {
743740
texture: &super::Texture,
744741
desc: &crate::TextureViewDescriptor,
745742
) -> Result<super::TextureView, crate::DeviceError> {
746-
let end_array_layer = match desc.range.array_layer_count {
747-
Some(count) => desc.range.base_array_layer + count.get(),
748-
None => texture.array_layer_count,
749-
};
750-
let end_mip_level = match desc.range.mip_level_count {
751-
Some(count) => desc.range.base_mip_level + count.get(),
752-
None => texture.mip_level_count,
753-
};
754743
Ok(super::TextureView {
755744
//TODO: use `conv::map_view_dimension(desc.dimension)`?
756-
inner: texture.inner.clone(),
745+
inner: texture.inner,
757746
sample_type: texture.format.describe().sample_type,
758747
aspects: crate::FormatAspects::from(texture.format)
759748
& crate::FormatAspects::from(desc.range.aspect),
760-
mip_levels: desc.range.base_mip_level..end_mip_level,
761-
array_layers: desc.range.base_array_layer..end_array_layer,
749+
base_mip_level: desc.range.base_mip_level,
750+
base_array_layer: desc.range.base_array_layer,
751+
array_layer_count: match desc.range.array_layer_count {
752+
Some(count) => count.get(),
753+
None => texture.array_layer_count,
754+
},
762755
format: texture.format,
763756
})
764757
}
@@ -964,7 +957,7 @@ impl crate::Device<super::Api> for super::Device {
964957
}
965958
wgt::BindingType::Texture { .. } => {
966959
let view = desc.textures[entry.resource_index as usize].view;
967-
if view.mip_levels.start != 0 || view.array_layers.start != 0 {
960+
if view.base_mip_level != 0 || view.base_array_layer != 0 {
968961
log::error!("Unable to create a sampled texture binding for non-zero mipmap level or array layer.\n{}",
969962
"This is an implementation problem of wgpu-hal/gles backend.")
970963
}
@@ -981,11 +974,11 @@ impl crate::Device<super::Api> for super::Device {
981974
let (raw, _target) = view.inner.as_native();
982975
super::RawBinding::Image(super::ImageBinding {
983976
raw,
984-
mip_level: view.mip_levels.start,
977+
mip_level: view.base_mip_level,
985978
array_layer: match view_dimension {
986979
wgt::TextureViewDimension::D2Array
987980
| wgt::TextureViewDimension::CubeArray => None,
988-
_ => Some(view.array_layers.start),
981+
_ => Some(view.base_array_layer),
989982
},
990983
access: conv::map_storage_access(access),
991984
format: format_desc.internal,

wgpu-hal/src/gles/egl.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1239,9 +1239,8 @@ impl crate::Surface<super::Api> for Surface {
12391239
},
12401240
externally_owned: false,
12411241
array_layer_count: 1,
1242-
mip_level_count: 1,
12431242
format: sc.format,
1244-
format_desc: sc.format_desc.clone(),
1243+
format_desc: sc.format_desc,
12451244
copy_size: crate::CopyExtent {
12461245
width: sc.extent.width,
12471246
height: sc.extent.height,

wgpu-hal/src/gles/mod.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,6 @@ impl TextureInner {
265265
pub struct Texture {
266266
inner: TextureInner,
267267
externally_owned: bool,
268-
mip_level_count: u32,
269268
array_layer_count: u32,
270269
format: wgt::TextureFormat,
271270
#[allow(unused)]
@@ -279,7 +278,6 @@ impl Texture {
279278
Self {
280279
inner: TextureInner::DefaultRenderbuffer,
281280
externally_owned: false,
282-
mip_level_count: 1,
283281
array_layer_count: 1,
284282
format,
285283
format_desc: TextureFormatDesc {
@@ -330,13 +328,14 @@ impl Texture {
330328
}
331329
}
332330

333-
#[derive(Clone, Debug)]
331+
#[derive(Clone, Copy, Debug)]
334332
pub struct TextureView {
335333
inner: TextureInner,
336334
sample_type: wgt::TextureSampleType,
337335
aspects: crate::FormatAspects,
338-
mip_levels: Range<u32>,
339-
array_layers: Range<u32>,
336+
base_mip_level: u32,
337+
base_array_layer: u32,
338+
array_layer_count: u32,
340339
format: wgt::TextureFormat,
341340
}
342341

wgpu-hal/src/gles/queue.rs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -89,40 +89,39 @@ impl super::Queue {
8989
}
9090
super::TextureInner::DefaultRenderbuffer => panic!("Unexpected default RBO"),
9191
super::TextureInner::Texture { raw, target } => {
92-
let num_layers = view.array_layers.end - view.array_layers.start;
93-
if num_layers > 1 {
92+
if view.array_layer_count > 1 {
9493
#[cfg(all(target_arch = "wasm32", target_os = "unknown"))]
9594
gl.framebuffer_texture_multiview_ovr(
9695
fbo_target,
9796
attachment,
9897
Some(raw),
99-
view.mip_levels.start as i32,
100-
view.array_layers.start as i32,
101-
num_layers as i32,
98+
view.base_mip_level as i32,
99+
view.base_array_layer as i32,
100+
view.array_layer_count as i32,
102101
);
103102
} else if is_layered_target(target) {
104103
gl.framebuffer_texture_layer(
105104
fbo_target,
106105
attachment,
107106
Some(raw),
108-
view.mip_levels.start as i32,
109-
view.array_layers.start as i32,
107+
view.base_mip_level as i32,
108+
view.base_array_layer as i32,
110109
);
111110
} else if target == glow::TEXTURE_CUBE_MAP {
112111
gl.framebuffer_texture_2d(
113112
fbo_target,
114113
attachment,
115-
CUBEMAP_FACES[view.array_layers.start as usize],
114+
CUBEMAP_FACES[view.base_array_layer as usize],
116115
Some(raw),
117-
view.mip_levels.start as i32,
116+
view.base_mip_level as i32,
118117
);
119118
} else {
120119
gl.framebuffer_texture_2d(
121120
fbo_target,
122121
attachment,
123122
target,
124123
Some(raw),
125-
view.mip_levels.start as i32,
124+
view.base_mip_level as i32,
126125
);
127126
}
128127
}

0 commit comments

Comments
 (0)