1 use crate::{buffer, image};
2 
3 use std::ops::Range;
4 
5 /// Specifies a source region and a destination
6 /// region in a buffer for copying.  All values
7 /// are in units of bytes.
8 #[derive(Clone, Copy, Debug)]
9 #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
10 pub struct BufferCopy {
11     /// Buffer region source offset.
12     pub src: buffer::Offset,
13     /// Buffer region destination offset.
14     pub dst: buffer::Offset,
15     /// Region size.
16     pub size: buffer::Offset,
17 }
18 
19 /// Bundles together all the parameters needed to copy data from one `Image`
20 /// to another.
21 #[derive(Clone, Debug)]
22 #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
23 pub struct ImageCopy {
24     /// The image subresource to copy from.
25     pub src_subresource: image::SubresourceLayers,
26     /// The source offset.
27     pub src_offset: image::Offset,
28     /// The image subresource to copy to.
29     pub dst_subresource: image::SubresourceLayers,
30     /// The destination offset.
31     pub dst_offset: image::Offset,
32     /// The extent of the region to copy.
33     pub extent: image::Extent,
34 }
35 
36 /// Bundles together all the parameters needed to copy a buffer
37 /// to an image or vice-versa.
38 #[derive(Clone, Debug)]
39 #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
40 pub struct BufferImageCopy {
41     /// Buffer offset in bytes.
42     pub buffer_offset: buffer::Offset,
43     /// Width of a buffer 'row' in texels.
44     pub buffer_width: u32,
45     /// Height of a buffer 'image slice' in texels.
46     pub buffer_height: u32,
47     /// The image subresource.
48     pub image_layers: image::SubresourceLayers,
49     /// The offset of the portion of the image to copy.
50     pub image_offset: image::Offset,
51     /// Size of the portion of the image to copy.
52     pub image_extent: image::Extent,
53 }
54 
55 /// Parameters for an image resolve operation,
56 /// where a multi-sampled image is copied into a single-sampled
57 /// image.
58 #[derive(Clone, Debug)]
59 #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
60 pub struct ImageResolve {
61     /// Source image and layers.
62     pub src_subresource: image::SubresourceLayers,
63     /// Source image offset.
64     pub src_offset: image::Offset,
65     /// Destination image and layers.
66     pub dst_subresource: image::SubresourceLayers,
67     /// Destination image offset.
68     pub dst_offset: image::Offset,
69     /// Image extent.
70     pub extent: image::Extent,
71 }
72 
73 /// Parameters for an image blit operation, where a portion of one image
74 /// is copied into another, possibly with scaling and filtering.
75 #[derive(Clone, Debug)]
76 #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
77 pub struct ImageBlit {
78     /// Source image and layers.
79     pub src_subresource: image::SubresourceLayers,
80     /// Source image bounds.
81     pub src_bounds: Range<image::Offset>,
82     /// Destination image and layers.
83     pub dst_subresource: image::SubresourceLayers,
84     /// Destination image bounds.
85     pub dst_bounds: Range<image::Offset>,
86 }
87