7
7
// notice may not be copied, modified, or distributed except
8
8
// according to those terms.
9
9
10
+ use std:: iter;
11
+ use buffer:: Buffer ;
10
12
use descriptor:: descriptor:: DescriptorDesc ;
11
13
use descriptor:: descriptor_set:: DescriptorSet ;
12
14
use descriptor:: descriptor_set:: DescriptorSetDesc ;
13
15
use descriptor:: descriptor_set:: UnsafeDescriptorSet ;
16
+ use image:: Image ;
14
17
15
18
/// A collection of descriptor set objects.
16
19
pub unsafe trait DescriptorSetsCollection {
@@ -31,6 +34,12 @@ pub unsafe trait DescriptorSetsCollection {
31
34
///
32
35
/// Returns `None` if out of range.
33
36
fn descriptor ( & self , set : usize , binding : usize ) -> Option < DescriptorDesc > ;
37
+
38
+ /// Returns the list of buffers used by this descriptor set. Includes buffer views.
39
+ fn buffers_list < ' a > ( & ' a self ) -> Box < Iterator < Item = & ' a Buffer > + ' a > ;
40
+
41
+ /// Returns the list of images used by this descriptor set. Includes image views.
42
+ fn images_list < ' a > ( & ' a self ) -> Box < Iterator < Item = & ' a Image > + ' a > ;
34
43
}
35
44
36
45
unsafe impl DescriptorSetsCollection for ( ) {
@@ -53,6 +62,16 @@ unsafe impl DescriptorSetsCollection for () {
53
62
fn descriptor ( & self , set : usize , binding : usize ) -> Option < DescriptorDesc > {
54
63
None
55
64
}
65
+
66
+ #[ inline]
67
+ fn buffers_list < ' a > ( & ' a self ) -> Box < Iterator < Item = & ' a Buffer > + ' a > {
68
+ Box :: new ( iter:: empty ( ) )
69
+ }
70
+
71
+ #[ inline]
72
+ fn images_list < ' a > ( & ' a self ) -> Box < Iterator < Item = & ' a Image > + ' a > {
73
+ Box :: new ( iter:: empty ( ) )
74
+ }
56
75
}
57
76
58
77
unsafe impl < T > DescriptorSetsCollection for T
@@ -86,6 +105,16 @@ unsafe impl<T> DescriptorSetsCollection for T
86
105
_ => None
87
106
}
88
107
}
108
+
109
+ #[ inline]
110
+ fn buffers_list < ' a > ( & ' a self ) -> Box < Iterator < Item = & ' a Buffer > + ' a > {
111
+ DescriptorSet :: buffers_list ( self )
112
+ }
113
+
114
+ #[ inline]
115
+ fn images_list < ' a > ( & ' a self ) -> Box < Iterator < Item = & ' a Image > + ' a > {
116
+ DescriptorSet :: images_list ( self )
117
+ }
89
118
}
90
119
91
120
macro_rules! impl_collection {
@@ -162,6 +191,26 @@ macro_rules! impl_collection {
162
191
163
192
None
164
193
}
194
+
195
+ #[ inline]
196
+ fn buffers_list<' a>( & ' a self ) -> Box <Iterator <Item = & ' a Buffer > + ' a> {
197
+ let & ( first, $( ref $others, ) * ) = self ;
198
+ let iter = first. buffers_list( ) ;
199
+ $(
200
+ let iter = iter. chain( $others. buffers_list( ) ) ;
201
+ ) *
202
+ Box :: new( iter)
203
+ }
204
+
205
+ #[ inline]
206
+ fn images_list<' a>( & ' a self ) -> Box <Iterator <Item = & ' a Image > + ' a> {
207
+ let & ( first, $( ref $others, ) * ) = self ;
208
+ let iter = first. images_list( ) ;
209
+ $(
210
+ let iter = iter. chain( $others. images_list( ) ) ;
211
+ ) *
212
+ Box :: new( iter)
213
+ }
165
214
}
166
215
167
216
impl_collection!( $( $others) ,* ) ;
0 commit comments