1    type Image =
2        val name : String
3        val view_type : ViewType
4        val format : VkFormat
5        val width : u32
6        val height : u32
7        val depth : u32
8        val base_mip_level : u32
9        val mip_levels : u32
10       val base_layer : u32
11       val array_layers : u32
12       val samples : SampleCountFlags
13       val usage : ImageUsageFlags
14       var layout : ImageLayout @[mut internal]
15       let device : VkDevice
16       val sampler : VkSampler
17       val object : VkImage
18       let memory : VkMemory
19       val view : VkImageView
20       val size : u64
21   
22       def discard =
23           vk/destroy_image_view device view null
24           vk/destroy_image device object null
25           vk/free_memory device memory null
26           vk/destroy_sampler device sampler null
27   
28       def is_color_attachment =
29           usage.contains ImageUsageFlags/ColorAttachment
30   
31       def is_depth_attachment =
32           usage.contains ImageUsageFlags/DepthStencilAttachment
33   
34       def aspect_mask =
35           if is_depth_attachment then
36               if has_stencil format
37               then ImageAspectFlags/Depth | ImageAspectFlags/Stencil
38               else ImageAspectFlags/Depth
39           else
40               ImageAspectFlags/Color
41   
42       def subresource_range = ImageSubresourceRange
43           =aspect_mask
44           =base_mip_level
45           level_count = mip_levels
46           base_array_layer = base_layer
47           layer_count = array_layers
48   
49       def barrier_to self (layout : ImageLayout) = ImageMemoryBarrier
50           old_layout = self.layout
51           new_layout = layout
52           image = self.object
53           subresource_range = self.subresource_range
54           f@ ImageMemoryBarrier.default
55   
56   object ComponentMapping =
57       val default = ComponentMapping
58           r = ComponentSwizzle/R
59           g = ComponentSwizzle/G
60           b = ComponentSwizzle/B
61           a = ComponentSwizzle/A
62