@@ -194,3 +194,68 @@ impl<V: Vector<S, 4>, S: Scalar>
194
194
pub trait ImageCoordinateSubpassData < T , const ARRAYED : u32 > { }
195
195
impl < V : Vector < I , 2 > , I : Integer > ImageCoordinateSubpassData < I , { Arrayed :: False as u32 } > for V { }
196
196
impl < V : Vector < I , 3 > , I : Integer > ImageCoordinateSubpassData < I , { Arrayed :: True as u32 } > for V { }
197
+
198
+ /// Marker trait for query size results based on image dimension and arraying.
199
+ ///
200
+ /// Unlike `ImageCoordinate`, this trait represents the SPIR-V size query results:
201
+ /// - 1D images return a scalar
202
+ /// - 2D/Cube/Rect images return 2 components (Cube returns face width/height)
203
+ /// - 3D images return 3 components
204
+ /// - Arrayed images add one component for the array size
205
+ pub trait ImageSizeQuery < T , const DIM : u32 , const ARRAYED : u32 > { }
206
+
207
+ // 1D images
208
+ impl < T : Scalar > ImageSizeQuery < T , { Dimensionality :: OneD as u32 } , { Arrayed :: False as u32 } >
209
+ for T
210
+ {
211
+ }
212
+ impl < V : Vector < T , 2 > , T : Scalar >
213
+ ImageSizeQuery < T , { Dimensionality :: OneD as u32 } , { Arrayed :: True as u32 } > for V
214
+ {
215
+ }
216
+
217
+ // 2D images
218
+ impl < V : Vector < T , 2 > , T : Scalar >
219
+ ImageSizeQuery < T , { Dimensionality :: TwoD as u32 } , { Arrayed :: False as u32 } > for V
220
+ {
221
+ }
222
+ impl < V : Vector < T , 3 > , T : Scalar >
223
+ ImageSizeQuery < T , { Dimensionality :: TwoD as u32 } , { Arrayed :: True as u32 } > for V
224
+ {
225
+ }
226
+
227
+ // 3D images
228
+ impl < V : Vector < T , 3 > , T : Scalar >
229
+ ImageSizeQuery < T , { Dimensionality :: ThreeD as u32 } , { Arrayed :: False as u32 } > for V
230
+ {
231
+ }
232
+ impl < V : Vector < T , 4 > , T : Scalar >
233
+ ImageSizeQuery < T , { Dimensionality :: ThreeD as u32 } , { Arrayed :: True as u32 } > for V
234
+ {
235
+ }
236
+
237
+ // Cube images - returns 2D size (width/height of face)
238
+ impl < V : Vector < T , 2 > , T : Scalar >
239
+ ImageSizeQuery < T , { Dimensionality :: Cube as u32 } , { Arrayed :: False as u32 } > for V
240
+ {
241
+ }
242
+ impl < V : Vector < T , 3 > , T : Scalar >
243
+ ImageSizeQuery < T , { Dimensionality :: Cube as u32 } , { Arrayed :: True as u32 } > for V
244
+ {
245
+ }
246
+
247
+ // Rect images
248
+ impl < V : Vector < T , 2 > , T : Scalar >
249
+ ImageSizeQuery < T , { Dimensionality :: Rect as u32 } , { Arrayed :: False as u32 } > for V
250
+ {
251
+ }
252
+ impl < V : Vector < T , 3 > , T : Scalar >
253
+ ImageSizeQuery < T , { Dimensionality :: Rect as u32 } , { Arrayed :: True as u32 } > for V
254
+ {
255
+ }
256
+
257
+ // Buffer images
258
+ impl < T : Scalar > ImageSizeQuery < T , { Dimensionality :: Buffer as u32 } , { Arrayed :: False as u32 } >
259
+ for T
260
+ {
261
+ }
0 commit comments