Skip to content

Commit

Permalink
gles: make TextureView impl Copy
Browse files Browse the repository at this point in the history
  • Loading branch information
kvark authored and jimblandy committed Jan 6, 2023
1 parent 211c314 commit ad1df30
Show file tree
Hide file tree
Showing 7 changed files with 35 additions and 48 deletions.
2 changes: 1 addition & 1 deletion wgpu-hal/src/empty.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ pub struct Api;
pub struct Context;
#[derive(Debug)]
pub struct Encoder;
#[derive(Debug)]
#[derive(Clone, Copy, Debug)]
pub struct Resource;

type DeviceResult<T> = Result<T, crate::DeviceError>;
Expand Down
20 changes: 9 additions & 11 deletions wgpu-hal/src/gles/command.rs
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ impl crate::CommandEncoder<super::Api> for super::CommandEncoder {

unsafe fn clear_buffer(&mut self, buffer: &super::Buffer, range: crate::MemoryRange) {
self.cmd_buffer.commands.push(C::ClearBuffer {
dst: buffer.clone(),
dst: *buffer,
dst_target: buffer.target,
range,
});
Expand All @@ -300,9 +300,9 @@ impl crate::CommandEncoder<super::Api> for super::CommandEncoder {
};
for copy in regions {
self.cmd_buffer.commands.push(C::CopyBufferToBuffer {
src: src.clone(),
src: *src,
src_target,
dst: dst.clone(),
dst: *dst,
dst_target,
copy,
})
Expand Down Expand Up @@ -346,7 +346,7 @@ impl crate::CommandEncoder<super::Api> for super::CommandEncoder {
for mut copy in regions {
copy.clamp_size_to_virtual(&dst.copy_size);
self.cmd_buffer.commands.push(C::CopyBufferToTexture {
src: src.clone(),
src: *src,
src_target: src.target,
dst: dst_raw,
dst_target,
Expand All @@ -372,7 +372,7 @@ impl crate::CommandEncoder<super::Api> for super::CommandEncoder {
src: src_raw,
src_target,
src_format: src.format,
dst: dst.clone(),
dst: *dst,
dst_target: dst.target,
copy,
})
Expand Down Expand Up @@ -409,7 +409,7 @@ impl crate::CommandEncoder<super::Api> for super::CommandEncoder {
let query_range = start as u32..self.cmd_buffer.queries.len() as u32;
self.cmd_buffer.commands.push(C::CopyQueryResults {
query_range,
dst: buffer.clone(),
dst: *buffer,
dst_target: buffer.target,
dst_offset: offset,
});
Expand Down Expand Up @@ -450,12 +450,10 @@ impl crate::CommandEncoder<super::Api> for super::CommandEncoder {
let attachment = glow::COLOR_ATTACHMENT0 + i as u32;
self.cmd_buffer.commands.push(C::BindAttachment {
attachment,
view: cat.target.view.clone(),
view: *cat.target.view,
});
if let Some(ref rat) = cat.resolve_target {
self.state
.resolve_attachments
.push((attachment, rat.view.clone()));
self.state.resolve_attachments.push((attachment, *rat.view));
}
if !cat.ops.contains(crate::AttachmentOps::STORE) {
self.state.invalidate_attachments.push(attachment);
Expand All @@ -471,7 +469,7 @@ impl crate::CommandEncoder<super::Api> for super::CommandEncoder {
};
self.cmd_buffer.commands.push(C::BindAttachment {
attachment,
view: dsat.target.view.clone(),
view: *dsat.target.view,
});
if aspects.contains(crate::FormatAspects::DEPTH)
&& !dsat.depth_ops.contains(crate::AttachmentOps::STORE)
Expand Down
27 changes: 10 additions & 17 deletions wgpu-hal/src/gles/device.rs
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,6 @@ impl super::Device {
target,
},
externally_owned,
mip_level_count: desc.mip_level_count,
array_layer_count: if desc.dimension == wgt::TextureDimension::D2 {
desc.size.depth_or_array_layers
} else {
Expand Down Expand Up @@ -135,7 +134,6 @@ impl super::Device {
raw: glow::NativeRenderbuffer(name),
},
externally_owned,
mip_level_count: desc.mip_level_count,
array_layer_count: if desc.dimension == wgt::TextureDimension::D2 {
desc.size.depth_or_array_layers
} else {
Expand Down Expand Up @@ -741,7 +739,6 @@ impl crate::Device<super::Api> for super::Device {
Ok(super::Texture {
inner,
externally_owned: false,
mip_level_count: desc.mip_level_count,
array_layer_count: if desc.dimension == wgt::TextureDimension::D2 {
desc.size.depth_or_array_layers
} else {
Expand Down Expand Up @@ -773,22 +770,18 @@ impl crate::Device<super::Api> for super::Device {
texture: &super::Texture,
desc: &crate::TextureViewDescriptor,
) -> Result<super::TextureView, crate::DeviceError> {
let end_array_layer = match desc.range.array_layer_count {
Some(count) => desc.range.base_array_layer + count.get(),
None => texture.array_layer_count,
};
let end_mip_level = match desc.range.mip_level_count {
Some(count) => desc.range.base_mip_level + count.get(),
None => texture.mip_level_count,
};
Ok(super::TextureView {
//TODO: use `conv::map_view_dimension(desc.dimension)`?
inner: texture.inner.clone(),
inner: texture.inner,
sample_type: texture.format.describe().sample_type,
aspects: crate::FormatAspects::from(texture.format)
& crate::FormatAspects::from(desc.range.aspect),
mip_levels: desc.range.base_mip_level..end_mip_level,
array_layers: desc.range.base_array_layer..end_array_layer,
base_mip_level: desc.range.base_mip_level,
base_array_layer: desc.range.base_array_layer,
array_layer_count: match desc.range.array_layer_count {
Some(count) => count.get(),
None => texture.array_layer_count,
},
format: texture.format,
})
}
Expand Down Expand Up @@ -1007,7 +1000,7 @@ impl crate::Device<super::Api> for super::Device {
}
wgt::BindingType::Texture { .. } => {
let view = desc.textures[entry.resource_index as usize].view;
if view.mip_levels.start != 0 || view.array_layers.start != 0 {
if view.base_mip_level != 0 || view.base_array_layer != 0 {
log::error!("Unable to create a sampled texture binding for non-zero mipmap level or array layer.\n{}",
"This is an implementation problem of wgpu-hal/gles backend.")
}
Expand All @@ -1024,11 +1017,11 @@ impl crate::Device<super::Api> for super::Device {
let (raw, _target) = view.inner.as_native();
super::RawBinding::Image(super::ImageBinding {
raw,
mip_level: view.mip_levels.start,
mip_level: view.base_mip_level,
array_layer: match view_dimension {
wgt::TextureViewDimension::D2Array
| wgt::TextureViewDimension::CubeArray => None,
_ => Some(view.array_layers.start),
_ => Some(view.base_array_layer),
},
access: conv::map_storage_access(access),
format: format_desc.internal,
Expand Down
3 changes: 1 addition & 2 deletions wgpu-hal/src/gles/egl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1259,9 +1259,8 @@ impl crate::Surface<super::Api> for Surface {
},
externally_owned: false,
array_layer_count: 1,
mip_level_count: 1,
format: sc.format,
format_desc: sc.format_desc.clone(),
format_desc: sc.format_desc,
copy_size: crate::CopyExtent {
width: sc.extent.width,
height: sc.extent.height,
Expand Down
9 changes: 4 additions & 5 deletions wgpu-hal/src/gles/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,6 @@ impl TextureInner {
pub struct Texture {
inner: TextureInner,
externally_owned: bool,
mip_level_count: u32,
array_layer_count: u32,
format: wgt::TextureFormat,
#[allow(unused)]
Expand All @@ -281,7 +280,6 @@ impl Texture {
Self {
inner: TextureInner::DefaultRenderbuffer,
externally_owned: false,
mip_level_count: 1,
array_layer_count: 1,
format,
format_desc: TextureFormatDesc {
Expand Down Expand Up @@ -332,13 +330,14 @@ impl Texture {
}
}

#[derive(Clone, Debug)]
#[derive(Clone, Copy, Debug)]
pub struct TextureView {
inner: TextureInner,
sample_type: wgt::TextureSampleType,
aspects: crate::FormatAspects,
mip_levels: Range<u32>,
array_layers: Range<u32>,
base_mip_level: u32,
base_array_layer: u32,
array_layer_count: u32,
format: wgt::TextureFormat,
}

Expand Down
19 changes: 9 additions & 10 deletions wgpu-hal/src/gles/queue.rs
Original file line number Diff line number Diff line change
Expand Up @@ -98,17 +98,16 @@ impl super::Queue {
}
super::TextureInner::DefaultRenderbuffer => panic!("Unexpected default RBO"),
super::TextureInner::Texture { raw, target } => {
let num_layers = view.array_layers.end - view.array_layers.start;
if num_layers > 1 {
if view.array_layer_count > 1 {
#[cfg(all(target_arch = "wasm32", target_os = "unknown"))]
unsafe {
gl.framebuffer_texture_multiview_ovr(
fbo_target,
attachment,
Some(raw),
view.mip_levels.start as i32,
view.array_layers.start as i32,
num_layers as i32,
view.base_mip_level as i32,
view.base_array_layer as i32,
view.array_layer_count as i32,
)
};
} else if is_layered_target(target) {
Expand All @@ -117,18 +116,18 @@ impl super::Queue {
fbo_target,
attachment,
Some(raw),
view.mip_levels.start as i32,
view.array_layers.start as i32,
view.base_mip_level as i32,
view.base_array_layer as i32,
)
};
} else if target == glow::TEXTURE_CUBE_MAP {
unsafe {
gl.framebuffer_texture_2d(
fbo_target,
attachment,
CUBEMAP_FACES[view.array_layers.start as usize],
CUBEMAP_FACES[view.base_array_layer as usize],
Some(raw),
view.mip_levels.start as i32,
view.base_mip_level as i32,
)
};
} else {
Expand All @@ -138,7 +137,7 @@ impl super::Queue {
attachment,
target,
Some(raw),
view.mip_levels.start as i32,
view.base_mip_level as i32,
)
};
}
Expand Down
3 changes: 1 addition & 2 deletions wgpu-hal/src/gles/web.rs
Original file line number Diff line number Diff line change
Expand Up @@ -358,9 +358,8 @@ impl crate::Surface<super::Api> for Surface {
},
externally_owned: false,
array_layer_count: 1,
mip_level_count: 1,
format: sc.format,
format_desc: sc.format_desc.clone(),
format_desc: sc.format_desc,
copy_size: crate::CopyExtent {
width: sc.extent.width,
height: sc.extent.height,
Expand Down

0 comments on commit ad1df30

Please sign in to comment.