1     let max_physical_device_name_size : u32 = 256
2     let max_memory_types : u32 = 32
3     let max_memory_heaps : u32 = 16
4     let uuid_size : u32 = 16
5     
6     type PhysicalDeviceFeatures = struct
7         robust_buffer_access : u32
8         full_draw_index_ui32 : u32
9         image_cube_array : u32
10        independent_blend : u32
11        geometry_shader : u32
12        tessellation_shader : u32
13        sample_rate_shading : u32
14        dual_src_blend : u32
15        logic_op : u32
16        multi_draw_indirect : u32
17        draw_indirect_first_instance : u32
18        depth_clamp : u32
19        depth_bias_clamp : u32
20        fill_mode_non_solid : u32
21        depth_bounds : u32
22        wide_lines : u32
23        large_points : u32
24        alpha_to_one : u32
25        multi_viewport : u32
26        sampler_anisotropy : u32
27        texture_compression_etc2 : u32
28        texture_compression_astc_ldr : u32
29        texture_compression_bc : u32
30        occlusion_query_precise : u32
31        pipeline_statistics_query : u32
32        vertex_pipeline_stores_and_atomics : u32
33        fragment_stores_and_atomics : u32
34        shader_tessellation_and_geometry_point_size : u32
35        shader_image_gather_extended : u32
36        shader_storage_image_extended_formats : u32
37        shader_storage_image_multisample : u32
38        shader_storage_image_read_without_format : u32
39        shader_storage_image_write_without_format : u32
40        shader_uniform_buffer_array_dynamic_indexing : u32
41        shader_sampled_image_array_dynamic_indexing : u32
42        shader_storage_buffer_array_dynamic_indexing : u32
43        shader_storage_image_array_dynamic_indexing : u32
44        shader_clip_distance : u32
45        shader_cull_distance : u32
46        shader_float64 : u32
47        shader_int64 : u32
48        shader_int16 : u32
49        shader_resource_residency : u32
50        shader_resource_min_lod : u32
51        sparse_binding : u32
52        sparse_residency_buffer : u32
53        sparse_residency_image2d : u32
54        sparse_residency_image3d : u32
55        sparse_residency2samples : u32
56        sparse_residency4samples : u32
57        sparse_residency8samples : u32
58        sparse_residency16samples : u32
59        sparse_residency_aliased : u32
60        variable_multisample_rate : u32
61        inherited_queries : u32
62    
63    type PhysicalDeviceLimits = struct
64        max_image_dimension_1d : u32
65        max_image_dimension_2d : u32
66        max_image_dimension_3d : u32
67        max_image_dimension_cube : u32
68        max_image_array_layers : u32
69        max_texel_buffer_elements : u32
70        max_uniform_buffer_range : u32
71        max_storage_buffer_range : u32
72        max_push_constants_size : u32
73        max_memory_allocation_count : u32
74        max_sampler_allocation_count : u32
75        buffer_image_granularity : u64
76        sparse_address_space_size : u64
77        max_bound_descriptor_sets : u32
78        max_per_stage_descriptor_samplers : u32
79        max_per_stage_descriptor_uniform_buffers : u32
80        max_per_stage_descriptor_storage_buffers : u32
81        max_per_stage_descriptor_sampled_images : u32
82        max_per_stage_descriptor_storage_images : u32
83        max_per_stage_descriptor_input_attachments : u32
84        max_per_stage_resources : u32
85        max_descriptor_set_samplers : u32
86        max_descriptor_set_uniform_buffers : u32
87        max_descriptor_set_uniform_buffers_dynamic : u32
88        max_descriptor_set_storage_buffers : u32
89        max_descriptor_set_storage_buffers_dynamic : u32
90        max_descriptor_set_sampled_images : u32
91        max_descriptor_set_storage_images : u32
92        max_descriptor_set_input_attachments : u32
93        max_vertex_input_attributes : u32
94        max_vertex_input_bindings : u32
95        max_vertex_input_attribute_offset : u32
96        max_vertex_input_binding_stride : u32
97        max_vertex_output_components : u32
98        max_tessellation_generation_level : u32
99        max_tessellation_patch_size : u32
100       max_tessellation_control_per_vertex_input_components : u32
101       max_tessellation_control_per_vertex_output_components : u32
102       max_tessellation_control_per_patch_output_components : u32
103       max_tessellation_control_total_output_components : u32
104       max_tessellation_evaluation_input_components : u32
105       max_tessellation_evaluation_output_components : u32
106       max_geometry_shader_invocations : u32
107       max_geometry_input_components : u32
108       max_geometry_output_components : u32
109       max_geometry_output_vertices : u32
110       max_geometry_total_output_components : u32
111       max_fragment_input_components : u32
112       max_fragment_output_attachments : u32
113       max_fragment_dual_src_attachments : u32
114       max_fragment_combined_output_resources : u32
115       max_compute_shared_memory_size : u32
116       max_compute_work_group_count : [u32; 3]
117       max_compute_work_group_invocations : u32
118       max_compute_work_group_size : [u32; 3]
119       sub_pixel_precision_bits : u32
120       sub_texel_precision_bits : u32
121       mipmap_precision_bits : u32
122       max_draw_indexed_index_value : u32
123       max_draw_indirect_count : u32
124       max_sampler_lod_bias : f32
125       max_sampler_anisotropy : f32
126       max_viewports : u32
127       max_viewport_dimensions : [u32; 2]
128       viewport_bounds_range : [f32; 2]
129       viewport_sub_pixel_bits : u32
130       min_memory_map_alignment : usize
131       min_texel_buffer_offset_alignment : u64
132       min_uniform_buffer_offset_alignment : u64
133       min_storage_buffer_offset_alignment : u64
134       min_texel_offset : i32
135       max_texel_offset : u32
136       min_texel_gather_offset : i32
137       max_texel_gather_offset : u32
138       min_interpolation_offset : f32
139       max_interpolation_offset : f32
140       sub_pixel_interpolation_offset_bits : u32
141       max_framebuffer_width : u32
142       max_framebuffer_height : u32
143       max_framebuffer_layers : u32
144       framebuffer_color_sample_counts : SampleCountFlags
145       framebuffer_depth_sample_counts : SampleCountFlags
146       framebuffer_stencil_sample_counts : SampleCountFlags
147       framebuffer_no_attachments_sample_counts : SampleCountFlags
148       max_color_attachments : u32
149       sampled_image_color_sample_counts : SampleCountFlags
150       sampled_image_integer_sample_counts : SampleCountFlags
151       sampled_image_depth_sample_counts : SampleCountFlags
152       sampled_image_stencil_sample_counts : SampleCountFlags
153       storage_image_sample_counts : SampleCountFlags
154       max_sample_mask_words : u32
155       timestamp_compute_and_graphics : u32
156       timestamp_period : f32
157       max_clip_distances : u32
158       max_cull_distances : u32
159       max_combined_clip_and_cull_distances : u32
160       discrete_queue_priorities : u32
161       point_size_range : [f32; 2]
162       line_width_range : [f32; 2]
163       point_size_granularity : f32
164       line_width_granularity : f32
165       strict_lines : u32
166       standard_sample_locations : u32
167       optimal_buffer_copy_offset_alignment : u64
168       optimal_buffer_copy_row_pitch_alignment : u64
169       non_coherent_atom_size : u64
170   
171   type PhysicalDeviceSparseProperties = struct
172       residency_standard_2d_block_shape : u32
173       residency_standard_2d_multisample_block_shape : u32
174       residency_standard_3d_block_shape : u32
175       residency_aligned_mip_size : u32
176       residency_non_resident_strict : u32
177   
178   type PhysicalDeviceProperties = struct
179       api_version : u32
180       driver_version : u32
181       vendor_id : u32
182       device_id : u32
183       device_type : PhysicalDeviceType
184       device_name : [CChar; max_physical_device_name_size]
185       pipeline_cache_uuid : [u8; uuid_size]
186       limits : PhysicalDeviceLimits
187       sparse_properties : PhysicalDeviceSparseProperties
188   
189   type PhysicalDeviceMemoryProperties = struct
190       memory_type_count : u32
191       memory_types : [MemoryType; max_memory_types]
192       memory_heap_count : u32
193       memory_heaps : [MemoryHeap; max_memory_heaps]
194