|
1 | | -// Test `OpImageQuerySizeLod` on `SampledImage` |
2 | 1 | // build-pass |
3 | | -// compile-flags: -C target-feature=+ImageQuery |
| 2 | +// compile-flags: -C target-feature=+ImageQuery,+Sampled1D |
4 | 3 |
|
5 | 4 | use spirv_std::spirv; |
6 | 5 | use spirv_std::{Image, arch, image::SampledImage}; |
7 | 6 |
|
8 | 7 | #[spirv(fragment)] |
9 | 8 | pub fn main( |
10 | | - #[spirv(descriptor_set = 0, binding = 0)] sampled_image2d: &SampledImage< |
| 9 | + #[spirv(descriptor_set = 0, binding = 0)] sampled_image1d: &SampledImage< |
| 10 | + Image!(1D, type=f32, sampled), |
| 11 | + >, |
| 12 | + #[spirv(descriptor_set = 1, binding = 1)] sampled_image1d_array: &SampledImage< |
| 13 | + Image!(1D, type=f32, arrayed, sampled), |
| 14 | + >, |
| 15 | + #[spirv(descriptor_set = 2, binding = 2)] sampled_image2d: &SampledImage< |
11 | 16 | Image!(2D, type=f32, sampled), |
12 | 17 | >, |
13 | | - #[spirv(descriptor_set = 1, binding = 1)] sampled_image2d_array: &SampledImage< |
| 18 | + #[spirv(descriptor_set = 3, binding = 3)] sampled_image2d_array: &SampledImage< |
14 | 19 | Image!(2D, type=f32, arrayed, sampled), |
15 | 20 | >, |
16 | | - #[spirv(descriptor_set = 2, binding = 2)] sampled_image3d: &SampledImage< |
| 21 | + #[spirv(descriptor_set = 4, binding = 4)] sampled_image3d: &SampledImage< |
17 | 22 | Image!(3D, type=f32, sampled), |
18 | 23 | >, |
19 | | - output: &mut glam::UVec3, |
| 24 | + #[spirv(descriptor_set = 5, binding = 5)] sampled_image3d_array: &SampledImage< |
| 25 | + Image!(3D, type=f32, arrayed, sampled), |
| 26 | + >, |
| 27 | + output: &mut glam::UVec4, |
20 | 28 | ) { |
21 | | - // For sampled images, we need to use query_size_lod |
| 29 | + // 1D images return scalar |
| 30 | + let size_1d: u32 = sampled_image1d.query_size_lod(0); |
| 31 | + |
| 32 | + // 1D arrayed images return 2 components (width, array_layers) |
| 33 | + let size_1d_array: glam::UVec2 = sampled_image1d_array.query_size_lod(0); |
| 34 | + |
| 35 | + // 2D images return 2 components |
22 | 36 | let size_2d: glam::UVec2 = sampled_image2d.query_size_lod(0); |
| 37 | + |
| 38 | + // 2D arrayed images return 3 components |
23 | 39 | let size_2d_array: glam::UVec3 = sampled_image2d_array.query_size_lod(0); |
| 40 | + |
| 41 | + // 3D images return 3 components |
24 | 42 | let size_3d: glam::UVec3 = sampled_image3d.query_size_lod(0); |
25 | 43 |
|
26 | | - *output = glam::UVec3::new(size_2d.x, size_2d_array.y, size_3d.z); |
| 44 | + // 3D arrayed images return 4 components (width, height, depth, array_layers) |
| 45 | + let size_3d_array: glam::UVec4 = sampled_image3d_array.query_size_lod(0); |
| 46 | + |
| 47 | + *output = glam::UVec4::new( |
| 48 | + size_1d, |
| 49 | + size_1d_array.y, |
| 50 | + size_2d.x + size_3d.z, |
| 51 | + size_3d_array.w, |
| 52 | + ); |
27 | 53 | } |
0 commit comments