Merge vk-gl-cts/dev/VK_KHR_ray_tracing_maintenance1 into vk-gl-cts/main

Change-Id: I1b78dec2819e963937d831f1b8c3e11e2428184a
diff --git a/android/cts/main/vk-master-2022-03-01/api.txt b/android/cts/main/vk-master-2022-03-01/api.txt
index 0583ceb..99775ce 100644
--- a/android/cts/main/vk-master-2022-03-01/api.txt
+++ b/android/cts/main/vk-master-2022-03-01/api.txt
@@ -12,10 +12,15 @@
 dEQP-VK.api.device_init.create_device_global_priority_khr.basic
 dEQP-VK.api.device_init.create_device_global_priority_query.basic
 dEQP-VK.api.device_init.create_device_global_priority_query_khr.basic
+dEQP-VK.api.device_init.create_device_unsupported_features.ray_tracing_maintenance1_features_khr
 dEQP-VK.api.device_init.create_device_unsupported_features.graphics_pipeline_library_features_ext
+dEQP-VK.api.device_init.create_device_unsupported_features.image_compression_control_features_ext
+dEQP-VK.api.device_init.create_device_unsupported_features.pipeline_properties_features_ext
 dEQP-VK.api.device_init.create_device_unsupported_features.primitives_generated_query_features_ext
 dEQP-VK.api.device_init.create_device_unsupported_features.image2_d_view_of3_d_features_ext
 dEQP-VK.api.device_init.create_device_unsupported_features.descriptor_set_host_mapping_features_valve
+dEQP-VK.api.device_init.create_device_unsupported_features.image_compression_control_swapchain_features_ext
+dEQP-VK.api.device_init.create_device_unsupported_features.subpass_merge_feedback_features_ext
 dEQP-VK.api.device_init.create_device_queue2_two_queues.basic
 dEQP-VK.api.device_init.create_device_queue2_all_protected.basic
 dEQP-VK.api.device_init.create_device_queue2_all_unprotected.basic
diff --git a/android/cts/main/vk-master-2022-03-01/ray-tracing-pipeline.txt b/android/cts/main/vk-master-2022-03-01/ray-tracing-pipeline.txt
index d762c4f..847d88b 100644
--- a/android/cts/main/vk-master-2022-03-01/ray-tracing-pipeline.txt
+++ b/android/cts/main/vk-master-2022-03-01/ray-tracing-pipeline.txt
@@ -1,3 +1,47 @@
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.0_0_0
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.0_1_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.1_0_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.1_1_0
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.8_1_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.8_8_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.8_8_8
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.11_1_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.11_13_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.11_13_5
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.0_0_0
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.0_1_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.1_0_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.1_1_0
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.8_1_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.8_8_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.8_8_8
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.11_1_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.11_13_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.11_13_5
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.ahit.4_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.ahit.4_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.ahit.16_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.ahit.16_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.chit.4_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.chit.4_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.chit.16_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.chit.16_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.isec.4_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.isec.4_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.isec.16_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.isec.16_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.ahit.4_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.ahit.4_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.ahit.16_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.ahit.16_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.chit.4_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.chit.4_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.chit.16_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.chit.16_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.isec.4_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.isec.4_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.isec.16_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.isec.16_bits_reverse
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.device_compability_khr.cpu_built.top
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.device_compability_khr.cpu_built.bottom
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.device_compability_khr.gpu_built.top
@@ -8,6 +52,20 @@
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.header_bottom_address.gpu_built.the_same_instances
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.header_bottom_address.gpu_built.different_instances
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.header_bottom_address.gpu_built.mix_same_diff_instances
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.memory.size
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.memory.pointer_count
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.buffer.size
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.buffer.pointer_count
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.memory.size
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.memory.pointer_count
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.buffer.size
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.buffer.pointer_count
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.cpu.stage_as_copy_bit
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.cpu.stage_all_transfer
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.cpu.access_sbt_read
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.stage_as_copy_bit
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.stage_all_transfer
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.access_sbt_read
 dEQP-VK.ray_tracing_pipeline.misc.null_miss
 dEQP-VK.ray_tracing_pipeline.inside_aabbs.chit.ray_end_tmax_zero.scaling_factor_0.rotation_0
 dEQP-VK.ray_tracing_pipeline.inside_aabbs.chit.ray_end_tmax_zero.scaling_factor_0.rotation_1
@@ -681,3 +739,35 @@
 dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit_or_isect
 dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit
 dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.full_copy.submit_graphics.11x17x1
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.full_copy.submit_graphics.19x11x2
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.full_copy.submit_graphics.23x47x3
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.full_copy.submit_graphics.47x19x4
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.full_copy.submit_compute.11x17x1
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.full_copy.submit_compute.19x11x2
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.full_copy.submit_compute.23x47x3
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.full_copy.submit_compute.47x19x4
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.partial_copy.submit_graphics.11x17x1
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.partial_copy.submit_graphics.19x11x2
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.partial_copy.submit_graphics.23x47x3
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.partial_copy.submit_graphics.47x19x4
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.partial_copy.submit_compute.11x17x1
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.partial_copy.submit_compute.19x11x2
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.partial_copy.submit_compute.23x47x3
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.partial_copy.submit_compute.47x19x4
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.full_copy.submit_graphics.11x17x1
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.full_copy.submit_graphics.19x11x2
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.full_copy.submit_graphics.23x47x3
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.full_copy.submit_graphics.47x19x4
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.full_copy.submit_compute.11x17x1
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.full_copy.submit_compute.19x11x2
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.full_copy.submit_compute.23x47x3
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.full_copy.submit_compute.47x19x4
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.partial_copy.submit_graphics.11x17x1
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.partial_copy.submit_graphics.19x11x2
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.partial_copy.submit_graphics.23x47x3
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.partial_copy.submit_graphics.47x19x4
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.partial_copy.submit_compute.11x17x1
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.partial_copy.submit_compute.19x11x2
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.partial_copy.submit_compute.23x47x3
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.partial_copy.submit_compute.47x19x4
diff --git a/android/cts/main/vk-master/api.txt b/android/cts/main/vk-master/api.txt
index a9b4b49..dcad966 100644
--- a/android/cts/main/vk-master/api.txt
+++ b/android/cts/main/vk-master/api.txt
@@ -3874,6 +3874,7 @@
 dEQP-VK.api.device_init.create_device_unsupported_features.present_id_features_khr
 dEQP-VK.api.device_init.create_device_unsupported_features.shader_subgroup_uniform_control_flow_features_khr
 dEQP-VK.api.device_init.create_device_unsupported_features.workgroup_memory_explicit_layout_features_khr
+dEQP-VK.api.device_init.create_device_unsupported_features.ray_tracing_maintenance1_features_khr
 dEQP-VK.api.device_init.create_device_unsupported_features.transform_feedback_features_ext
 dEQP-VK.api.device_init.create_device_unsupported_features.corner_sampled_image_features_nv
 dEQP-VK.api.device_init.create_device_unsupported_features.astc_decode_features_ext
@@ -3918,6 +3919,7 @@
 dEQP-VK.api.device_init.create_device_unsupported_features.ray_tracing_motion_blur_features_nv
 dEQP-VK.api.device_init.create_device_unsupported_features.ycbcr2_plane444_formats_features_ext
 dEQP-VK.api.device_init.create_device_unsupported_features.fragment_density_map2_features_ext
+dEQP-VK.api.device_init.create_device_unsupported_features.image_compression_control_features_ext
 dEQP-VK.api.device_init.create_device_unsupported_features.4444_formats_features_ext
 dEQP-VK.api.device_init.create_device_unsupported_features.rasterization_order_attachment_access_features_arm
 dEQP-VK.api.device_init.create_device_unsupported_features.rgba10_x6_formats_features_ext
@@ -3928,6 +3930,7 @@
 dEQP-VK.api.device_init.create_device_unsupported_features.subpass_shading_features_huawei
 dEQP-VK.api.device_init.create_device_unsupported_features.invocation_mask_features_huawei
 dEQP-VK.api.device_init.create_device_unsupported_features.external_memory_rdma_features_nv
+dEQP-VK.api.device_init.create_device_unsupported_features.pipeline_properties_features_ext
 dEQP-VK.api.device_init.create_device_unsupported_features.extended_dynamic_state2_features_ext
 dEQP-VK.api.device_init.create_device_unsupported_features.color_write_enable_features_ext
 dEQP-VK.api.device_init.create_device_unsupported_features.primitives_generated_query_features_ext
@@ -3939,6 +3942,8 @@
 dEQP-VK.api.device_init.create_device_unsupported_features.descriptor_set_host_mapping_features_valve
 dEQP-VK.api.device_init.create_device_unsupported_features.fragment_density_map_offset_features_qcom
 dEQP-VK.api.device_init.create_device_unsupported_features.linear_color_attachment_features_nv
+dEQP-VK.api.device_init.create_device_unsupported_features.image_compression_control_swapchain_features_ext
+dEQP-VK.api.device_init.create_device_unsupported_features.subpass_merge_feedback_features_ext
 dEQP-VK.api.device_init.create_device_unsupported_features.acceleration_structure_features_khr
 dEQP-VK.api.device_init.create_device_unsupported_features.ray_tracing_pipeline_features_khr
 dEQP-VK.api.device_init.create_device_unsupported_features.ray_query_features_khr
diff --git a/android/cts/main/vk-master/ray-tracing-pipeline.txt b/android/cts/main/vk-master/ray-tracing-pipeline.txt
index 143d29d..6041e42 100644
--- a/android/cts/main/vk-master/ray-tracing-pipeline.txt
+++ b/android/cts/main/vk-master/ray-tracing-pipeline.txt
@@ -1058,6 +1058,26 @@
 dEQP-VK.ray_tracing_pipeline.trace_rays_cmds.indirect_gpu.11_1_1
 dEQP-VK.ray_tracing_pipeline.trace_rays_cmds.indirect_gpu.11_13_1
 dEQP-VK.ray_tracing_pipeline.trace_rays_cmds.indirect_gpu.11_13_5
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.0_0_0
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.0_1_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.1_0_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.1_1_0
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.8_1_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.8_8_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.8_8_8
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.11_1_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.11_13_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.11_13_5
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.0_0_0
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.0_1_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.1_0_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.1_1_0
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.8_1_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.8_8_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.8_8_8
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.11_1_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.11_13_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.11_13_5
 dEQP-VK.ray_tracing_pipeline.shader_binding_table.indexing_hit.sbt_offset_0.no_shaderrecord.0_0
 dEQP-VK.ray_tracing_pipeline.shader_binding_table.indexing_hit.sbt_offset_0.no_shaderrecord.0_1
 dEQP-VK.ray_tracing_pipeline.shader_binding_table.indexing_hit.sbt_offset_0.no_shaderrecord.0_2
@@ -7768,6 +7788,30 @@
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.instance_triangle_culling.gpu_built.index_uint32.notransform_ccw
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.instance_triangle_culling.gpu_built.index_uint32.notransform_nocull
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.instance_triangle_culling.gpu_built.index_uint32.notransform_ccw_nocull
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.ahit.4_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.ahit.4_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.ahit.16_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.ahit.16_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.chit.4_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.chit.4_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.chit.16_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.chit.16_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.isec.4_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.isec.4_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.isec.16_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.isec.16_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.ahit.4_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.ahit.4_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.ahit.16_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.ahit.16_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.chit.4_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.chit.4_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.chit.16_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.chit.16_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.isec.4_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.isec.4_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.isec.16_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.isec.16_bits_reverse
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.dynamic_indexing.dynamic_indexing
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.empty.cpu_built.index_none.inactive_triangles
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.empty.cpu_built.index_none.inactive_instances
@@ -7817,6 +7861,20 @@
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.header_bottom_address.gpu_built.the_same_instances
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.header_bottom_address.gpu_built.different_instances
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.header_bottom_address.gpu_built.mix_same_diff_instances
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.memory.size
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.memory.pointer_count
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.buffer.size
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.buffer.pointer_count
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.memory.size
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.memory.pointer_count
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.buffer.size
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.buffer.pointer_count
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.cpu.stage_as_copy_bit
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.cpu.stage_all_transfer
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.cpu.access_sbt_read
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.stage_as_copy_bit
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.stage_all_transfer
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.access_sbt_read
 dEQP-VK.ray_tracing_pipeline.procedural_geometry.object_behind_bounding_boxes
 dEQP-VK.ray_tracing_pipeline.procedural_geometry.triangle_in_between
 dEQP-VK.ray_tracing_pipeline.indirect.build_structure
@@ -9537,3 +9595,35 @@
 dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit_or_isect
 dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit
 dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.full_copy.submit_graphics.11x17x1
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.full_copy.submit_graphics.19x11x2
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.full_copy.submit_graphics.23x47x3
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.full_copy.submit_graphics.47x19x4
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.full_copy.submit_compute.11x17x1
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.full_copy.submit_compute.19x11x2
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.full_copy.submit_compute.23x47x3
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.full_copy.submit_compute.47x19x4
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.partial_copy.submit_graphics.11x17x1
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.partial_copy.submit_graphics.19x11x2
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.partial_copy.submit_graphics.23x47x3
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.partial_copy.submit_graphics.47x19x4
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.partial_copy.submit_compute.11x17x1
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.partial_copy.submit_compute.19x11x2
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.partial_copy.submit_compute.23x47x3
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.partial_copy.submit_compute.47x19x4
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.full_copy.submit_graphics.11x17x1
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.full_copy.submit_graphics.19x11x2
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.full_copy.submit_graphics.23x47x3
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.full_copy.submit_graphics.47x19x4
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.full_copy.submit_compute.11x17x1
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.full_copy.submit_compute.19x11x2
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.full_copy.submit_compute.23x47x3
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.full_copy.submit_compute.47x19x4
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.partial_copy.submit_graphics.11x17x1
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.partial_copy.submit_graphics.19x11x2
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.partial_copy.submit_graphics.23x47x3
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.partial_copy.submit_graphics.47x19x4
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.partial_copy.submit_compute.11x17x1
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.partial_copy.submit_compute.19x11x2
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.partial_copy.submit_compute.23x47x3
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.partial_copy.submit_compute.47x19x4
diff --git a/external/fetch_sources.py b/external/fetch_sources.py
index 628809c..ba61065 100644
--- a/external/fetch_sources.py
+++ b/external/fetch_sources.py
@@ -304,18 +304,18 @@
 	GitRepo(
 		"https://github.com/KhronosGroup/glslang.git",
 		"git@github.com:KhronosGroup/glslang.git",
-		"abbe466451ca975fecfdba453ef9073df52aefc5",
+		"14f6e2730457bac14a64cb3d962d0a3da8c15ae4",
 		"glslang",
 		removeTags = ["master-tot"]),
 	GitRepo(
 		"https://github.com/KhronosGroup/SPIRV-Headers.git",
 		"git@github.com:KhronosGroup/SPIRV-Headers.git",
-		"4995a2f2723c401eb0ea3e10c81298906bf1422b",
+		"b765c355f488837ca4c77980ba69484f3ff277f5",
 		"spirv-headers"),
 	GitRepo(
 		"https://github.com/KhronosGroup/Vulkan-Docs.git",
-		None,
-		"2a31e99cbaa07dba4e2036c0bfe76aa3ebe8b2a4",
+		"git@github.com:KhronosGroup/Vulkan-Docs.git",
+		"71decb7f868d3891974eab139f03c7c6c87fea4d",
 		"vulkan-docs"),
 	GitRepo(
 		"https://github.com/google/amber.git",
@@ -324,7 +324,7 @@
 		"amber"),
 	GitRepo(
 		"https://github.com/open-source-parsers/jsoncpp.git",
-		None,
+		"git@github.com:open-source-parsers/jsoncpp.git",
 		"9059f5cad030ba11d37818847443a53918c327b1",
 		"jsoncpp"),
 ]
diff --git a/external/vulkancts/framework/vulkan/generated/vulkan/vkApiExtensionDependencyInfo.inl b/external/vulkancts/framework/vulkan/generated/vulkan/vkApiExtensionDependencyInfo.inl
index dde3547..59f387e 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkan/vkApiExtensionDependencyInfo.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkan/vkApiExtensionDependencyInfo.inl
@@ -199,6 +199,10 @@
 	std::make_tuple(0, 1, 0, "VK_EXT_host_query_reset", "VK_KHR_get_physical_device_properties2"),
 	std::make_tuple(0, 1, 0, "VK_EXT_image_2d_view_of_3d", "VK_KHR_maintenance1"),
 	std::make_tuple(0, 1, 0, "VK_EXT_image_2d_view_of_3d", "VK_KHR_get_physical_device_properties2"),
+	std::make_tuple(0, 1, 0, "VK_EXT_image_compression_control_swapchain", "VK_EXT_image_compression_control"),
+	std::make_tuple(0, 1, 1, "VK_EXT_image_compression_control_swapchain", "VK_EXT_image_compression_control"),
+	std::make_tuple(0, 1, 2, "VK_EXT_image_compression_control_swapchain", "VK_EXT_image_compression_control"),
+	std::make_tuple(0, 1, 3, "VK_EXT_image_compression_control_swapchain", "VK_EXT_image_compression_control"),
 	std::make_tuple(0, 1, 0, "VK_EXT_image_drm_format_modifier", "VK_KHR_bind_memory2"),
 	std::make_tuple(0, 1, 0, "VK_EXT_image_drm_format_modifier", "VK_KHR_get_physical_device_properties2"),
 	std::make_tuple(0, 1, 0, "VK_EXT_image_drm_format_modifier", "VK_KHR_image_format_list"),
@@ -217,6 +221,7 @@
 	std::make_tuple(0, 1, 3, "VK_EXT_pageable_device_local_memory", "VK_EXT_memory_priority"),
 	std::make_tuple(0, 1, 0, "VK_EXT_pci_bus_info", "VK_KHR_get_physical_device_properties2"),
 	std::make_tuple(0, 1, 0, "VK_EXT_physical_device_drm", "VK_KHR_get_physical_device_properties2"),
+	std::make_tuple(0, 1, 0, "VK_EXT_pipeline_properties", "VK_KHR_get_physical_device_properties2"),
 	std::make_tuple(0, 1, 0, "VK_EXT_primitives_generated_query", "VK_EXT_transform_feedback"),
 	std::make_tuple(0, 1, 1, "VK_EXT_primitives_generated_query", "VK_EXT_transform_feedback"),
 	std::make_tuple(0, 1, 2, "VK_EXT_primitives_generated_query", "VK_EXT_transform_feedback"),
@@ -359,6 +364,9 @@
 	std::make_tuple(0, 1, 1, "VK_KHR_ray_query", "VK_KHR_acceleration_structure"),
 	std::make_tuple(0, 1, 2, "VK_KHR_ray_query", "VK_KHR_acceleration_structure"),
 	std::make_tuple(0, 1, 3, "VK_KHR_ray_query", "VK_KHR_acceleration_structure"),
+	std::make_tuple(0, 1, 1, "VK_KHR_ray_tracing_maintenance1", "VK_KHR_acceleration_structure"),
+	std::make_tuple(0, 1, 2, "VK_KHR_ray_tracing_maintenance1", "VK_KHR_acceleration_structure"),
+	std::make_tuple(0, 1, 3, "VK_KHR_ray_tracing_maintenance1", "VK_KHR_acceleration_structure"),
 	std::make_tuple(0, 1, 1, "VK_KHR_ray_tracing_pipeline", "VK_KHR_spirv_1_4"),
 	std::make_tuple(0, 1, 1, "VK_KHR_ray_tracing_pipeline", "VK_KHR_acceleration_structure"),
 	std::make_tuple(0, 1, 2, "VK_KHR_ray_tracing_pipeline", "VK_KHR_acceleration_structure"),
@@ -563,6 +571,8 @@
 	std::make_tuple(1, 0, "VK_EXT_headless_surface"),
 	std::make_tuple(1, 0, "VK_EXT_host_query_reset"),
 	std::make_tuple(1, 0, "VK_EXT_image_2d_view_of_3d"),
+	std::make_tuple(1, 0, "VK_EXT_image_compression_control"),
+	std::make_tuple(1, 0, "VK_EXT_image_compression_control_swapchain"),
 	std::make_tuple(1, 0, "VK_EXT_image_drm_format_modifier"),
 	std::make_tuple(1, 0, "VK_EXT_image_robustness"),
 	std::make_tuple(1, 0, "VK_EXT_image_view_min_lod"),
@@ -579,6 +589,7 @@
 	std::make_tuple(1, 0, "VK_EXT_physical_device_drm"),
 	std::make_tuple(1, 0, "VK_EXT_pipeline_creation_cache_control"),
 	std::make_tuple(1, 0, "VK_EXT_pipeline_creation_feedback"),
+	std::make_tuple(1, 0, "VK_EXT_pipeline_properties"),
 	std::make_tuple(1, 0, "VK_EXT_post_depth_coverage"),
 	std::make_tuple(1, 0, "VK_EXT_primitive_topology_list_restart"),
 	std::make_tuple(1, 0, "VK_EXT_primitives_generated_query"),
@@ -600,6 +611,7 @@
 	std::make_tuple(1, 0, "VK_EXT_shader_subgroup_vote"),
 	std::make_tuple(1, 0, "VK_EXT_shader_viewport_index_layer"),
 	std::make_tuple(1, 1, "VK_EXT_subgroup_size_control"),
+	std::make_tuple(1, 0, "VK_EXT_subpass_merge_feedback"),
 	std::make_tuple(1, 0, "VK_EXT_swapchain_colorspace"),
 	std::make_tuple(1, 0, "VK_EXT_texel_buffer_alignment"),
 	std::make_tuple(1, 0, "VK_EXT_texture_compression_astc_hdr"),
@@ -688,6 +700,7 @@
 	std::make_tuple(1, 0, "VK_KHR_present_wait"),
 	std::make_tuple(1, 0, "VK_KHR_push_descriptor"),
 	std::make_tuple(1, 1, "VK_KHR_ray_query"),
+	std::make_tuple(1, 1, "VK_KHR_ray_tracing_maintenance1"),
 	std::make_tuple(1, 1, "VK_KHR_ray_tracing_pipeline"),
 	std::make_tuple(1, 0, "VK_KHR_relaxed_block_layout"),
 	std::make_tuple(1, 0, "VK_KHR_sampler_mirror_clamp_to_edge"),
diff --git a/external/vulkancts/framework/vulkan/generated/vulkan/vkBasicTypes.inl b/external/vulkancts/framework/vulkan/generated/vulkan/vkBasicTypes.inl
index 91bf16e..9326685 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkan/vkBasicTypes.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkan/vkBasicTypes.inl
@@ -117,6 +117,7 @@
 	VK_THREAD_DONE_KHR										= 1000268001,
 	VK_OPERATION_DEFERRED_KHR								= 1000268002,
 	VK_OPERATION_NOT_DEFERRED_KHR							= 1000268003,
+	VK_ERROR_COMPRESSION_EXHAUSTED_EXT						= -1000338000,
 	VK_ERROR_OUT_OF_POOL_MEMORY_KHR							= VK_ERROR_OUT_OF_POOL_MEMORY,
 	VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR					= VK_ERROR_INVALID_EXTERNAL_HANDLE,
 	VK_ERROR_FRAGMENTATION_EXT								= VK_ERROR_FRAGMENTATION,
@@ -711,6 +712,11 @@
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT					= 1000332001,
 	VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM										= 1000333000,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR			= 1000336000,
+	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT				= 1000338000,
+	VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT											= 1000338001,
+	VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_EXT												= 1000338002,
+	VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_EXT												= 1000338003,
+	VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT										= 1000338004,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT								= 1000340000,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM	= 1000342000,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT							= 1000344000,
@@ -745,11 +751,14 @@
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI						= 1000370000,
 	VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV										= 1000371000,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV						= 1000371001,
+	VK_STRUCTURE_TYPE_PIPELINE_PROPERTIES_IDENTIFIER_EXT									= 1000372000,
+	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT						= 1000372001,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT					= 1000377000,
 	VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX										= 1000378000,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT						= 1000381000,
 	VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT									= 1000381001,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT				= 1000382000,
+	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR				= 1000386000,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT						= 1000391000,
 	VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT									= 1000391001,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT								= 1000392000,
@@ -765,6 +774,11 @@
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM			= 1000425001,
 	VK_STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM						= 1000425002,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV					= 1000430000,
+	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT		= 1000437000,
+	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT					= 1000458000,
+	VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_CONTROL_EXT										= 1000458001,
+	VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_FEEDBACK_INFO_EXT								= 1000458002,
+	VK_STRUCTURE_TYPE_RENDER_PASS_SUBPASS_FEEDBACK_INFO_EXT									= 1000458003,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES								= VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES						= VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES,
 	VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT											= VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,
@@ -927,6 +941,7 @@
 	VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR												= VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2,
 	VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR													= VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2,
 	VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR												= VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3,
+	VK_STRUCTURE_TYPE_PIPELINE_INFO_EXT														= VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT					= VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR,
 	VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT							= VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES_KHR							= VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES,
@@ -1402,19 +1417,21 @@
 
 enum VkQueryType
 {
-	VK_QUERY_TYPE_OCCLUSION										= 0,
-	VK_QUERY_TYPE_PIPELINE_STATISTICS							= 1,
-	VK_QUERY_TYPE_TIMESTAMP										= 2,
-	VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR						= 1000023000,
-	VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT					= 1000028004,
-	VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR							= 1000116000,
-	VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR		= 1000150000,
-	VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR	= 1000150001,
-	VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV		= 1000165000,
-	VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL						= 1000210000,
-	VK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR		= 1000299000,
-	VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT						= 1000382000,
-	VK_QUERY_TYPE_MAX_ENUM										= 0x7FFFFFFF,
+	VK_QUERY_TYPE_OCCLUSION															= 0,
+	VK_QUERY_TYPE_PIPELINE_STATISTICS												= 1,
+	VK_QUERY_TYPE_TIMESTAMP															= 2,
+	VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR											= 1000023000,
+	VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT										= 1000028004,
+	VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR												= 1000116000,
+	VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR							= 1000150000,
+	VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR						= 1000150001,
+	VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV							= 1000165000,
+	VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL											= 1000210000,
+	VK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR							= 1000299000,
+	VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT											= 1000382000,
+	VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR	= 1000386000,
+	VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR									= 1000386001,
+	VK_QUERY_TYPE_MAX_ENUM															= 0x7FFFFFFF,
 };
 
 enum VkSharingMode
@@ -2478,6 +2495,26 @@
 	VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MAX_ENUM_NV		= 0x7FFFFFFF,
 };
 
+enum VkSubpassMergeStatusEXT
+{
+	VK_SUBPASS_MERGE_STATUS_MERGED_EXT										= 0,
+	VK_SUBPASS_MERGE_STATUS_DISALLOWED_EXT									= 1,
+	VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SIDE_EFFECTS_EXT						= 2,
+	VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SAMPLES_MISMATCH_EXT					= 3,
+	VK_SUBPASS_MERGE_STATUS_NOT_MERGED_VIEWS_MISMATCH_EXT					= 4,
+	VK_SUBPASS_MERGE_STATUS_NOT_MERGED_ALIASING_EXT							= 5,
+	VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPENDENCIES_EXT						= 6,
+	VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INCOMPATIBLE_INPUT_ATTACHMENT_EXT	= 7,
+	VK_SUBPASS_MERGE_STATUS_NOT_MERGED_TOO_MANY_ATTACHMENTS_EXT				= 8,
+	VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INSUFFICIENT_STORAGE_EXT				= 9,
+	VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPTH_STENCIL_COUNT_EXT				= 10,
+	VK_SUBPASS_MERGE_STATUS_NOT_MERGED_RESOLVE_ATTACHMENT_REUSE_EXT			= 11,
+	VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SINGLE_SUBPASS_EXT					= 12,
+	VK_SUBPASS_MERGE_STATUS_NOT_MERGED_UNSPECIFIED_EXT						= 13,
+	VK_SUBPASS_MERGE_STATUS_EXT_LAST,
+	VK_SUBPASS_MERGE_STATUS_MAX_ENUM_EXT									= 0x7FFFFFFF,
+};
+
 enum VkBuildAccelerationStructureModeKHR
 {
 	VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR		= 0,
@@ -3867,6 +3904,47 @@
 };
 typedef uint32_t VkGraphicsPipelineLibraryFlagsEXT;
 
+enum VkImageCompressionFlagBitsEXT
+{
+	VK_IMAGE_COMPRESSION_DEFAULT_EXT				= 0,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT		= 0x00000001,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT	= 0x00000002,
+	VK_IMAGE_COMPRESSION_DISABLED_EXT				= 0x00000004,
+	VK_IMAGE_COMPRESSION_FLAG_BITS_MAX_ENUM_EXT		= 0x7FFFFFFF,
+};
+typedef uint32_t VkImageCompressionFlagsEXT;
+
+enum VkImageCompressionFixedRateFlagBitsEXT
+{
+	VK_IMAGE_COMPRESSION_FIXED_RATE_NONE_EXT				= 0,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_1BPC_BIT_EXT			= 0x00000001,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT			= 0x00000002,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_3BPC_BIT_EXT			= 0x00000004,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT			= 0x00000008,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_5BPC_BIT_EXT			= 0x00000010,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_6BPC_BIT_EXT			= 0x00000020,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_7BPC_BIT_EXT			= 0x00000040,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_8BPC_BIT_EXT			= 0x00000080,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_9BPC_BIT_EXT			= 0x00000100,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_10BPC_BIT_EXT			= 0x00000200,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_11BPC_BIT_EXT			= 0x00000400,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_12BPC_BIT_EXT			= 0x00000800,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_13BPC_BIT_EXT			= 0x00001000,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_14BPC_BIT_EXT			= 0x00002000,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_15BPC_BIT_EXT			= 0x00004000,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_16BPC_BIT_EXT			= 0x00008000,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_17BPC_BIT_EXT			= 0x00010000,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_18BPC_BIT_EXT			= 0x00020000,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_19BPC_BIT_EXT			= 0x00040000,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_20BPC_BIT_EXT			= 0x00080000,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_21BPC_BIT_EXT			= 0x00100000,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_22BPC_BIT_EXT			= 0x00200000,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_23BPC_BIT_EXT			= 0x00400000,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_24BPC_BIT_EXT			= 0x00800000,
+	VK_IMAGE_COMPRESSION_FIXED_RATE_FLAG_BITS_MAX_ENUM_EXT	= 0x7FFFFFFF,
+};
+typedef uint32_t VkImageCompressionFixedRateFlagsEXT;
+
 enum VkAccelerationStructureCreateFlagBitsKHR
 {
 	VK_ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR	= 0x00000001,
@@ -3992,29 +4070,31 @@
 
 enum VkVideoEncodeH264CapabilityFlagBitsEXT
 {
-	VK_VIDEO_ENCODE_H264_CAPABILITY_DIRECT_8X8_INFERENCE_BIT_EXT			= 0x00000001,
-	VK_VIDEO_ENCODE_H264_CAPABILITY_SEPARATE_COLOUR_PLANE_BIT_EXT			= 0x00000002,
-	VK_VIDEO_ENCODE_H264_CAPABILITY_QPPRIME_Y_ZERO_TRANSFORM_BYPASS_BIT_EXT	= 0x00000004,
-	VK_VIDEO_ENCODE_H264_CAPABILITY_SCALING_LISTS_BIT_EXT					= 0x00000008,
-	VK_VIDEO_ENCODE_H264_CAPABILITY_HRD_COMPLIANCE_BIT_EXT					= 0x00000010,
-	VK_VIDEO_ENCODE_H264_CAPABILITY_CHROMA_QP_OFFSET_BIT_EXT				= 0x00000020,
-	VK_VIDEO_ENCODE_H264_CAPABILITY_SECOND_CHROMA_QP_OFFSET_BIT_EXT			= 0x00000040,
-	VK_VIDEO_ENCODE_H264_CAPABILITY_PIC_INIT_QP_MINUS26_BIT_EXT				= 0x00000080,
-	VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_PRED_BIT_EXT					= 0x00000100,
-	VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BIPRED_EXPLICIT_BIT_EXT		= 0x00000200,
-	VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BIPRED_IMPLICIT_BIT_EXT		= 0x00000400,
-	VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_PRED_NO_TABLE_BIT_EXT			= 0x00000800,
-	VK_VIDEO_ENCODE_H264_CAPABILITY_TRANSFORM_8X8_BIT_EXT					= 0x00001000,
-	VK_VIDEO_ENCODE_H264_CAPABILITY_CABAC_BIT_EXT							= 0x00002000,
-	VK_VIDEO_ENCODE_H264_CAPABILITY_CAVLC_BIT_EXT							= 0x00004000,
-	VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_DISABLED_BIT_EXT		= 0x00008000,
-	VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_ENABLED_BIT_EXT		= 0x00010000,
-	VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_PARTIAL_BIT_EXT		= 0x00020000,
-	VK_VIDEO_ENCODE_H264_CAPABILITY_DISABLE_DIRECT_SPATIAL_MV_PRED_BIT_EXT	= 0x00040000,
-	VK_VIDEO_ENCODE_H264_CAPABILITY_MULTIPLE_SLICE_PER_FRAME_BIT_EXT		= 0x00080000,
-	VK_VIDEO_ENCODE_H264_CAPABILITY_SLICE_MB_COUNT_BIT_EXT					= 0x00100000,
-	VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_EXT				= 0x00200000,
-	VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_EXT			= 0x00400000,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_DIRECT_8X8_INFERENCE_ENABLED_BIT_EXT	= 0x00000001,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_DIRECT_8X8_INFERENCE_DISABLED_BIT_EXT	= 0x00000002,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_SEPARATE_COLOUR_PLANE_BIT_EXT			= 0x00000004,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_QPPRIME_Y_ZERO_TRANSFORM_BYPASS_BIT_EXT	= 0x00000008,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_SCALING_LISTS_BIT_EXT					= 0x00000010,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_HRD_COMPLIANCE_BIT_EXT					= 0x00000020,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_CHROMA_QP_OFFSET_BIT_EXT				= 0x00000040,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_SECOND_CHROMA_QP_OFFSET_BIT_EXT			= 0x00000080,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_PIC_INIT_QP_MINUS26_BIT_EXT				= 0x00000100,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_PRED_BIT_EXT					= 0x00000200,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BIPRED_EXPLICIT_BIT_EXT		= 0x00000400,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BIPRED_IMPLICIT_BIT_EXT		= 0x00000800,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_PRED_NO_TABLE_BIT_EXT			= 0x00001000,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_TRANSFORM_8X8_BIT_EXT					= 0x00002000,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_CABAC_BIT_EXT							= 0x00004000,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_CAVLC_BIT_EXT							= 0x00008000,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_DISABLED_BIT_EXT		= 0x00010000,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_ENABLED_BIT_EXT		= 0x00020000,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_PARTIAL_BIT_EXT		= 0x00040000,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_DISABLE_DIRECT_SPATIAL_MV_PRED_BIT_EXT	= 0x00080000,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_MULTIPLE_SLICE_PER_FRAME_BIT_EXT		= 0x00100000,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_SLICE_MB_COUNT_BIT_EXT					= 0x00200000,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_EXT				= 0x00400000,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_EXT			= 0x00800000,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_EXT				= 0x01000000,
 	VK_VIDEO_ENCODE_H264_CAPABILITY_FLAG_BITS_MAX_ENUM_EXT					= 0x7FFFFFFF,
 };
 typedef uint32_t VkVideoEncodeH264CapabilityFlagsEXT;
@@ -4357,6 +4437,7 @@
 static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV						= 0x00100000ULL;
 static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI				= 0x8000000000ULL;
 static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI				= 0x10000000000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR		= 0x10000000ULL;
 
 
 typedef uint64_t VkAccessFlags2;
@@ -4423,6 +4504,7 @@
 static const VkAccessFlagBits2 VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT				= 0x01000000ULL;
 static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT		= 0x00080000ULL;
 static const VkAccessFlagBits2 VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI					= 0x8000000000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR				= 0x10000000000ULL;
 
 
 typedef uint64_t VkFormatFeatureFlags2;
@@ -4618,6 +4700,8 @@
 #define VK_KHR_COPY_COMMANDS_2_EXTENSION_NAME "VK_KHR_copy_commands2"
 #define VK_KHR_FORMAT_FEATURE_FLAGS_2_SPEC_VERSION 1
 #define VK_KHR_FORMAT_FEATURE_FLAGS_2_EXTENSION_NAME "VK_KHR_format_feature_flags2"
+#define VK_KHR_RAY_TRACING_MAINTENANCE_1_SPEC_VERSION 1
+#define VK_KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME "VK_KHR_ray_tracing_maintenance1"
 #define VK_KHR_PORTABILITY_ENUMERATION_SPEC_VERSION 1
 #define VK_KHR_MAINTENANCE_4_SPEC_VERSION 2
 #define VK_KHR_MAINTENANCE_4_EXTENSION_NAME "VK_KHR_maintenance4"
@@ -4765,6 +4849,7 @@
 #define VK_EXT_FRAGMENT_DENSITY_MAP_2_SPEC_VERSION 1
 #define VK_QCOM_ROTATED_COPY_COMMANDS_SPEC_VERSION 1
 #define VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION 1
+#define VK_EXT_IMAGE_COMPRESSION_CONTROL_SPEC_VERSION 1
 #define VK_EXT_4444_FORMATS_SPEC_VERSION 1
 #define VK_ARM_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_SPEC_VERSION 1
 #define VK_EXT_RGBA10X6_FORMATS_SPEC_VERSION 1
@@ -4777,6 +4862,7 @@
 #define VK_HUAWEI_SUBPASS_SHADING_SPEC_VERSION 2
 #define VK_HUAWEI_INVOCATION_MASK_SPEC_VERSION 1
 #define VK_NV_EXTERNAL_MEMORY_RDMA_SPEC_VERSION 1
+#define VK_EXT_PIPELINE_PROPERTIES_SPEC_VERSION 1
 #define VK_EXT_EXTENDED_DYNAMIC_STATE_2_SPEC_VERSION 1
 #define VK_EXT_COLOR_WRITE_ENABLE_SPEC_VERSION 1
 #define VK_EXT_PRIMITIVES_GENERATED_QUERY_SPEC_VERSION 1
@@ -4792,6 +4878,8 @@
 #define VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_SPEC_VERSION 1
 #define VK_NV_LINEAR_COLOR_ATTACHMENT_SPEC_VERSION 1
 #define VK_GOOGLE_SURFACELESS_QUERY_SPEC_VERSION 1
+#define VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_SPEC_VERSION 1
+#define VK_EXT_SUBPASS_MERGE_FEEDBACK_SPEC_VERSION 1
 #define VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION 13
 #define VK_KHR_RAY_TRACING_PIPELINE_SPEC_VERSION 1
 #define VK_KHR_RAY_QUERY_SPEC_VERSION 1
@@ -4813,7 +4901,7 @@
 #define VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_API_VERSION_0_9_6 VK_MAKE_VIDEO_STD_VERSION(0, 9, 6)
 #define VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_API_VERSION_0_9_6
 #define VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h264_encode"
-#define VK_EXT_VIDEO_ENCODE_H264_SPEC_VERSION 6
+#define VK_EXT_VIDEO_ENCODE_H264_SPEC_VERSION 7
 #define vulkan_video_codec_h265std 1
 #define STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE 7
 #define STD_VIDEO_H265_CPB_CNT_LIST_SIZE 32
@@ -4827,15 +4915,14 @@
 #define STD_VIDEO_H265_SCALING_LIST_32X32_NUM_ELEMENTS 64
 #define STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE 3
 #define STD_VIDEO_H265_PREDICTOR_PALETTE_COMP_ENTRIES_LIST_SIZE 128
-#define STD_VIDEO_H265_SPS_MAX_SUB_LAYERS 8
 #define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE 19
 #define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE 21
 #define STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE 6
 #define STD_VIDEO_H265_MAX_NUM_LIST_REF 15
 #define STD_VIDEO_H265_MAX_CHROMA_PLANES 2
 #define vulkan_video_codec_h265std_encode 1
-#define VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_API_VERSION_0_9_6 VK_MAKE_VIDEO_STD_VERSION(0, 9, 6)
-#define VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_API_VERSION_0_9_6
+#define VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_API_VERSION_0_9_7 VK_MAKE_VIDEO_STD_VERSION(0, 9, 7)
+#define VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_API_VERSION_0_9_7
 #define VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h265_encode"
 #define VK_EXT_VIDEO_ENCODE_H265_SPEC_VERSION 7
 #define vulkan_video_codec_h264std_decode 1
@@ -4846,9 +4933,9 @@
 #define VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h264_decode"
 #define VK_EXT_VIDEO_DECODE_H264_SPEC_VERSION 5
 #define vulkan_video_codec_h265std_decode 1
-#define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_API_VERSION_0_9_6 VK_MAKE_VIDEO_STD_VERSION(0, 9, 6)
+#define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_API_VERSION_0_9_7 VK_MAKE_VIDEO_STD_VERSION(0, 9, 7)
 #define STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE 8
-#define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_API_VERSION_0_9_6
+#define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_API_VERSION_0_9_7
 #define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h265_decode"
 #define VK_EXT_VIDEO_DECODE_H265_SPEC_VERSION 3
 #define VK_FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION 1
diff --git a/external/vulkancts/framework/vulkan/generated/vulkan/vkConcreteDeviceInterface.inl b/external/vulkancts/framework/vulkan/generated/vulkan/vkConcreteDeviceInterface.inl
index a5c504d..6ad5021 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkan/vkConcreteDeviceInterface.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkan/vkConcreteDeviceInterface.inl
@@ -221,6 +221,7 @@
 virtual VkResult			getPipelineExecutableInternalRepresentationsKHR	(VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, uint32_t* pInternalRepresentationCount, VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations) const;
 virtual void				cmdWriteBufferMarker2AMD						(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkBuffer dstBuffer, VkDeviceSize dstOffset, uint32_t marker) const;
 virtual void				getQueueCheckpointData2NV						(VkQueue queue, uint32_t* pCheckpointDataCount, VkCheckpointData2NV* pCheckpointData) const;
+virtual void				cmdTraceRaysIndirect2KHR						(VkCommandBuffer commandBuffer, VkDeviceAddress indirectDeviceAddress) const;
 virtual VkResult			debugMarkerSetObjectTagEXT						(VkDevice device, const VkDebugMarkerObjectTagInfoEXT* pTagInfo) const;
 virtual VkResult			debugMarkerSetObjectNameEXT						(VkDevice device, const VkDebugMarkerObjectNameInfoEXT* pNameInfo) const;
 virtual void				cmdDebugMarkerBeginEXT							(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo) const;
@@ -311,11 +312,13 @@
 virtual VkResult			createIndirectCommandsLayoutNV					(VkDevice device, const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkIndirectCommandsLayoutNV* pIndirectCommandsLayout) const;
 virtual void				destroyIndirectCommandsLayoutNV					(VkDevice device, VkIndirectCommandsLayoutNV indirectCommandsLayout, const VkAllocationCallbacks* pAllocator) const;
 virtual void				cmdSetFragmentShadingRateEnumNV					(VkCommandBuffer commandBuffer, VkFragmentShadingRateNV shadingRate, const VkFragmentShadingRateCombinerOpKHR combinerOps[2]) const;
+virtual void				getImageSubresourceLayout2EXT					(VkDevice device, VkImage image, const VkImageSubresource2EXT* pSubresource, VkSubresourceLayout2EXT* pLayout) const;
 virtual void				cmdSetVertexInputEXT							(VkCommandBuffer commandBuffer, uint32_t vertexBindingDescriptionCount, const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, uint32_t vertexAttributeDescriptionCount, const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions) const;
 virtual VkResult			getDeviceSubpassShadingMaxWorkgroupSizeHUAWEI	(VkDevice device, VkRenderPass renderpass, VkExtent2D* pMaxWorkgroupSize) const;
 virtual void				cmdSubpassShadingHUAWEI							(VkCommandBuffer commandBuffer) const;
 virtual void				cmdBindInvocationMaskHUAWEI						(VkCommandBuffer commandBuffer, VkImageView imageView, VkImageLayout imageLayout) const;
 virtual VkResult			getMemoryRemoteAddressNV						(VkDevice device, const VkMemoryGetRemoteAddressInfoNV* pMemoryGetRemoteAddressInfo, VkRemoteAddressNV* pAddress) const;
+virtual VkResult			getPipelinePropertiesEXT						(VkDevice device, const VkPipelineInfoEXT* pPipelineInfo, VkBaseOutStructure* pPipelineProperties) const;
 virtual void				cmdSetPatchControlPointsEXT						(VkCommandBuffer commandBuffer, uint32_t patchControlPoints) const;
 virtual void				cmdSetLogicOpEXT								(VkCommandBuffer commandBuffer, VkLogicOp logicOp) const;
 virtual void				cmdSetColorWriteEnableEXT						(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkBool32* pColorWriteEnables) const;
diff --git a/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceDriverImpl.inl b/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceDriverImpl.inl
index 4ae54e7..2ada51e 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceDriverImpl.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceDriverImpl.inl
@@ -1094,6 +1094,11 @@
 	m_vk.getQueueCheckpointData2NV(queue, pCheckpointDataCount, pCheckpointData);
 }
 
+void DeviceDriver::cmdTraceRaysIndirect2KHR (VkCommandBuffer commandBuffer, VkDeviceAddress indirectDeviceAddress) const
+{
+	m_vk.cmdTraceRaysIndirect2KHR(commandBuffer, indirectDeviceAddress);
+}
+
 VkResult DeviceDriver::debugMarkerSetObjectTagEXT (VkDevice device, const VkDebugMarkerObjectTagInfoEXT* pTagInfo) const
 {
 	return m_vk.debugMarkerSetObjectTagEXT(device, pTagInfo);
@@ -1544,6 +1549,11 @@
 	m_vk.cmdSetFragmentShadingRateEnumNV(commandBuffer, shadingRate, combinerOps);
 }
 
+void DeviceDriver::getImageSubresourceLayout2EXT (VkDevice device, VkImage image, const VkImageSubresource2EXT* pSubresource, VkSubresourceLayout2EXT* pLayout) const
+{
+	m_vk.getImageSubresourceLayout2EXT(device, image, pSubresource, pLayout);
+}
+
 void DeviceDriver::cmdSetVertexInputEXT (VkCommandBuffer commandBuffer, uint32_t vertexBindingDescriptionCount, const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, uint32_t vertexAttributeDescriptionCount, const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions) const
 {
 	m_vk.cmdSetVertexInputEXT(commandBuffer, vertexBindingDescriptionCount, pVertexBindingDescriptions, vertexAttributeDescriptionCount, pVertexAttributeDescriptions);
@@ -1569,6 +1579,11 @@
 	return m_vk.getMemoryRemoteAddressNV(device, pMemoryGetRemoteAddressInfo, pAddress);
 }
 
+VkResult DeviceDriver::getPipelinePropertiesEXT (VkDevice device, const VkPipelineInfoEXT* pPipelineInfo, VkBaseOutStructure* pPipelineProperties) const
+{
+	return m_vk.getPipelinePropertiesEXT(device, pPipelineInfo, pPipelineProperties);
+}
+
 void DeviceDriver::cmdSetPatchControlPointsEXT (VkCommandBuffer commandBuffer, uint32_t patchControlPoints) const
 {
 	m_vk.cmdSetPatchControlPointsEXT(commandBuffer, patchControlPoints);
diff --git a/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceExtensions.inl b/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceExtensions.inl
index 460c674..210a0b9 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceExtensions.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceExtensions.inl
@@ -50,6 +50,7 @@
 	"VK_KHR_present_wait",
 	"VK_KHR_push_descriptor",
 	"VK_KHR_ray_query",
+	"VK_KHR_ray_tracing_maintenance1",
 	"VK_KHR_ray_tracing_pipeline",
 	"VK_KHR_relaxed_block_layout",
 	"VK_KHR_sampler_mirror_clamp_to_edge",
diff --git a/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFeatureTest.inl b/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFeatureTest.inl
index 6b84191..4cf3ad4 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFeatureTest.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFeatureTest.inl
@@ -2186,6 +2186,54 @@
 }
 
 
+tcu::TestStatus createDeviceWithUnsupportedFeaturesTestRayTracingMaintenance1FeaturesKHR (Context& context)
+{
+	const PlatformInterface&				vkp						= context.getPlatformInterface();
+	tcu::TestLog&							log						= context.getTestContext().getLog();
+	tcu::ResultCollector					resultCollector			(log);
+	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
+	const InstanceDriver&					instanceDriver			(instance.getDriver());
+	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
+	const deUint32							queueFamilyIndex		= 0;
+	const deUint32							queueCount				= 1;
+	const float								queuePriority			= 1.0f;
+	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
+	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
+	int										numErrors				= 0;
+	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
+
+
+	VkPhysicalDeviceFeatures emptyDeviceFeatures;
+	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
+
+	// Only non-core extensions will be used when creating the device.
+	vector<const char*>	coreExtensions;
+	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
+	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
+
+	vector<const char*> extensionNames;
+	extensionNames.reserve(nonCoreExtensions.size());
+	for (const string& extension : nonCoreExtensions)
+		extensionNames.push_back(extension.c_str());
+
+	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR>()))
+	{
+		static const Feature features[] =
+		{
+		FEATURE_ITEM (VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR, rayTracingMaintenance1),
+		FEATURE_ITEM (VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR, rayTracingPipelineTraceRaysIndirect2),
+		};
+		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR*>(featuresStruct);
+		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
+	}
+
+	if (numErrors > 0)
+		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
+	else
+		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
+}
+
+
 tcu::TestStatus createDeviceWithUnsupportedFeaturesTestTransformFeedbackFeaturesEXT (Context& context)
 {
 	const PlatformInterface&				vkp						= context.getPlatformInterface();
@@ -4302,6 +4350,53 @@
 }
 
 
+tcu::TestStatus createDeviceWithUnsupportedFeaturesTestImageCompressionControlFeaturesEXT (Context& context)
+{
+	const PlatformInterface&				vkp						= context.getPlatformInterface();
+	tcu::TestLog&							log						= context.getTestContext().getLog();
+	tcu::ResultCollector					resultCollector			(log);
+	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
+	const InstanceDriver&					instanceDriver			(instance.getDriver());
+	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
+	const deUint32							queueFamilyIndex		= 0;
+	const deUint32							queueCount				= 1;
+	const float								queuePriority			= 1.0f;
+	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
+	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
+	int										numErrors				= 0;
+	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
+
+
+	VkPhysicalDeviceFeatures emptyDeviceFeatures;
+	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
+
+	// Only non-core extensions will be used when creating the device.
+	vector<const char*>	coreExtensions;
+	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
+	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
+
+	vector<const char*> extensionNames;
+	extensionNames.reserve(nonCoreExtensions.size());
+	for (const string& extension : nonCoreExtensions)
+		extensionNames.push_back(extension.c_str());
+
+	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceImageCompressionControlFeaturesEXT>()))
+	{
+		static const Feature features[] =
+		{
+		FEATURE_ITEM (VkPhysicalDeviceImageCompressionControlFeaturesEXT, imageCompressionControl),
+		};
+		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceImageCompressionControlFeaturesEXT*>(featuresStruct);
+		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
+	}
+
+	if (numErrors > 0)
+		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
+	else
+		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
+}
+
+
 tcu::TestStatus createDeviceWithUnsupportedFeaturesTest4444FormatsFeaturesEXT (Context& context)
 {
 	const PlatformInterface&				vkp						= context.getPlatformInterface();
@@ -4776,6 +4871,53 @@
 }
 
 
+tcu::TestStatus createDeviceWithUnsupportedFeaturesTestPipelinePropertiesFeaturesEXT (Context& context)
+{
+	const PlatformInterface&				vkp						= context.getPlatformInterface();
+	tcu::TestLog&							log						= context.getTestContext().getLog();
+	tcu::ResultCollector					resultCollector			(log);
+	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
+	const InstanceDriver&					instanceDriver			(instance.getDriver());
+	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
+	const deUint32							queueFamilyIndex		= 0;
+	const deUint32							queueCount				= 1;
+	const float								queuePriority			= 1.0f;
+	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
+	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
+	int										numErrors				= 0;
+	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
+
+
+	VkPhysicalDeviceFeatures emptyDeviceFeatures;
+	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
+
+	// Only non-core extensions will be used when creating the device.
+	vector<const char*>	coreExtensions;
+	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
+	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
+
+	vector<const char*> extensionNames;
+	extensionNames.reserve(nonCoreExtensions.size());
+	for (const string& extension : nonCoreExtensions)
+		extensionNames.push_back(extension.c_str());
+
+	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDevicePipelinePropertiesFeaturesEXT>()))
+	{
+		static const Feature features[] =
+		{
+		FEATURE_ITEM (VkPhysicalDevicePipelinePropertiesFeaturesEXT, pipelinePropertiesIdentifier),
+		};
+		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDevicePipelinePropertiesFeaturesEXT*>(featuresStruct);
+		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
+	}
+
+	if (numErrors > 0)
+		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
+	else
+		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
+}
+
+
 tcu::TestStatus createDeviceWithUnsupportedFeaturesTestExtendedDynamicState2FeaturesEXT (Context& context)
 {
 	const PlatformInterface&				vkp						= context.getPlatformInterface();
@@ -5299,6 +5441,100 @@
 }
 
 
+tcu::TestStatus createDeviceWithUnsupportedFeaturesTestImageCompressionControlSwapchainFeaturesEXT (Context& context)
+{
+	const PlatformInterface&				vkp						= context.getPlatformInterface();
+	tcu::TestLog&							log						= context.getTestContext().getLog();
+	tcu::ResultCollector					resultCollector			(log);
+	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
+	const InstanceDriver&					instanceDriver			(instance.getDriver());
+	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
+	const deUint32							queueFamilyIndex		= 0;
+	const deUint32							queueCount				= 1;
+	const float								queuePriority			= 1.0f;
+	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
+	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
+	int										numErrors				= 0;
+	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
+
+
+	VkPhysicalDeviceFeatures emptyDeviceFeatures;
+	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
+
+	// Only non-core extensions will be used when creating the device.
+	vector<const char*>	coreExtensions;
+	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
+	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
+
+	vector<const char*> extensionNames;
+	extensionNames.reserve(nonCoreExtensions.size());
+	for (const string& extension : nonCoreExtensions)
+		extensionNames.push_back(extension.c_str());
+
+	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT>()))
+	{
+		static const Feature features[] =
+		{
+		FEATURE_ITEM (VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT, imageCompressionControlSwapchain),
+		};
+		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT*>(featuresStruct);
+		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
+	}
+
+	if (numErrors > 0)
+		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
+	else
+		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
+}
+
+
+tcu::TestStatus createDeviceWithUnsupportedFeaturesTestSubpassMergeFeedbackFeaturesEXT (Context& context)
+{
+	const PlatformInterface&				vkp						= context.getPlatformInterface();
+	tcu::TestLog&							log						= context.getTestContext().getLog();
+	tcu::ResultCollector					resultCollector			(log);
+	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
+	const InstanceDriver&					instanceDriver			(instance.getDriver());
+	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
+	const deUint32							queueFamilyIndex		= 0;
+	const deUint32							queueCount				= 1;
+	const float								queuePriority			= 1.0f;
+	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
+	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
+	int										numErrors				= 0;
+	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
+
+
+	VkPhysicalDeviceFeatures emptyDeviceFeatures;
+	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
+
+	// Only non-core extensions will be used when creating the device.
+	vector<const char*>	coreExtensions;
+	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
+	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
+
+	vector<const char*> extensionNames;
+	extensionNames.reserve(nonCoreExtensions.size());
+	for (const string& extension : nonCoreExtensions)
+		extensionNames.push_back(extension.c_str());
+
+	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT>()))
+	{
+		static const Feature features[] =
+		{
+		FEATURE_ITEM (VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT, subpassMergeFeedback),
+		};
+		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT*>(featuresStruct);
+		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
+	}
+
+	if (numErrors > 0)
+		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
+	else
+		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
+}
+
+
 tcu::TestStatus createDeviceWithUnsupportedFeaturesTestAccelerationStructureFeaturesKHR (Context& context)
 {
 	const PlatformInterface&				vkp						= context.getPlatformInterface();
@@ -5556,6 +5792,7 @@
 	addFunctionCase(testGroup, "present_id_features_khr", "createDeviceWithUnsupportedFeaturesTestPresentIdFeaturesKHR", createDeviceWithUnsupportedFeaturesTestPresentIdFeaturesKHR);
 	addFunctionCase(testGroup, "shader_subgroup_uniform_control_flow_features_khr", "createDeviceWithUnsupportedFeaturesTestShaderSubgroupUniformControlFlowFeaturesKHR", createDeviceWithUnsupportedFeaturesTestShaderSubgroupUniformControlFlowFeaturesKHR);
 	addFunctionCase(testGroup, "workgroup_memory_explicit_layout_features_khr", "createDeviceWithUnsupportedFeaturesTestWorkgroupMemoryExplicitLayoutFeaturesKHR", createDeviceWithUnsupportedFeaturesTestWorkgroupMemoryExplicitLayoutFeaturesKHR);
+	addFunctionCase(testGroup, "ray_tracing_maintenance1_features_khr", "createDeviceWithUnsupportedFeaturesTestRayTracingMaintenance1FeaturesKHR", createDeviceWithUnsupportedFeaturesTestRayTracingMaintenance1FeaturesKHR);
 	addFunctionCase(testGroup, "transform_feedback_features_ext", "createDeviceWithUnsupportedFeaturesTestTransformFeedbackFeaturesEXT", createDeviceWithUnsupportedFeaturesTestTransformFeedbackFeaturesEXT);
 	addFunctionCase(testGroup, "corner_sampled_image_features_nv", "createDeviceWithUnsupportedFeaturesTestCornerSampledImageFeaturesNV", createDeviceWithUnsupportedFeaturesTestCornerSampledImageFeaturesNV);
 	addFunctionCase(testGroup, "astc_decode_features_ext", "createDeviceWithUnsupportedFeaturesTestASTCDecodeFeaturesEXT", createDeviceWithUnsupportedFeaturesTestASTCDecodeFeaturesEXT);
@@ -5600,6 +5837,7 @@
 	addFunctionCase(testGroup, "ray_tracing_motion_blur_features_nv", "createDeviceWithUnsupportedFeaturesTestRayTracingMotionBlurFeaturesNV", createDeviceWithUnsupportedFeaturesTestRayTracingMotionBlurFeaturesNV);
 	addFunctionCase(testGroup, "ycbcr2_plane444_formats_features_ext", "createDeviceWithUnsupportedFeaturesTestYcbcr2Plane444FormatsFeaturesEXT", createDeviceWithUnsupportedFeaturesTestYcbcr2Plane444FormatsFeaturesEXT);
 	addFunctionCase(testGroup, "fragment_density_map2_features_ext", "createDeviceWithUnsupportedFeaturesTestFragmentDensityMap2FeaturesEXT", createDeviceWithUnsupportedFeaturesTestFragmentDensityMap2FeaturesEXT);
+	addFunctionCase(testGroup, "image_compression_control_features_ext", "createDeviceWithUnsupportedFeaturesTestImageCompressionControlFeaturesEXT", createDeviceWithUnsupportedFeaturesTestImageCompressionControlFeaturesEXT);
 	addFunctionCase(testGroup, "4444_formats_features_ext", "createDeviceWithUnsupportedFeaturesTest4444FormatsFeaturesEXT", createDeviceWithUnsupportedFeaturesTest4444FormatsFeaturesEXT);
 	addFunctionCase(testGroup, "rasterization_order_attachment_access_features_arm", "createDeviceWithUnsupportedFeaturesTestRasterizationOrderAttachmentAccessFeaturesARM", createDeviceWithUnsupportedFeaturesTestRasterizationOrderAttachmentAccessFeaturesARM);
 	addFunctionCase(testGroup, "rgba10_x6_formats_features_ext", "createDeviceWithUnsupportedFeaturesTestRGBA10X6FormatsFeaturesEXT", createDeviceWithUnsupportedFeaturesTestRGBA10X6FormatsFeaturesEXT);
@@ -5610,6 +5848,7 @@
 	addFunctionCase(testGroup, "subpass_shading_features_huawei", "createDeviceWithUnsupportedFeaturesTestSubpassShadingFeaturesHUAWEI", createDeviceWithUnsupportedFeaturesTestSubpassShadingFeaturesHUAWEI);
 	addFunctionCase(testGroup, "invocation_mask_features_huawei", "createDeviceWithUnsupportedFeaturesTestInvocationMaskFeaturesHUAWEI", createDeviceWithUnsupportedFeaturesTestInvocationMaskFeaturesHUAWEI);
 	addFunctionCase(testGroup, "external_memory_rdma_features_nv", "createDeviceWithUnsupportedFeaturesTestExternalMemoryRDMAFeaturesNV", createDeviceWithUnsupportedFeaturesTestExternalMemoryRDMAFeaturesNV);
+	addFunctionCase(testGroup, "pipeline_properties_features_ext", "createDeviceWithUnsupportedFeaturesTestPipelinePropertiesFeaturesEXT", createDeviceWithUnsupportedFeaturesTestPipelinePropertiesFeaturesEXT);
 	addFunctionCase(testGroup, "extended_dynamic_state2_features_ext", "createDeviceWithUnsupportedFeaturesTestExtendedDynamicState2FeaturesEXT", createDeviceWithUnsupportedFeaturesTestExtendedDynamicState2FeaturesEXT);
 	addFunctionCase(testGroup, "color_write_enable_features_ext", "createDeviceWithUnsupportedFeaturesTestColorWriteEnableFeaturesEXT", createDeviceWithUnsupportedFeaturesTestColorWriteEnableFeaturesEXT);
 	addFunctionCase(testGroup, "primitives_generated_query_features_ext", "createDeviceWithUnsupportedFeaturesTestPrimitivesGeneratedQueryFeaturesEXT", createDeviceWithUnsupportedFeaturesTestPrimitivesGeneratedQueryFeaturesEXT);
@@ -5621,6 +5860,8 @@
 	addFunctionCase(testGroup, "descriptor_set_host_mapping_features_valve", "createDeviceWithUnsupportedFeaturesTestDescriptorSetHostMappingFeaturesVALVE", createDeviceWithUnsupportedFeaturesTestDescriptorSetHostMappingFeaturesVALVE);
 	addFunctionCase(testGroup, "fragment_density_map_offset_features_qcom", "createDeviceWithUnsupportedFeaturesTestFragmentDensityMapOffsetFeaturesQCOM", createDeviceWithUnsupportedFeaturesTestFragmentDensityMapOffsetFeaturesQCOM);
 	addFunctionCase(testGroup, "linear_color_attachment_features_nv", "createDeviceWithUnsupportedFeaturesTestLinearColorAttachmentFeaturesNV", createDeviceWithUnsupportedFeaturesTestLinearColorAttachmentFeaturesNV);
+	addFunctionCase(testGroup, "image_compression_control_swapchain_features_ext", "createDeviceWithUnsupportedFeaturesTestImageCompressionControlSwapchainFeaturesEXT", createDeviceWithUnsupportedFeaturesTestImageCompressionControlSwapchainFeaturesEXT);
+	addFunctionCase(testGroup, "subpass_merge_feedback_features_ext", "createDeviceWithUnsupportedFeaturesTestSubpassMergeFeedbackFeaturesEXT", createDeviceWithUnsupportedFeaturesTestSubpassMergeFeedbackFeaturesEXT);
 	addFunctionCase(testGroup, "acceleration_structure_features_khr", "createDeviceWithUnsupportedFeaturesTestAccelerationStructureFeaturesKHR", createDeviceWithUnsupportedFeaturesTestAccelerationStructureFeaturesKHR);
 	addFunctionCase(testGroup, "ray_tracing_pipeline_features_khr", "createDeviceWithUnsupportedFeaturesTestRayTracingPipelineFeaturesKHR", createDeviceWithUnsupportedFeaturesTestRayTracingPipelineFeaturesKHR);
 	addFunctionCase(testGroup, "ray_query_features_khr", "createDeviceWithUnsupportedFeaturesTestRayQueryFeaturesKHR", createDeviceWithUnsupportedFeaturesTestRayQueryFeaturesKHR);
diff --git a/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFeatures.inl b/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFeatures.inl
index 6d4e442..549e079 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFeatures.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFeatures.inl
@@ -49,6 +49,8 @@
 #define VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME "VK_EXT_host_query_reset"
 #define VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME "VK_KHR_imageless_framebuffer"
 #define VK_EXT_IMAGE_2D_VIEW_OF_3D_EXTENSION_NAME "VK_EXT_image_2d_view_of_3d"
+#define VK_EXT_IMAGE_COMPRESSION_CONTROL_EXTENSION_NAME "VK_EXT_image_compression_control"
+#define VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_EXTENSION_NAME "VK_EXT_image_compression_control_swapchain"
 #define VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME "VK_EXT_image_robustness"
 #define VK_EXT_IMAGE_VIEW_MIN_LOD_EXTENSION_NAME "VK_EXT_image_view_min_lod"
 #define VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME "VK_EXT_index_type_uint8"
@@ -67,6 +69,7 @@
 #define VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME "VK_KHR_performance_query"
 #define VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME "VK_EXT_pipeline_creation_cache_control"
 #define VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME "VK_KHR_pipeline_executable_properties"
+#define VK_EXT_PIPELINE_PROPERTIES_EXTENSION_NAME "VK_EXT_pipeline_properties"
 #define VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME "VK_KHR_portability_subset"
 #define VK_KHR_PRESENT_ID_EXTENSION_NAME  "VK_KHR_present_id"
 #define VK_KHR_PRESENT_WAIT_EXTENSION_NAME "VK_KHR_present_wait"
@@ -76,6 +79,7 @@
 #define DECL_PROTECTED_MEMORY_EXTENSION_NAME "not_existent_feature"
 #define VK_EXT_PROVOKING_VERTEX_EXTENSION_NAME "VK_EXT_provoking_vertex"
 #define VK_KHR_RAY_QUERY_EXTENSION_NAME   "VK_KHR_ray_query"
+#define VK_KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME "VK_KHR_ray_tracing_maintenance1"
 #define VK_NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME "VK_NV_ray_tracing_motion_blur"
 #define VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME "VK_KHR_ray_tracing_pipeline"
 #define VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME "VK_NV_representative_fragment_test"
@@ -101,6 +105,7 @@
 #define VK_KHR_SHADER_TERMINATE_INVOCATION_EXTENSION_NAME "VK_KHR_shader_terminate_invocation"
 #define VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME "VK_NV_shading_rate_image"
 #define VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME "VK_EXT_subgroup_size_control"
+#define VK_EXT_SUBPASS_MERGE_FEEDBACK_EXTENSION_NAME "VK_EXT_subpass_merge_feedback"
 #define VK_HUAWEI_SUBPASS_SHADING_EXTENSION_NAME "VK_HUAWEI_subpass_shading"
 #define VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME "VK_KHR_synchronization2"
 #define VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME "VK_EXT_texel_buffer_alignment"
@@ -292,6 +297,7 @@
 template<> void initFeatureFromBlob<VkPhysicalDevicePresentIdFeaturesKHR>(VkPhysicalDevicePresentIdFeaturesKHR&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR>(VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR>(VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR>(VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceTransformFeedbackFeaturesEXT>(VkPhysicalDeviceTransformFeedbackFeaturesEXT&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceCornerSampledImageFeaturesNV>(VkPhysicalDeviceCornerSampledImageFeaturesNV&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceASTCDecodeFeaturesEXT>(VkPhysicalDeviceASTCDecodeFeaturesEXT&, const AllFeaturesBlobs&) {}
@@ -336,6 +342,7 @@
 template<> void initFeatureFromBlob<VkPhysicalDeviceRayTracingMotionBlurFeaturesNV>(VkPhysicalDeviceRayTracingMotionBlurFeaturesNV&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT>(VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceFragmentDensityMap2FeaturesEXT>(VkPhysicalDeviceFragmentDensityMap2FeaturesEXT&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceImageCompressionControlFeaturesEXT>(VkPhysicalDeviceImageCompressionControlFeaturesEXT&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDevice4444FormatsFeaturesEXT>(VkPhysicalDevice4444FormatsFeaturesEXT&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM>(VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT>(VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT&, const AllFeaturesBlobs&) {}
@@ -346,6 +353,7 @@
 template<> void initFeatureFromBlob<VkPhysicalDeviceSubpassShadingFeaturesHUAWEI>(VkPhysicalDeviceSubpassShadingFeaturesHUAWEI&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceInvocationMaskFeaturesHUAWEI>(VkPhysicalDeviceInvocationMaskFeaturesHUAWEI&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceExternalMemoryRDMAFeaturesNV>(VkPhysicalDeviceExternalMemoryRDMAFeaturesNV&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDevicePipelinePropertiesFeaturesEXT>(VkPhysicalDevicePipelinePropertiesFeaturesEXT&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceExtendedDynamicState2FeaturesEXT>(VkPhysicalDeviceExtendedDynamicState2FeaturesEXT&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceColorWriteEnableFeaturesEXT>(VkPhysicalDeviceColorWriteEnableFeaturesEXT&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT>(VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT&, const AllFeaturesBlobs&) {}
@@ -357,106 +365,113 @@
 template<> void initFeatureFromBlob<VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE>(VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM>(VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceLinearColorAttachmentFeaturesNV>(VkPhysicalDeviceLinearColorAttachmentFeaturesNV&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT>(VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT>(VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceAccelerationStructureFeaturesKHR>(VkPhysicalDeviceAccelerationStructureFeaturesKHR&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceRayTracingPipelineFeaturesKHR>(VkPhysicalDeviceRayTracingPipelineFeaturesKHR&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceRayQueryFeaturesKHR>(VkPhysicalDeviceRayQueryFeaturesKHR&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDevicePortabilitySubsetFeaturesKHR>(VkPhysicalDevicePortabilitySubsetFeaturesKHR&, const AllFeaturesBlobs&) {}
 
 
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevice16BitStorageFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, VK_KHR_16BIT_STORAGE_EXTENSION_NAME, VK_KHR_16BIT_STORAGE_SPEC_VERSION, 109}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevice4444FormatsFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT, VK_EXT_4444_FORMATS_EXTENSION_NAME, VK_EXT_4444_FORMATS_SPEC_VERSION, 108}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevice8BitStorageFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES, VK_KHR_8BIT_STORAGE_EXTENSION_NAME, VK_KHR_8BIT_STORAGE_SPEC_VERSION, 107}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceAccelerationStructureFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR, VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME, VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION, 106}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceASTCDecodeFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT, VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME, VK_EXT_ASTC_DECODE_MODE_SPEC_VERSION, 105}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT, VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME, VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION, 104}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBorderColorSwizzleFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT, VK_EXT_BORDER_COLOR_SWIZZLE_EXTENSION_NAME, VK_EXT_BORDER_COLOR_SWIZZLE_SPEC_VERSION, 103}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBufferDeviceAddressFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES, VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, VK_KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION, 102}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT, VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION, 101}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCoherentMemoryFeaturesAMD>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD, DECL_AMD_COHERENT_MEMORY_EXTENSION_NAME, 0, 100}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceColorWriteEnableFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT, VK_EXT_COLOR_WRITE_ENABLE_EXTENSION_NAME, VK_EXT_COLOR_WRITE_ENABLE_SPEC_VERSION, 99}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV, VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME, VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION, 98}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceConditionalRenderingFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT, VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME, VK_EXT_CONDITIONAL_RENDERING_SPEC_VERSION, 97}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCooperativeMatrixFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV, VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME, VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION, 96}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCornerSampledImageFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV, VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME, VK_NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION, 95}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCoverageReductionModeFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV, VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME, VK_NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION, 94}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCustomBorderColorFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT, VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, VK_EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION, 93}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV, VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME, VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION, 92}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDepthClipControlFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT, VK_EXT_DEPTH_CLIP_CONTROL_EXTENSION_NAME, VK_EXT_DEPTH_CLIP_CONTROL_SPEC_VERSION, 91}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDepthClipEnableFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT, VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME, VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION, 90}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDescriptorIndexingFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES, VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION, 89}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE, VK_VALVE_DESCRIPTOR_SET_HOST_MAPPING_EXTENSION_NAME, VK_VALVE_DESCRIPTOR_SET_HOST_MAPPING_SPEC_VERSION, 88}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV, VK_NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME, VK_NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION, 87}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDeviceMemoryReportFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT, VK_EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME, VK_EXT_DEVICE_MEMORY_REPORT_SPEC_VERSION, 86}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDiagnosticsConfigFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV, DECL_NV_DIAGNOSTICS_CONFIG_EXTENSION_NAME, 0, 85}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDynamicRenderingFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES, VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME, VK_KHR_DYNAMIC_RENDERING_SPEC_VERSION, 84}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceExclusiveScissorFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV, VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME, VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION, 83}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceExtendedDynamicStateFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT, VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME, VK_EXT_EXTENDED_DYNAMIC_STATE_SPEC_VERSION, 82}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceExtendedDynamicState2FeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT, VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME, VK_EXT_EXTENDED_DYNAMIC_STATE_2_SPEC_VERSION, 81}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceExternalMemoryRDMAFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV, VK_NV_EXTERNAL_MEMORY_RDMA_EXTENSION_NAME, VK_NV_EXTERNAL_MEMORY_RDMA_SPEC_VERSION, 80}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentDensityMapFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT, VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME, VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION, 79}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentDensityMap2FeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT, VK_EXT_FRAGMENT_DENSITY_MAP_2_EXTENSION_NAME, VK_EXT_FRAGMENT_DENSITY_MAP_2_SPEC_VERSION, 78}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM, VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_EXTENSION_NAME, VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_SPEC_VERSION, 77}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV, VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME, VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION, 76}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT, VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME, VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION, 75}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShadingRateFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR, VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME, VK_KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION, 74}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV, VK_NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME, VK_NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION, 73}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR, DECL_KHR_GLOBAL_PRIORITY_QUERY_EXTENSION_NAME, 0, 72}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT, VK_EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME, VK_EXT_GRAPHICS_PIPELINE_LIBRARY_SPEC_VERSION, 71}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceHostQueryResetFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES, VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME, VK_EXT_HOST_QUERY_RESET_SPEC_VERSION, 70}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceImagelessFramebufferFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES, VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME, VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION, 69}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceImage2DViewOf3DFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT, VK_EXT_IMAGE_2D_VIEW_OF_3D_EXTENSION_NAME, VK_EXT_IMAGE_2D_VIEW_OF_3D_SPEC_VERSION, 68}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceImageRobustnessFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES, VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME, VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION, 67}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceImageViewMinLodFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT, VK_EXT_IMAGE_VIEW_MIN_LOD_EXTENSION_NAME, VK_EXT_IMAGE_VIEW_MIN_LOD_SPEC_VERSION, 66}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT, VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME, VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION, 65}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceInheritedViewportScissorFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV, VK_NV_INHERITED_VIEWPORT_SCISSOR_EXTENSION_NAME, VK_NV_INHERITED_VIEWPORT_SCISSOR_SPEC_VERSION, 64}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceInlineUniformBlockFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES, VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME, VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION, 63}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceInvocationMaskFeaturesHUAWEI>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI, VK_HUAWEI_INVOCATION_MASK_EXTENSION_NAME, VK_HUAWEI_INVOCATION_MASK_SPEC_VERSION, 62}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceLinearColorAttachmentFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV, VK_NV_LINEAR_COLOR_ATTACHMENT_EXTENSION_NAME, VK_NV_LINEAR_COLOR_ATTACHMENT_SPEC_VERSION, 61}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceLineRasterizationFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT, VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME, VK_EXT_LINE_RASTERIZATION_SPEC_VERSION, 60}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMaintenance4Features>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES, DECL_MAINTENANCE4_EXTENSION_NAME, 0, 59}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMemoryPriorityFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT, VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME, VK_EXT_MEMORY_PRIORITY_SPEC_VERSION, 58}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMeshShaderFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV, VK_NV_MESH_SHADER_EXTENSION_NAME, VK_NV_MESH_SHADER_SPEC_VERSION, 57}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMultiviewFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES, VK_KHR_MULTIVIEW_EXTENSION_NAME, VK_KHR_MULTIVIEW_SPEC_VERSION, 56}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMultiDrawFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT, VK_EXT_MULTI_DRAW_EXTENSION_NAME, VK_EXT_MULTI_DRAW_SPEC_VERSION, 55}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE, VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME, VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION, 54}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT, VK_EXT_PAGEABLE_DEVICE_LOCAL_MEMORY_EXTENSION_NAME, VK_EXT_PAGEABLE_DEVICE_LOCAL_MEMORY_SPEC_VERSION, 53}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePerformanceQueryFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR, VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME, VK_KHR_PERFORMANCE_QUERY_SPEC_VERSION, 52}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePipelineCreationCacheControlFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES, VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME, VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION, 51}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION, 50}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePortabilitySubsetFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR, VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME, VK_KHR_PORTABILITY_SUBSET_SPEC_VERSION, 49}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePresentIdFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR, VK_KHR_PRESENT_ID_EXTENSION_NAME, VK_KHR_PRESENT_ID_SPEC_VERSION, 48}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePresentWaitFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR, VK_KHR_PRESENT_WAIT_EXTENSION_NAME, VK_KHR_PRESENT_WAIT_SPEC_VERSION, 47}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT, VK_EXT_PRIMITIVES_GENERATED_QUERY_EXTENSION_NAME, VK_EXT_PRIMITIVES_GENERATED_QUERY_SPEC_VERSION, 46}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT, VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_EXTENSION_NAME, VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_SPEC_VERSION, 45}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePrivateDataFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES, VK_EXT_PRIVATE_DATA_EXTENSION_NAME, VK_EXT_PRIVATE_DATA_SPEC_VERSION, 44}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceProtectedMemoryFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, DECL_PROTECTED_MEMORY_EXTENSION_NAME, 0, 43}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceProvokingVertexFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT, VK_EXT_PROVOKING_VERTEX_EXTENSION_NAME, VK_EXT_PROVOKING_VERTEX_SPEC_VERSION, 42}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRayQueryFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR, VK_KHR_RAY_QUERY_EXTENSION_NAME, VK_KHR_RAY_QUERY_SPEC_VERSION, 41}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRayTracingMotionBlurFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV, VK_NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME, VK_NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION, 40}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRayTracingPipelineFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR, VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME, VK_KHR_RAY_TRACING_PIPELINE_SPEC_VERSION, 39}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV, VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME, VK_NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION, 38}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT, VK_EXT_RGBA10X6_FORMATS_EXTENSION_NAME, VK_EXT_RGBA10X6_FORMATS_SPEC_VERSION, 37}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRobustness2FeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT, VK_EXT_ROBUSTNESS_2_EXTENSION_NAME, VK_EXT_ROBUSTNESS_2_SPEC_VERSION, 36}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSamplerYcbcrConversionFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME, VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION, 35}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceScalarBlockLayoutFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES, VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME, VK_EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION, 34}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES, VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME, VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION, 33}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderAtomicFloatFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT, VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME, VK_EXT_SHADER_ATOMIC_FLOAT_SPEC_VERSION, 32}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT, VK_EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME, VK_EXT_SHADER_ATOMIC_FLOAT_2_SPEC_VERSION, 31}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderAtomicInt64Features>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES, VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME, VK_KHR_SHADER_ATOMIC_INT64_SPEC_VERSION, 30}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderClockFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR, VK_KHR_SHADER_CLOCK_EXTENSION_NAME, VK_KHR_SHADER_CLOCK_SPEC_VERSION, 29}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION, 28}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderDrawParametersFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES, VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION, 27}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderFloat16Int8Features>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION, 26}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT, VK_EXT_SHADER_IMAGE_ATOMIC_INT64_EXTENSION_NAME, VK_EXT_SHADER_IMAGE_ATOMIC_INT64_SPEC_VERSION, 25}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderImageFootprintFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV, VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME, VK_NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION, 24}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderIntegerDotProductFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES, VK_KHR_SHADER_INTEGER_DOT_PRODUCT_EXTENSION_NAME, VK_KHR_SHADER_INTEGER_DOT_PRODUCT_SPEC_VERSION, 23}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL, VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME, VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION, 22}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderSMBuiltinsFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV, VK_NV_SHADER_SM_BUILTINS_EXTENSION_NAME, VK_NV_SHADER_SM_BUILTINS_SPEC_VERSION, 21}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES, VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME, VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION, 20}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR, VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_EXTENSION_NAME, VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_SPEC_VERSION, 19}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderTerminateInvocationFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES, VK_KHR_SHADER_TERMINATE_INVOCATION_EXTENSION_NAME, VK_KHR_SHADER_TERMINATE_INVOCATION_SPEC_VERSION, 18}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShadingRateImageFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV, VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME, VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION, 17}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSubgroupSizeControlFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES, VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME, VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION, 16}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevice16BitStorageFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, VK_KHR_16BIT_STORAGE_EXTENSION_NAME, VK_KHR_16BIT_STORAGE_SPEC_VERSION, 114}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevice4444FormatsFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT, VK_EXT_4444_FORMATS_EXTENSION_NAME, VK_EXT_4444_FORMATS_SPEC_VERSION, 113}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevice8BitStorageFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES, VK_KHR_8BIT_STORAGE_EXTENSION_NAME, VK_KHR_8BIT_STORAGE_SPEC_VERSION, 112}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceAccelerationStructureFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR, VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME, VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION, 111}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceASTCDecodeFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT, VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME, VK_EXT_ASTC_DECODE_MODE_SPEC_VERSION, 110}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT, VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME, VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION, 109}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBorderColorSwizzleFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT, VK_EXT_BORDER_COLOR_SWIZZLE_EXTENSION_NAME, VK_EXT_BORDER_COLOR_SWIZZLE_SPEC_VERSION, 108}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBufferDeviceAddressFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES, VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, VK_KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION, 107}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT, VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION, 106}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCoherentMemoryFeaturesAMD>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD, DECL_AMD_COHERENT_MEMORY_EXTENSION_NAME, 0, 105}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceColorWriteEnableFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT, VK_EXT_COLOR_WRITE_ENABLE_EXTENSION_NAME, VK_EXT_COLOR_WRITE_ENABLE_SPEC_VERSION, 104}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV, VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME, VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION, 103}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceConditionalRenderingFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT, VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME, VK_EXT_CONDITIONAL_RENDERING_SPEC_VERSION, 102}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCooperativeMatrixFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV, VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME, VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION, 101}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCornerSampledImageFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV, VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME, VK_NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION, 100}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCoverageReductionModeFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV, VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME, VK_NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION, 99}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCustomBorderColorFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT, VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, VK_EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION, 98}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV, VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME, VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION, 97}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDepthClipControlFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT, VK_EXT_DEPTH_CLIP_CONTROL_EXTENSION_NAME, VK_EXT_DEPTH_CLIP_CONTROL_SPEC_VERSION, 96}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDepthClipEnableFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT, VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME, VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION, 95}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDescriptorIndexingFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES, VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION, 94}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE, VK_VALVE_DESCRIPTOR_SET_HOST_MAPPING_EXTENSION_NAME, VK_VALVE_DESCRIPTOR_SET_HOST_MAPPING_SPEC_VERSION, 93}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV, VK_NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME, VK_NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION, 92}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDeviceMemoryReportFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT, VK_EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME, VK_EXT_DEVICE_MEMORY_REPORT_SPEC_VERSION, 91}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDiagnosticsConfigFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV, DECL_NV_DIAGNOSTICS_CONFIG_EXTENSION_NAME, 0, 90}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDynamicRenderingFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES, VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME, VK_KHR_DYNAMIC_RENDERING_SPEC_VERSION, 89}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceExclusiveScissorFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV, VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME, VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION, 88}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceExtendedDynamicStateFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT, VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME, VK_EXT_EXTENDED_DYNAMIC_STATE_SPEC_VERSION, 87}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceExtendedDynamicState2FeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT, VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME, VK_EXT_EXTENDED_DYNAMIC_STATE_2_SPEC_VERSION, 86}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceExternalMemoryRDMAFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV, VK_NV_EXTERNAL_MEMORY_RDMA_EXTENSION_NAME, VK_NV_EXTERNAL_MEMORY_RDMA_SPEC_VERSION, 85}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentDensityMapFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT, VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME, VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION, 84}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentDensityMap2FeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT, VK_EXT_FRAGMENT_DENSITY_MAP_2_EXTENSION_NAME, VK_EXT_FRAGMENT_DENSITY_MAP_2_SPEC_VERSION, 83}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM, VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_EXTENSION_NAME, VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_SPEC_VERSION, 82}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV, VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME, VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION, 81}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT, VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME, VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION, 80}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShadingRateFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR, VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME, VK_KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION, 79}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV, VK_NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME, VK_NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION, 78}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR, DECL_KHR_GLOBAL_PRIORITY_QUERY_EXTENSION_NAME, 0, 77}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT, VK_EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME, VK_EXT_GRAPHICS_PIPELINE_LIBRARY_SPEC_VERSION, 76}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceHostQueryResetFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES, VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME, VK_EXT_HOST_QUERY_RESET_SPEC_VERSION, 75}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceImagelessFramebufferFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES, VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME, VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION, 74}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceImage2DViewOf3DFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT, VK_EXT_IMAGE_2D_VIEW_OF_3D_EXTENSION_NAME, VK_EXT_IMAGE_2D_VIEW_OF_3D_SPEC_VERSION, 73}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceImageCompressionControlFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT, VK_EXT_IMAGE_COMPRESSION_CONTROL_EXTENSION_NAME, VK_EXT_IMAGE_COMPRESSION_CONTROL_SPEC_VERSION, 72}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT, VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_EXTENSION_NAME, VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_SPEC_VERSION, 71}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceImageRobustnessFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES, VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME, VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION, 70}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceImageViewMinLodFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT, VK_EXT_IMAGE_VIEW_MIN_LOD_EXTENSION_NAME, VK_EXT_IMAGE_VIEW_MIN_LOD_SPEC_VERSION, 69}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT, VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME, VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION, 68}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceInheritedViewportScissorFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV, VK_NV_INHERITED_VIEWPORT_SCISSOR_EXTENSION_NAME, VK_NV_INHERITED_VIEWPORT_SCISSOR_SPEC_VERSION, 67}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceInlineUniformBlockFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES, VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME, VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION, 66}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceInvocationMaskFeaturesHUAWEI>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI, VK_HUAWEI_INVOCATION_MASK_EXTENSION_NAME, VK_HUAWEI_INVOCATION_MASK_SPEC_VERSION, 65}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceLinearColorAttachmentFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV, VK_NV_LINEAR_COLOR_ATTACHMENT_EXTENSION_NAME, VK_NV_LINEAR_COLOR_ATTACHMENT_SPEC_VERSION, 64}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceLineRasterizationFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT, VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME, VK_EXT_LINE_RASTERIZATION_SPEC_VERSION, 63}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMaintenance4Features>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES, DECL_MAINTENANCE4_EXTENSION_NAME, 0, 62}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMemoryPriorityFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT, VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME, VK_EXT_MEMORY_PRIORITY_SPEC_VERSION, 61}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMeshShaderFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV, VK_NV_MESH_SHADER_EXTENSION_NAME, VK_NV_MESH_SHADER_SPEC_VERSION, 60}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMultiviewFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES, VK_KHR_MULTIVIEW_EXTENSION_NAME, VK_KHR_MULTIVIEW_SPEC_VERSION, 59}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMultiDrawFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT, VK_EXT_MULTI_DRAW_EXTENSION_NAME, VK_EXT_MULTI_DRAW_SPEC_VERSION, 58}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE, VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME, VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION, 57}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT, VK_EXT_PAGEABLE_DEVICE_LOCAL_MEMORY_EXTENSION_NAME, VK_EXT_PAGEABLE_DEVICE_LOCAL_MEMORY_SPEC_VERSION, 56}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePerformanceQueryFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR, VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME, VK_KHR_PERFORMANCE_QUERY_SPEC_VERSION, 55}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePipelineCreationCacheControlFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES, VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME, VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION, 54}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION, 53}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePipelinePropertiesFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT, VK_EXT_PIPELINE_PROPERTIES_EXTENSION_NAME, VK_EXT_PIPELINE_PROPERTIES_SPEC_VERSION, 52}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePortabilitySubsetFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR, VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME, VK_KHR_PORTABILITY_SUBSET_SPEC_VERSION, 51}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePresentIdFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR, VK_KHR_PRESENT_ID_EXTENSION_NAME, VK_KHR_PRESENT_ID_SPEC_VERSION, 50}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePresentWaitFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR, VK_KHR_PRESENT_WAIT_EXTENSION_NAME, VK_KHR_PRESENT_WAIT_SPEC_VERSION, 49}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT, VK_EXT_PRIMITIVES_GENERATED_QUERY_EXTENSION_NAME, VK_EXT_PRIMITIVES_GENERATED_QUERY_SPEC_VERSION, 48}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT, VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_EXTENSION_NAME, VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_SPEC_VERSION, 47}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePrivateDataFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES, VK_EXT_PRIVATE_DATA_EXTENSION_NAME, VK_EXT_PRIVATE_DATA_SPEC_VERSION, 46}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceProtectedMemoryFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, DECL_PROTECTED_MEMORY_EXTENSION_NAME, 0, 45}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceProvokingVertexFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT, VK_EXT_PROVOKING_VERTEX_EXTENSION_NAME, VK_EXT_PROVOKING_VERTEX_SPEC_VERSION, 44}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRayQueryFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR, VK_KHR_RAY_QUERY_EXTENSION_NAME, VK_KHR_RAY_QUERY_SPEC_VERSION, 43}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR, VK_KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME, VK_KHR_RAY_TRACING_MAINTENANCE_1_SPEC_VERSION, 42}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRayTracingMotionBlurFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV, VK_NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME, VK_NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION, 41}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRayTracingPipelineFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR, VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME, VK_KHR_RAY_TRACING_PIPELINE_SPEC_VERSION, 40}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV, VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME, VK_NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION, 39}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT, VK_EXT_RGBA10X6_FORMATS_EXTENSION_NAME, VK_EXT_RGBA10X6_FORMATS_SPEC_VERSION, 38}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRobustness2FeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT, VK_EXT_ROBUSTNESS_2_EXTENSION_NAME, VK_EXT_ROBUSTNESS_2_SPEC_VERSION, 37}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSamplerYcbcrConversionFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME, VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION, 36}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceScalarBlockLayoutFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES, VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME, VK_EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION, 35}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES, VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME, VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION, 34}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderAtomicFloatFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT, VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME, VK_EXT_SHADER_ATOMIC_FLOAT_SPEC_VERSION, 33}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT, VK_EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME, VK_EXT_SHADER_ATOMIC_FLOAT_2_SPEC_VERSION, 32}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderAtomicInt64Features>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES, VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME, VK_KHR_SHADER_ATOMIC_INT64_SPEC_VERSION, 31}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderClockFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR, VK_KHR_SHADER_CLOCK_EXTENSION_NAME, VK_KHR_SHADER_CLOCK_SPEC_VERSION, 30}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION, 29}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderDrawParametersFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES, VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION, 28}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderFloat16Int8Features>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION, 27}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT, VK_EXT_SHADER_IMAGE_ATOMIC_INT64_EXTENSION_NAME, VK_EXT_SHADER_IMAGE_ATOMIC_INT64_SPEC_VERSION, 26}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderImageFootprintFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV, VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME, VK_NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION, 25}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderIntegerDotProductFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES, VK_KHR_SHADER_INTEGER_DOT_PRODUCT_EXTENSION_NAME, VK_KHR_SHADER_INTEGER_DOT_PRODUCT_SPEC_VERSION, 24}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL, VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME, VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION, 23}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderSMBuiltinsFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV, VK_NV_SHADER_SM_BUILTINS_EXTENSION_NAME, VK_NV_SHADER_SM_BUILTINS_SPEC_VERSION, 22}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES, VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME, VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION, 21}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR, VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_EXTENSION_NAME, VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_SPEC_VERSION, 20}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderTerminateInvocationFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES, VK_KHR_SHADER_TERMINATE_INVOCATION_EXTENSION_NAME, VK_KHR_SHADER_TERMINATE_INVOCATION_SPEC_VERSION, 19}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShadingRateImageFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV, VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME, VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION, 18}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSubgroupSizeControlFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES, VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME, VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION, 17}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT, VK_EXT_SUBPASS_MERGE_FEEDBACK_EXTENSION_NAME, VK_EXT_SUBPASS_MERGE_FEEDBACK_SPEC_VERSION, 16}; }
 template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSubpassShadingFeaturesHUAWEI>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI, VK_HUAWEI_SUBPASS_SHADING_EXTENSION_NAME, VK_HUAWEI_SUBPASS_SHADING_SPEC_VERSION, 15}; }
 template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSynchronization2Features>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES, VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME, VK_KHR_SYNCHRONIZATION_2_SPEC_VERSION, 14}; }
 template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT, VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME, VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION, 13}; }
@@ -518,6 +533,8 @@
 	{ createFeatureStructWrapper<VkPhysicalDeviceHostQueryResetFeatures>, VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME, VK_EXT_HOST_QUERY_RESET_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceImagelessFramebufferFeatures>, VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME, VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceImage2DViewOf3DFeaturesEXT>, VK_EXT_IMAGE_2D_VIEW_OF_3D_EXTENSION_NAME, VK_EXT_IMAGE_2D_VIEW_OF_3D_SPEC_VERSION },
+	{ createFeatureStructWrapper<VkPhysicalDeviceImageCompressionControlFeaturesEXT>, VK_EXT_IMAGE_COMPRESSION_CONTROL_EXTENSION_NAME, VK_EXT_IMAGE_COMPRESSION_CONTROL_SPEC_VERSION },
+	{ createFeatureStructWrapper<VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT>, VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_EXTENSION_NAME, VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceImageRobustnessFeatures>, VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME, VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceImageViewMinLodFeaturesEXT>, VK_EXT_IMAGE_VIEW_MIN_LOD_EXTENSION_NAME, VK_EXT_IMAGE_VIEW_MIN_LOD_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>, VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME, VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION },
@@ -536,6 +553,7 @@
 	{ createFeatureStructWrapper<VkPhysicalDevicePerformanceQueryFeaturesKHR>, VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME, VK_KHR_PERFORMANCE_QUERY_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDevicePipelineCreationCacheControlFeatures>, VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME, VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR>, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION },
+	{ createFeatureStructWrapper<VkPhysicalDevicePipelinePropertiesFeaturesEXT>, VK_EXT_PIPELINE_PROPERTIES_EXTENSION_NAME, VK_EXT_PIPELINE_PROPERTIES_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDevicePortabilitySubsetFeaturesKHR>, VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME, VK_KHR_PORTABILITY_SUBSET_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDevicePresentIdFeaturesKHR>, VK_KHR_PRESENT_ID_EXTENSION_NAME, VK_KHR_PRESENT_ID_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDevicePresentWaitFeaturesKHR>, VK_KHR_PRESENT_WAIT_EXTENSION_NAME, VK_KHR_PRESENT_WAIT_SPEC_VERSION },
@@ -545,6 +563,7 @@
 	{ createFeatureStructWrapper<VkPhysicalDeviceProtectedMemoryFeatures>, DECL_PROTECTED_MEMORY_EXTENSION_NAME, 0 },
 	{ createFeatureStructWrapper<VkPhysicalDeviceProvokingVertexFeaturesEXT>, VK_EXT_PROVOKING_VERTEX_EXTENSION_NAME, VK_EXT_PROVOKING_VERTEX_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceRayQueryFeaturesKHR>, VK_KHR_RAY_QUERY_EXTENSION_NAME, VK_KHR_RAY_QUERY_SPEC_VERSION },
+	{ createFeatureStructWrapper<VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR>, VK_KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME, VK_KHR_RAY_TRACING_MAINTENANCE_1_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceRayTracingMotionBlurFeaturesNV>, VK_NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME, VK_NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceRayTracingPipelineFeaturesKHR>, VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME, VK_KHR_RAY_TRACING_PIPELINE_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV>, VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME, VK_NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION },
@@ -570,6 +589,7 @@
 	{ createFeatureStructWrapper<VkPhysicalDeviceShaderTerminateInvocationFeatures>, VK_KHR_SHADER_TERMINATE_INVOCATION_EXTENSION_NAME, VK_KHR_SHADER_TERMINATE_INVOCATION_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceShadingRateImageFeaturesNV>, VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME, VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceSubgroupSizeControlFeatures>, VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME, VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION },
+	{ createFeatureStructWrapper<VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT>, VK_EXT_SUBPASS_MERGE_FEEDBACK_EXTENSION_NAME, VK_EXT_SUBPASS_MERGE_FEEDBACK_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceSubpassShadingFeaturesHUAWEI>, VK_HUAWEI_SUBPASS_SHADING_EXTENSION_NAME, VK_HUAWEI_SUBPASS_SHADING_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceSynchronization2Features>, VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME, VK_KHR_SYNCHRONIZATION_2_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT>, VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME, VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION },
diff --git a/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFeaturesForContextDecl.inl b/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFeaturesForContextDecl.inl
index 234a2ce..2e1742a 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFeaturesForContextDecl.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFeaturesForContextDecl.inl
@@ -3,112 +3,117 @@
  * This file was generated by /scripts/gen_framework.py
  */
 
-const vk::VkPhysicalDevice16BitStorageFeatures&							get16BitStorageFeatures						(void) const;
-const vk::VkPhysicalDevice4444FormatsFeaturesEXT&						get4444FormatsFeaturesEXT					(void) const;
-const vk::VkPhysicalDevice8BitStorageFeatures&							get8BitStorageFeatures						(void) const;
-const vk::VkPhysicalDeviceAccelerationStructureFeaturesKHR&				getAccelerationStructureFeatures			(void) const;
-const vk::VkPhysicalDeviceASTCDecodeFeaturesEXT&						getASTCDecodeFeaturesEXT					(void) const;
-const vk::VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT&			getBlendOperationAdvancedFeaturesEXT		(void) const;
-const vk::VkPhysicalDeviceBorderColorSwizzleFeaturesEXT&				getBorderColorSwizzleFeaturesEXT			(void) const;
-const vk::VkPhysicalDeviceBufferDeviceAddressFeatures&					getBufferDeviceAddressFeatures				(void) const;
-const vk::VkPhysicalDeviceBufferDeviceAddressFeaturesEXT&				getBufferDeviceAddressFeaturesEXT			(void) const;
-const vk::VkPhysicalDeviceCoherentMemoryFeaturesAMD&					getCoherentMemoryFeaturesAMD				(void) const;
-const vk::VkPhysicalDeviceColorWriteEnableFeaturesEXT&					getColorWriteEnableFeaturesEXT				(void) const;
-const vk::VkPhysicalDeviceComputeShaderDerivativesFeaturesNV&			getComputeShaderDerivativesFeatures			(void) const;
-const vk::VkPhysicalDeviceConditionalRenderingFeaturesEXT&				getConditionalRenderingFeaturesEXT			(void) const;
-const vk::VkPhysicalDeviceCooperativeMatrixFeaturesNV&					getCooperativeMatrixFeatures				(void) const;
-const vk::VkPhysicalDeviceCornerSampledImageFeaturesNV&					getCornerSampledImageFeatures				(void) const;
-const vk::VkPhysicalDeviceCoverageReductionModeFeaturesNV&				getCoverageReductionModeFeatures			(void) const;
-const vk::VkPhysicalDeviceCustomBorderColorFeaturesEXT&					getCustomBorderColorFeaturesEXT				(void) const;
-const vk::VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV&	getDedicatedAllocationImageAliasingFeatures	(void) const;
-const vk::VkPhysicalDeviceDepthClipControlFeaturesEXT&					getDepthClipControlFeaturesEXT				(void) const;
-const vk::VkPhysicalDeviceDepthClipEnableFeaturesEXT&					getDepthClipEnableFeaturesEXT				(void) const;
-const vk::VkPhysicalDeviceDescriptorIndexingFeatures&					getDescriptorIndexingFeatures				(void) const;
-const vk::VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE&		getDescriptorSetHostMappingFeaturesVALVE	(void) const;
-const vk::VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV&			getDeviceGeneratedCommandsFeatures			(void) const;
-const vk::VkPhysicalDeviceDeviceMemoryReportFeaturesEXT&				getDeviceMemoryReportFeaturesEXT			(void) const;
-const vk::VkPhysicalDeviceDiagnosticsConfigFeaturesNV&					getDiagnosticsConfigFeatures				(void) const;
-const vk::VkPhysicalDeviceDynamicRenderingFeatures&						getDynamicRenderingFeatures					(void) const;
-const vk::VkPhysicalDeviceExclusiveScissorFeaturesNV&					getExclusiveScissorFeatures					(void) const;
-const vk::VkPhysicalDeviceExtendedDynamicStateFeaturesEXT&				getExtendedDynamicStateFeaturesEXT			(void) const;
-const vk::VkPhysicalDeviceExtendedDynamicState2FeaturesEXT&				getExtendedDynamicState2FeaturesEXT			(void) const;
-const vk::VkPhysicalDeviceExternalMemoryRDMAFeaturesNV&					getExternalMemoryRDMAFeatures				(void) const;
-const vk::VkPhysicalDeviceFragmentDensityMapFeaturesEXT&				getFragmentDensityMapFeaturesEXT			(void) const;
-const vk::VkPhysicalDeviceFragmentDensityMap2FeaturesEXT&				getFragmentDensityMap2FeaturesEXT			(void) const;
-const vk::VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM&			getFragmentDensityMapOffsetFeaturesQCOM		(void) const;
-const vk::VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV&			getFragmentShaderBarycentricFeatures		(void) const;
-const vk::VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT&			getFragmentShaderInterlockFeaturesEXT		(void) const;
-const vk::VkPhysicalDeviceFragmentShadingRateFeaturesKHR&				getFragmentShadingRateFeatures				(void) const;
-const vk::VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV&			getFragmentShadingRateEnumsFeatures			(void) const;
-const vk::VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR&				getGlobalPriorityQueryFeatures				(void) const;
-const vk::VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT&			getGraphicsPipelineLibraryFeaturesEXT		(void) const;
-const vk::VkPhysicalDeviceHostQueryResetFeatures&						getHostQueryResetFeatures					(void) const;
-const vk::VkPhysicalDeviceImagelessFramebufferFeatures&					getImagelessFramebufferFeatures				(void) const;
-const vk::VkPhysicalDeviceImage2DViewOf3DFeaturesEXT&					getImage2DViewOf3DFeaturesEXT				(void) const;
-const vk::VkPhysicalDeviceImageRobustnessFeatures&						getImageRobustnessFeatures					(void) const;
-const vk::VkPhysicalDeviceImageViewMinLodFeaturesEXT&					getImageViewMinLodFeaturesEXT				(void) const;
-const vk::VkPhysicalDeviceIndexTypeUint8FeaturesEXT&					getIndexTypeUint8FeaturesEXT				(void) const;
-const vk::VkPhysicalDeviceInheritedViewportScissorFeaturesNV&			getInheritedViewportScissorFeatures			(void) const;
-const vk::VkPhysicalDeviceInlineUniformBlockFeatures&					getInlineUniformBlockFeatures				(void) const;
-const vk::VkPhysicalDeviceInvocationMaskFeaturesHUAWEI&					getInvocationMaskFeaturesHUAWEI				(void) const;
-const vk::VkPhysicalDeviceLinearColorAttachmentFeaturesNV&				getLinearColorAttachmentFeatures			(void) const;
-const vk::VkPhysicalDeviceLineRasterizationFeaturesEXT&					getLineRasterizationFeaturesEXT				(void) const;
-const vk::VkPhysicalDeviceMaintenance4Features&							getMaintenance4Features						(void) const;
-const vk::VkPhysicalDeviceMemoryPriorityFeaturesEXT&					getMemoryPriorityFeaturesEXT				(void) const;
-const vk::VkPhysicalDeviceMeshShaderFeaturesNV&							getMeshShaderFeatures						(void) const;
-const vk::VkPhysicalDeviceMultiviewFeatures&							getMultiviewFeatures						(void) const;
-const vk::VkPhysicalDeviceMultiDrawFeaturesEXT&							getMultiDrawFeaturesEXT						(void) const;
-const vk::VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE&			getMutableDescriptorTypeFeaturesVALVE		(void) const;
-const vk::VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT&			getPageableDeviceLocalMemoryFeaturesEXT		(void) const;
-const vk::VkPhysicalDevicePerformanceQueryFeaturesKHR&					getPerformanceQueryFeatures					(void) const;
-const vk::VkPhysicalDevicePipelineCreationCacheControlFeatures&			getPipelineCreationCacheControlFeatures		(void) const;
-const vk::VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR&		getPipelineExecutablePropertiesFeatures		(void) const;
-const vk::VkPhysicalDevicePortabilitySubsetFeaturesKHR&					getPortabilitySubsetFeatures				(void) const;
-const vk::VkPhysicalDevicePresentIdFeaturesKHR&							getPresentIdFeatures						(void) const;
-const vk::VkPhysicalDevicePresentWaitFeaturesKHR&						getPresentWaitFeatures						(void) const;
-const vk::VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT&			getPrimitivesGeneratedQueryFeaturesEXT		(void) const;
-const vk::VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT&		getPrimitiveTopologyListRestartFeaturesEXT	(void) const;
-const vk::VkPhysicalDevicePrivateDataFeatures&							getPrivateDataFeatures						(void) const;
-const vk::VkPhysicalDeviceProtectedMemoryFeatures&						getProtectedMemoryFeatures					(void) const;
-const vk::VkPhysicalDeviceProvokingVertexFeaturesEXT&					getProvokingVertexFeaturesEXT				(void) const;
-const vk::VkPhysicalDeviceRayQueryFeaturesKHR&							getRayQueryFeatures							(void) const;
-const vk::VkPhysicalDeviceRayTracingMotionBlurFeaturesNV&				getRayTracingMotionBlurFeatures				(void) const;
-const vk::VkPhysicalDeviceRayTracingPipelineFeaturesKHR&				getRayTracingPipelineFeatures				(void) const;
-const vk::VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV&			getRepresentativeFragmentTestFeatures		(void) const;
-const vk::VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT&					getRGBA10X6FormatsFeaturesEXT				(void) const;
-const vk::VkPhysicalDeviceRobustness2FeaturesEXT&						getRobustness2FeaturesEXT					(void) const;
-const vk::VkPhysicalDeviceSamplerYcbcrConversionFeatures&				getSamplerYcbcrConversionFeatures			(void) const;
-const vk::VkPhysicalDeviceScalarBlockLayoutFeatures&					getScalarBlockLayoutFeatures				(void) const;
-const vk::VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures&			getSeparateDepthStencilLayoutsFeatures		(void) const;
-const vk::VkPhysicalDeviceShaderAtomicFloatFeaturesEXT&					getShaderAtomicFloatFeaturesEXT				(void) const;
-const vk::VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT&				getShaderAtomicFloat2FeaturesEXT			(void) const;
-const vk::VkPhysicalDeviceShaderAtomicInt64Features&					getShaderAtomicInt64Features				(void) const;
-const vk::VkPhysicalDeviceShaderClockFeaturesKHR&						getShaderClockFeatures						(void) const;
-const vk::VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures&		getShaderDemoteToHelperInvocationFeatures	(void) const;
-const vk::VkPhysicalDeviceShaderDrawParametersFeatures&					getShaderDrawParametersFeatures				(void) const;
-const vk::VkPhysicalDeviceShaderFloat16Int8Features&					getShaderFloat16Int8Features				(void) const;
-const vk::VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT&			getShaderImageAtomicInt64FeaturesEXT		(void) const;
-const vk::VkPhysicalDeviceShaderImageFootprintFeaturesNV&				getShaderImageFootprintFeatures				(void) const;
-const vk::VkPhysicalDeviceShaderIntegerDotProductFeatures&				getShaderIntegerDotProductFeatures			(void) const;
-const vk::VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL&			getShaderIntegerFunctions2FeaturesINTEL		(void) const;
-const vk::VkPhysicalDeviceShaderSMBuiltinsFeaturesNV&					getShaderSMBuiltinsFeatures					(void) const;
-const vk::VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures&			getShaderSubgroupExtendedTypesFeatures		(void) const;
-const vk::VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR&	getShaderSubgroupUniformControlFlowFeatures	(void) const;
-const vk::VkPhysicalDeviceShaderTerminateInvocationFeatures&			getShaderTerminateInvocationFeatures		(void) const;
-const vk::VkPhysicalDeviceShadingRateImageFeaturesNV&					getShadingRateImageFeatures					(void) const;
-const vk::VkPhysicalDeviceSubgroupSizeControlFeatures&					getSubgroupSizeControlFeatures				(void) const;
-const vk::VkPhysicalDeviceSubpassShadingFeaturesHUAWEI&					getSubpassShadingFeaturesHUAWEI				(void) const;
-const vk::VkPhysicalDeviceSynchronization2Features&						getSynchronization2Features					(void) const;
-const vk::VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT&				getTexelBufferAlignmentFeaturesEXT			(void) const;
-const vk::VkPhysicalDeviceTextureCompressionASTCHDRFeatures&			getTextureCompressionASTCHDRFeatures		(void) const;
-const vk::VkPhysicalDeviceTimelineSemaphoreFeatures&					getTimelineSemaphoreFeatures				(void) const;
-const vk::VkPhysicalDeviceTransformFeedbackFeaturesEXT&					getTransformFeedbackFeaturesEXT				(void) const;
-const vk::VkPhysicalDeviceUniformBufferStandardLayoutFeatures&			getUniformBufferStandardLayoutFeatures		(void) const;
-const vk::VkPhysicalDeviceVariablePointersFeatures&						getVariablePointersFeatures					(void) const;
-const vk::VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT&			getVertexAttributeDivisorFeaturesEXT		(void) const;
-const vk::VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT&			getVertexInputDynamicStateFeaturesEXT		(void) const;
-const vk::VkPhysicalDeviceVulkanMemoryModelFeatures&					getVulkanMemoryModelFeatures				(void) const;
-const vk::VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR&		getWorkgroupMemoryExplicitLayoutFeatures	(void) const;
-const vk::VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT&				getYcbcr2Plane444FormatsFeaturesEXT			(void) const;
-const vk::VkPhysicalDeviceYcbcrImageArraysFeaturesEXT&					getYcbcrImageArraysFeaturesEXT				(void) const;
-const vk::VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures&		getZeroInitializeWorkgroupMemoryFeatures	(void) const;
+const vk::VkPhysicalDevice16BitStorageFeatures&							get16BitStorageFeatures							(void) const;
+const vk::VkPhysicalDevice4444FormatsFeaturesEXT&						get4444FormatsFeaturesEXT						(void) const;
+const vk::VkPhysicalDevice8BitStorageFeatures&							get8BitStorageFeatures							(void) const;
+const vk::VkPhysicalDeviceAccelerationStructureFeaturesKHR&				getAccelerationStructureFeatures				(void) const;
+const vk::VkPhysicalDeviceASTCDecodeFeaturesEXT&						getASTCDecodeFeaturesEXT						(void) const;
+const vk::VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT&			getBlendOperationAdvancedFeaturesEXT			(void) const;
+const vk::VkPhysicalDeviceBorderColorSwizzleFeaturesEXT&				getBorderColorSwizzleFeaturesEXT				(void) const;
+const vk::VkPhysicalDeviceBufferDeviceAddressFeatures&					getBufferDeviceAddressFeatures					(void) const;
+const vk::VkPhysicalDeviceBufferDeviceAddressFeaturesEXT&				getBufferDeviceAddressFeaturesEXT				(void) const;
+const vk::VkPhysicalDeviceCoherentMemoryFeaturesAMD&					getCoherentMemoryFeaturesAMD					(void) const;
+const vk::VkPhysicalDeviceColorWriteEnableFeaturesEXT&					getColorWriteEnableFeaturesEXT					(void) const;
+const vk::VkPhysicalDeviceComputeShaderDerivativesFeaturesNV&			getComputeShaderDerivativesFeatures				(void) const;
+const vk::VkPhysicalDeviceConditionalRenderingFeaturesEXT&				getConditionalRenderingFeaturesEXT				(void) const;
+const vk::VkPhysicalDeviceCooperativeMatrixFeaturesNV&					getCooperativeMatrixFeatures					(void) const;
+const vk::VkPhysicalDeviceCornerSampledImageFeaturesNV&					getCornerSampledImageFeatures					(void) const;
+const vk::VkPhysicalDeviceCoverageReductionModeFeaturesNV&				getCoverageReductionModeFeatures				(void) const;
+const vk::VkPhysicalDeviceCustomBorderColorFeaturesEXT&					getCustomBorderColorFeaturesEXT					(void) const;
+const vk::VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV&	getDedicatedAllocationImageAliasingFeatures		(void) const;
+const vk::VkPhysicalDeviceDepthClipControlFeaturesEXT&					getDepthClipControlFeaturesEXT					(void) const;
+const vk::VkPhysicalDeviceDepthClipEnableFeaturesEXT&					getDepthClipEnableFeaturesEXT					(void) const;
+const vk::VkPhysicalDeviceDescriptorIndexingFeatures&					getDescriptorIndexingFeatures					(void) const;
+const vk::VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE&		getDescriptorSetHostMappingFeaturesVALVE		(void) const;
+const vk::VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV&			getDeviceGeneratedCommandsFeatures				(void) const;
+const vk::VkPhysicalDeviceDeviceMemoryReportFeaturesEXT&				getDeviceMemoryReportFeaturesEXT				(void) const;
+const vk::VkPhysicalDeviceDiagnosticsConfigFeaturesNV&					getDiagnosticsConfigFeatures					(void) const;
+const vk::VkPhysicalDeviceDynamicRenderingFeatures&						getDynamicRenderingFeatures						(void) const;
+const vk::VkPhysicalDeviceExclusiveScissorFeaturesNV&					getExclusiveScissorFeatures						(void) const;
+const vk::VkPhysicalDeviceExtendedDynamicStateFeaturesEXT&				getExtendedDynamicStateFeaturesEXT				(void) const;
+const vk::VkPhysicalDeviceExtendedDynamicState2FeaturesEXT&				getExtendedDynamicState2FeaturesEXT				(void) const;
+const vk::VkPhysicalDeviceExternalMemoryRDMAFeaturesNV&					getExternalMemoryRDMAFeatures					(void) const;
+const vk::VkPhysicalDeviceFragmentDensityMapFeaturesEXT&				getFragmentDensityMapFeaturesEXT				(void) const;
+const vk::VkPhysicalDeviceFragmentDensityMap2FeaturesEXT&				getFragmentDensityMap2FeaturesEXT				(void) const;
+const vk::VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM&			getFragmentDensityMapOffsetFeaturesQCOM			(void) const;
+const vk::VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV&			getFragmentShaderBarycentricFeatures			(void) const;
+const vk::VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT&			getFragmentShaderInterlockFeaturesEXT			(void) const;
+const vk::VkPhysicalDeviceFragmentShadingRateFeaturesKHR&				getFragmentShadingRateFeatures					(void) const;
+const vk::VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV&			getFragmentShadingRateEnumsFeatures				(void) const;
+const vk::VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR&				getGlobalPriorityQueryFeatures					(void) const;
+const vk::VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT&			getGraphicsPipelineLibraryFeaturesEXT			(void) const;
+const vk::VkPhysicalDeviceHostQueryResetFeatures&						getHostQueryResetFeatures						(void) const;
+const vk::VkPhysicalDeviceImagelessFramebufferFeatures&					getImagelessFramebufferFeatures					(void) const;
+const vk::VkPhysicalDeviceImage2DViewOf3DFeaturesEXT&					getImage2DViewOf3DFeaturesEXT					(void) const;
+const vk::VkPhysicalDeviceImageCompressionControlFeaturesEXT&			getImageCompressionControlFeaturesEXT			(void) const;
+const vk::VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT&	getImageCompressionControlSwapchainFeaturesEXT	(void) const;
+const vk::VkPhysicalDeviceImageRobustnessFeatures&						getImageRobustnessFeatures						(void) const;
+const vk::VkPhysicalDeviceImageViewMinLodFeaturesEXT&					getImageViewMinLodFeaturesEXT					(void) const;
+const vk::VkPhysicalDeviceIndexTypeUint8FeaturesEXT&					getIndexTypeUint8FeaturesEXT					(void) const;
+const vk::VkPhysicalDeviceInheritedViewportScissorFeaturesNV&			getInheritedViewportScissorFeatures				(void) const;
+const vk::VkPhysicalDeviceInlineUniformBlockFeatures&					getInlineUniformBlockFeatures					(void) const;
+const vk::VkPhysicalDeviceInvocationMaskFeaturesHUAWEI&					getInvocationMaskFeaturesHUAWEI					(void) const;
+const vk::VkPhysicalDeviceLinearColorAttachmentFeaturesNV&				getLinearColorAttachmentFeatures				(void) const;
+const vk::VkPhysicalDeviceLineRasterizationFeaturesEXT&					getLineRasterizationFeaturesEXT					(void) const;
+const vk::VkPhysicalDeviceMaintenance4Features&							getMaintenance4Features							(void) const;
+const vk::VkPhysicalDeviceMemoryPriorityFeaturesEXT&					getMemoryPriorityFeaturesEXT					(void) const;
+const vk::VkPhysicalDeviceMeshShaderFeaturesNV&							getMeshShaderFeatures							(void) const;
+const vk::VkPhysicalDeviceMultiviewFeatures&							getMultiviewFeatures							(void) const;
+const vk::VkPhysicalDeviceMultiDrawFeaturesEXT&							getMultiDrawFeaturesEXT							(void) const;
+const vk::VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE&			getMutableDescriptorTypeFeaturesVALVE			(void) const;
+const vk::VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT&			getPageableDeviceLocalMemoryFeaturesEXT			(void) const;
+const vk::VkPhysicalDevicePerformanceQueryFeaturesKHR&					getPerformanceQueryFeatures						(void) const;
+const vk::VkPhysicalDevicePipelineCreationCacheControlFeatures&			getPipelineCreationCacheControlFeatures			(void) const;
+const vk::VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR&		getPipelineExecutablePropertiesFeatures			(void) const;
+const vk::VkPhysicalDevicePipelinePropertiesFeaturesEXT&				getPipelinePropertiesFeaturesEXT				(void) const;
+const vk::VkPhysicalDevicePortabilitySubsetFeaturesKHR&					getPortabilitySubsetFeatures					(void) const;
+const vk::VkPhysicalDevicePresentIdFeaturesKHR&							getPresentIdFeatures							(void) const;
+const vk::VkPhysicalDevicePresentWaitFeaturesKHR&						getPresentWaitFeatures							(void) const;
+const vk::VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT&			getPrimitivesGeneratedQueryFeaturesEXT			(void) const;
+const vk::VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT&		getPrimitiveTopologyListRestartFeaturesEXT		(void) const;
+const vk::VkPhysicalDevicePrivateDataFeatures&							getPrivateDataFeatures							(void) const;
+const vk::VkPhysicalDeviceProtectedMemoryFeatures&						getProtectedMemoryFeatures						(void) const;
+const vk::VkPhysicalDeviceProvokingVertexFeaturesEXT&					getProvokingVertexFeaturesEXT					(void) const;
+const vk::VkPhysicalDeviceRayQueryFeaturesKHR&							getRayQueryFeatures								(void) const;
+const vk::VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR&			getRayTracingMaintenance1Features				(void) const;
+const vk::VkPhysicalDeviceRayTracingMotionBlurFeaturesNV&				getRayTracingMotionBlurFeatures					(void) const;
+const vk::VkPhysicalDeviceRayTracingPipelineFeaturesKHR&				getRayTracingPipelineFeatures					(void) const;
+const vk::VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV&			getRepresentativeFragmentTestFeatures			(void) const;
+const vk::VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT&					getRGBA10X6FormatsFeaturesEXT					(void) const;
+const vk::VkPhysicalDeviceRobustness2FeaturesEXT&						getRobustness2FeaturesEXT						(void) const;
+const vk::VkPhysicalDeviceSamplerYcbcrConversionFeatures&				getSamplerYcbcrConversionFeatures				(void) const;
+const vk::VkPhysicalDeviceScalarBlockLayoutFeatures&					getScalarBlockLayoutFeatures					(void) const;
+const vk::VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures&			getSeparateDepthStencilLayoutsFeatures			(void) const;
+const vk::VkPhysicalDeviceShaderAtomicFloatFeaturesEXT&					getShaderAtomicFloatFeaturesEXT					(void) const;
+const vk::VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT&				getShaderAtomicFloat2FeaturesEXT				(void) const;
+const vk::VkPhysicalDeviceShaderAtomicInt64Features&					getShaderAtomicInt64Features					(void) const;
+const vk::VkPhysicalDeviceShaderClockFeaturesKHR&						getShaderClockFeatures							(void) const;
+const vk::VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures&		getShaderDemoteToHelperInvocationFeatures		(void) const;
+const vk::VkPhysicalDeviceShaderDrawParametersFeatures&					getShaderDrawParametersFeatures					(void) const;
+const vk::VkPhysicalDeviceShaderFloat16Int8Features&					getShaderFloat16Int8Features					(void) const;
+const vk::VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT&			getShaderImageAtomicInt64FeaturesEXT			(void) const;
+const vk::VkPhysicalDeviceShaderImageFootprintFeaturesNV&				getShaderImageFootprintFeatures					(void) const;
+const vk::VkPhysicalDeviceShaderIntegerDotProductFeatures&				getShaderIntegerDotProductFeatures				(void) const;
+const vk::VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL&			getShaderIntegerFunctions2FeaturesINTEL			(void) const;
+const vk::VkPhysicalDeviceShaderSMBuiltinsFeaturesNV&					getShaderSMBuiltinsFeatures						(void) const;
+const vk::VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures&			getShaderSubgroupExtendedTypesFeatures			(void) const;
+const vk::VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR&	getShaderSubgroupUniformControlFlowFeatures		(void) const;
+const vk::VkPhysicalDeviceShaderTerminateInvocationFeatures&			getShaderTerminateInvocationFeatures			(void) const;
+const vk::VkPhysicalDeviceShadingRateImageFeaturesNV&					getShadingRateImageFeatures						(void) const;
+const vk::VkPhysicalDeviceSubgroupSizeControlFeatures&					getSubgroupSizeControlFeatures					(void) const;
+const vk::VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT&				getSubpassMergeFeedbackFeaturesEXT				(void) const;
+const vk::VkPhysicalDeviceSubpassShadingFeaturesHUAWEI&					getSubpassShadingFeaturesHUAWEI					(void) const;
+const vk::VkPhysicalDeviceSynchronization2Features&						getSynchronization2Features						(void) const;
+const vk::VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT&				getTexelBufferAlignmentFeaturesEXT				(void) const;
+const vk::VkPhysicalDeviceTextureCompressionASTCHDRFeatures&			getTextureCompressionASTCHDRFeatures			(void) const;
+const vk::VkPhysicalDeviceTimelineSemaphoreFeatures&					getTimelineSemaphoreFeatures					(void) const;
+const vk::VkPhysicalDeviceTransformFeedbackFeaturesEXT&					getTransformFeedbackFeaturesEXT					(void) const;
+const vk::VkPhysicalDeviceUniformBufferStandardLayoutFeatures&			getUniformBufferStandardLayoutFeatures			(void) const;
+const vk::VkPhysicalDeviceVariablePointersFeatures&						getVariablePointersFeatures						(void) const;
+const vk::VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT&			getVertexAttributeDivisorFeaturesEXT			(void) const;
+const vk::VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT&			getVertexInputDynamicStateFeaturesEXT			(void) const;
+const vk::VkPhysicalDeviceVulkanMemoryModelFeatures&					getVulkanMemoryModelFeatures					(void) const;
+const vk::VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR&		getWorkgroupMemoryExplicitLayoutFeatures		(void) const;
+const vk::VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT&				getYcbcr2Plane444FormatsFeaturesEXT				(void) const;
+const vk::VkPhysicalDeviceYcbcrImageArraysFeaturesEXT&					getYcbcrImageArraysFeaturesEXT					(void) const;
+const vk::VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures&		getZeroInitializeWorkgroupMemoryFeatures		(void) const;
diff --git a/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFeaturesForContextDefs.inl b/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFeaturesForContextDefs.inl
index 5e5b0af..eddf0f2 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFeaturesForContextDefs.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFeaturesForContextDefs.inl
@@ -3,112 +3,117 @@
  * This file was generated by /scripts/gen_framework.py
  */
 
-const vk::VkPhysicalDevice16BitStorageFeatures&							Context::get16BitStorageFeatures						(void) const { return m_device->get16BitStorageFeatures();						}
-const vk::VkPhysicalDevice4444FormatsFeaturesEXT&						Context::get4444FormatsFeaturesEXT						(void) const { return m_device->get4444FormatsFeaturesEXT();					}
-const vk::VkPhysicalDevice8BitStorageFeatures&							Context::get8BitStorageFeatures							(void) const { return m_device->get8BitStorageFeatures();						}
-const vk::VkPhysicalDeviceAccelerationStructureFeaturesKHR&				Context::getAccelerationStructureFeatures				(void) const { return m_device->getAccelerationStructureFeatures();				}
-const vk::VkPhysicalDeviceASTCDecodeFeaturesEXT&						Context::getASTCDecodeFeaturesEXT						(void) const { return m_device->getASTCDecodeFeaturesEXT();						}
-const vk::VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT&			Context::getBlendOperationAdvancedFeaturesEXT			(void) const { return m_device->getBlendOperationAdvancedFeaturesEXT();			}
-const vk::VkPhysicalDeviceBorderColorSwizzleFeaturesEXT&				Context::getBorderColorSwizzleFeaturesEXT				(void) const { return m_device->getBorderColorSwizzleFeaturesEXT();				}
-const vk::VkPhysicalDeviceBufferDeviceAddressFeatures&					Context::getBufferDeviceAddressFeatures					(void) const { return m_device->getBufferDeviceAddressFeatures();				}
-const vk::VkPhysicalDeviceBufferDeviceAddressFeaturesEXT&				Context::getBufferDeviceAddressFeaturesEXT				(void) const { return m_device->getBufferDeviceAddressFeaturesEXT();			}
-const vk::VkPhysicalDeviceCoherentMemoryFeaturesAMD&					Context::getCoherentMemoryFeaturesAMD					(void) const { return m_device->getCoherentMemoryFeaturesAMD();					}
-const vk::VkPhysicalDeviceColorWriteEnableFeaturesEXT&					Context::getColorWriteEnableFeaturesEXT					(void) const { return m_device->getColorWriteEnableFeaturesEXT();				}
-const vk::VkPhysicalDeviceComputeShaderDerivativesFeaturesNV&			Context::getComputeShaderDerivativesFeatures			(void) const { return m_device->getComputeShaderDerivativesFeatures();			}
-const vk::VkPhysicalDeviceConditionalRenderingFeaturesEXT&				Context::getConditionalRenderingFeaturesEXT				(void) const { return m_device->getConditionalRenderingFeaturesEXT();			}
-const vk::VkPhysicalDeviceCooperativeMatrixFeaturesNV&					Context::getCooperativeMatrixFeatures					(void) const { return m_device->getCooperativeMatrixFeatures();					}
-const vk::VkPhysicalDeviceCornerSampledImageFeaturesNV&					Context::getCornerSampledImageFeatures					(void) const { return m_device->getCornerSampledImageFeatures();				}
-const vk::VkPhysicalDeviceCoverageReductionModeFeaturesNV&				Context::getCoverageReductionModeFeatures				(void) const { return m_device->getCoverageReductionModeFeatures();				}
-const vk::VkPhysicalDeviceCustomBorderColorFeaturesEXT&					Context::getCustomBorderColorFeaturesEXT				(void) const { return m_device->getCustomBorderColorFeaturesEXT();				}
-const vk::VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV&	Context::getDedicatedAllocationImageAliasingFeatures	(void) const { return m_device->getDedicatedAllocationImageAliasingFeatures();	}
-const vk::VkPhysicalDeviceDepthClipControlFeaturesEXT&					Context::getDepthClipControlFeaturesEXT					(void) const { return m_device->getDepthClipControlFeaturesEXT();				}
-const vk::VkPhysicalDeviceDepthClipEnableFeaturesEXT&					Context::getDepthClipEnableFeaturesEXT					(void) const { return m_device->getDepthClipEnableFeaturesEXT();				}
-const vk::VkPhysicalDeviceDescriptorIndexingFeatures&					Context::getDescriptorIndexingFeatures					(void) const { return m_device->getDescriptorIndexingFeatures();				}
-const vk::VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE&		Context::getDescriptorSetHostMappingFeaturesVALVE		(void) const { return m_device->getDescriptorSetHostMappingFeaturesVALVE();		}
-const vk::VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV&			Context::getDeviceGeneratedCommandsFeatures				(void) const { return m_device->getDeviceGeneratedCommandsFeatures();			}
-const vk::VkPhysicalDeviceDeviceMemoryReportFeaturesEXT&				Context::getDeviceMemoryReportFeaturesEXT				(void) const { return m_device->getDeviceMemoryReportFeaturesEXT();				}
-const vk::VkPhysicalDeviceDiagnosticsConfigFeaturesNV&					Context::getDiagnosticsConfigFeatures					(void) const { return m_device->getDiagnosticsConfigFeatures();					}
-const vk::VkPhysicalDeviceDynamicRenderingFeatures&						Context::getDynamicRenderingFeatures					(void) const { return m_device->getDynamicRenderingFeatures();					}
-const vk::VkPhysicalDeviceExclusiveScissorFeaturesNV&					Context::getExclusiveScissorFeatures					(void) const { return m_device->getExclusiveScissorFeatures();					}
-const vk::VkPhysicalDeviceExtendedDynamicStateFeaturesEXT&				Context::getExtendedDynamicStateFeaturesEXT				(void) const { return m_device->getExtendedDynamicStateFeaturesEXT();			}
-const vk::VkPhysicalDeviceExtendedDynamicState2FeaturesEXT&				Context::getExtendedDynamicState2FeaturesEXT			(void) const { return m_device->getExtendedDynamicState2FeaturesEXT();			}
-const vk::VkPhysicalDeviceExternalMemoryRDMAFeaturesNV&					Context::getExternalMemoryRDMAFeatures					(void) const { return m_device->getExternalMemoryRDMAFeatures();				}
-const vk::VkPhysicalDeviceFragmentDensityMapFeaturesEXT&				Context::getFragmentDensityMapFeaturesEXT				(void) const { return m_device->getFragmentDensityMapFeaturesEXT();				}
-const vk::VkPhysicalDeviceFragmentDensityMap2FeaturesEXT&				Context::getFragmentDensityMap2FeaturesEXT				(void) const { return m_device->getFragmentDensityMap2FeaturesEXT();			}
-const vk::VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM&			Context::getFragmentDensityMapOffsetFeaturesQCOM		(void) const { return m_device->getFragmentDensityMapOffsetFeaturesQCOM();		}
-const vk::VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV&			Context::getFragmentShaderBarycentricFeatures			(void) const { return m_device->getFragmentShaderBarycentricFeatures();			}
-const vk::VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT&			Context::getFragmentShaderInterlockFeaturesEXT			(void) const { return m_device->getFragmentShaderInterlockFeaturesEXT();		}
-const vk::VkPhysicalDeviceFragmentShadingRateFeaturesKHR&				Context::getFragmentShadingRateFeatures					(void) const { return m_device->getFragmentShadingRateFeatures();				}
-const vk::VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV&			Context::getFragmentShadingRateEnumsFeatures			(void) const { return m_device->getFragmentShadingRateEnumsFeatures();			}
-const vk::VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR&				Context::getGlobalPriorityQueryFeatures					(void) const { return m_device->getGlobalPriorityQueryFeatures();				}
-const vk::VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT&			Context::getGraphicsPipelineLibraryFeaturesEXT			(void) const { return m_device->getGraphicsPipelineLibraryFeaturesEXT();		}
-const vk::VkPhysicalDeviceHostQueryResetFeatures&						Context::getHostQueryResetFeatures						(void) const { return m_device->getHostQueryResetFeatures();					}
-const vk::VkPhysicalDeviceImagelessFramebufferFeatures&					Context::getImagelessFramebufferFeatures				(void) const { return m_device->getImagelessFramebufferFeatures();				}
-const vk::VkPhysicalDeviceImage2DViewOf3DFeaturesEXT&					Context::getImage2DViewOf3DFeaturesEXT					(void) const { return m_device->getImage2DViewOf3DFeaturesEXT();				}
-const vk::VkPhysicalDeviceImageRobustnessFeatures&						Context::getImageRobustnessFeatures						(void) const { return m_device->getImageRobustnessFeatures();					}
-const vk::VkPhysicalDeviceImageViewMinLodFeaturesEXT&					Context::getImageViewMinLodFeaturesEXT					(void) const { return m_device->getImageViewMinLodFeaturesEXT();				}
-const vk::VkPhysicalDeviceIndexTypeUint8FeaturesEXT&					Context::getIndexTypeUint8FeaturesEXT					(void) const { return m_device->getIndexTypeUint8FeaturesEXT();					}
-const vk::VkPhysicalDeviceInheritedViewportScissorFeaturesNV&			Context::getInheritedViewportScissorFeatures			(void) const { return m_device->getInheritedViewportScissorFeatures();			}
-const vk::VkPhysicalDeviceInlineUniformBlockFeatures&					Context::getInlineUniformBlockFeatures					(void) const { return m_device->getInlineUniformBlockFeatures();				}
-const vk::VkPhysicalDeviceInvocationMaskFeaturesHUAWEI&					Context::getInvocationMaskFeaturesHUAWEI				(void) const { return m_device->getInvocationMaskFeaturesHUAWEI();				}
-const vk::VkPhysicalDeviceLinearColorAttachmentFeaturesNV&				Context::getLinearColorAttachmentFeatures				(void) const { return m_device->getLinearColorAttachmentFeatures();				}
-const vk::VkPhysicalDeviceLineRasterizationFeaturesEXT&					Context::getLineRasterizationFeaturesEXT				(void) const { return m_device->getLineRasterizationFeaturesEXT();				}
-const vk::VkPhysicalDeviceMaintenance4Features&							Context::getMaintenance4Features						(void) const { return m_device->getMaintenance4Features();						}
-const vk::VkPhysicalDeviceMemoryPriorityFeaturesEXT&					Context::getMemoryPriorityFeaturesEXT					(void) const { return m_device->getMemoryPriorityFeaturesEXT();					}
-const vk::VkPhysicalDeviceMeshShaderFeaturesNV&							Context::getMeshShaderFeatures							(void) const { return m_device->getMeshShaderFeatures();						}
-const vk::VkPhysicalDeviceMultiviewFeatures&							Context::getMultiviewFeatures							(void) const { return m_device->getMultiviewFeatures();							}
-const vk::VkPhysicalDeviceMultiDrawFeaturesEXT&							Context::getMultiDrawFeaturesEXT						(void) const { return m_device->getMultiDrawFeaturesEXT();						}
-const vk::VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE&			Context::getMutableDescriptorTypeFeaturesVALVE			(void) const { return m_device->getMutableDescriptorTypeFeaturesVALVE();		}
-const vk::VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT&			Context::getPageableDeviceLocalMemoryFeaturesEXT		(void) const { return m_device->getPageableDeviceLocalMemoryFeaturesEXT();		}
-const vk::VkPhysicalDevicePerformanceQueryFeaturesKHR&					Context::getPerformanceQueryFeatures					(void) const { return m_device->getPerformanceQueryFeatures();					}
-const vk::VkPhysicalDevicePipelineCreationCacheControlFeatures&			Context::getPipelineCreationCacheControlFeatures		(void) const { return m_device->getPipelineCreationCacheControlFeatures();		}
-const vk::VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR&		Context::getPipelineExecutablePropertiesFeatures		(void) const { return m_device->getPipelineExecutablePropertiesFeatures();		}
-const vk::VkPhysicalDevicePortabilitySubsetFeaturesKHR&					Context::getPortabilitySubsetFeatures					(void) const { return m_device->getPortabilitySubsetFeatures();					}
-const vk::VkPhysicalDevicePresentIdFeaturesKHR&							Context::getPresentIdFeatures							(void) const { return m_device->getPresentIdFeatures();							}
-const vk::VkPhysicalDevicePresentWaitFeaturesKHR&						Context::getPresentWaitFeatures							(void) const { return m_device->getPresentWaitFeatures();						}
-const vk::VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT&			Context::getPrimitivesGeneratedQueryFeaturesEXT			(void) const { return m_device->getPrimitivesGeneratedQueryFeaturesEXT();		}
-const vk::VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT&		Context::getPrimitiveTopologyListRestartFeaturesEXT		(void) const { return m_device->getPrimitiveTopologyListRestartFeaturesEXT();	}
-const vk::VkPhysicalDevicePrivateDataFeatures&							Context::getPrivateDataFeatures							(void) const { return m_device->getPrivateDataFeatures();						}
-const vk::VkPhysicalDeviceProtectedMemoryFeatures&						Context::getProtectedMemoryFeatures						(void) const { return m_device->getProtectedMemoryFeatures();					}
-const vk::VkPhysicalDeviceProvokingVertexFeaturesEXT&					Context::getProvokingVertexFeaturesEXT					(void) const { return m_device->getProvokingVertexFeaturesEXT();				}
-const vk::VkPhysicalDeviceRayQueryFeaturesKHR&							Context::getRayQueryFeatures							(void) const { return m_device->getRayQueryFeatures();							}
-const vk::VkPhysicalDeviceRayTracingMotionBlurFeaturesNV&				Context::getRayTracingMotionBlurFeatures				(void) const { return m_device->getRayTracingMotionBlurFeatures();				}
-const vk::VkPhysicalDeviceRayTracingPipelineFeaturesKHR&				Context::getRayTracingPipelineFeatures					(void) const { return m_device->getRayTracingPipelineFeatures();				}
-const vk::VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV&			Context::getRepresentativeFragmentTestFeatures			(void) const { return m_device->getRepresentativeFragmentTestFeatures();		}
-const vk::VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT&					Context::getRGBA10X6FormatsFeaturesEXT					(void) const { return m_device->getRGBA10X6FormatsFeaturesEXT();				}
-const vk::VkPhysicalDeviceRobustness2FeaturesEXT&						Context::getRobustness2FeaturesEXT						(void) const { return m_device->getRobustness2FeaturesEXT();					}
-const vk::VkPhysicalDeviceSamplerYcbcrConversionFeatures&				Context::getSamplerYcbcrConversionFeatures				(void) const { return m_device->getSamplerYcbcrConversionFeatures();			}
-const vk::VkPhysicalDeviceScalarBlockLayoutFeatures&					Context::getScalarBlockLayoutFeatures					(void) const { return m_device->getScalarBlockLayoutFeatures();					}
-const vk::VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures&			Context::getSeparateDepthStencilLayoutsFeatures			(void) const { return m_device->getSeparateDepthStencilLayoutsFeatures();		}
-const vk::VkPhysicalDeviceShaderAtomicFloatFeaturesEXT&					Context::getShaderAtomicFloatFeaturesEXT				(void) const { return m_device->getShaderAtomicFloatFeaturesEXT();				}
-const vk::VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT&				Context::getShaderAtomicFloat2FeaturesEXT				(void) const { return m_device->getShaderAtomicFloat2FeaturesEXT();				}
-const vk::VkPhysicalDeviceShaderAtomicInt64Features&					Context::getShaderAtomicInt64Features					(void) const { return m_device->getShaderAtomicInt64Features();					}
-const vk::VkPhysicalDeviceShaderClockFeaturesKHR&						Context::getShaderClockFeatures							(void) const { return m_device->getShaderClockFeatures();						}
-const vk::VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures&		Context::getShaderDemoteToHelperInvocationFeatures		(void) const { return m_device->getShaderDemoteToHelperInvocationFeatures();	}
-const vk::VkPhysicalDeviceShaderDrawParametersFeatures&					Context::getShaderDrawParametersFeatures				(void) const { return m_device->getShaderDrawParametersFeatures();				}
-const vk::VkPhysicalDeviceShaderFloat16Int8Features&					Context::getShaderFloat16Int8Features					(void) const { return m_device->getShaderFloat16Int8Features();					}
-const vk::VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT&			Context::getShaderImageAtomicInt64FeaturesEXT			(void) const { return m_device->getShaderImageAtomicInt64FeaturesEXT();			}
-const vk::VkPhysicalDeviceShaderImageFootprintFeaturesNV&				Context::getShaderImageFootprintFeatures				(void) const { return m_device->getShaderImageFootprintFeatures();				}
-const vk::VkPhysicalDeviceShaderIntegerDotProductFeatures&				Context::getShaderIntegerDotProductFeatures				(void) const { return m_device->getShaderIntegerDotProductFeatures();			}
-const vk::VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL&			Context::getShaderIntegerFunctions2FeaturesINTEL		(void) const { return m_device->getShaderIntegerFunctions2FeaturesINTEL();		}
-const vk::VkPhysicalDeviceShaderSMBuiltinsFeaturesNV&					Context::getShaderSMBuiltinsFeatures					(void) const { return m_device->getShaderSMBuiltinsFeatures();					}
-const vk::VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures&			Context::getShaderSubgroupExtendedTypesFeatures			(void) const { return m_device->getShaderSubgroupExtendedTypesFeatures();		}
-const vk::VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR&	Context::getShaderSubgroupUniformControlFlowFeatures	(void) const { return m_device->getShaderSubgroupUniformControlFlowFeatures();	}
-const vk::VkPhysicalDeviceShaderTerminateInvocationFeatures&			Context::getShaderTerminateInvocationFeatures			(void) const { return m_device->getShaderTerminateInvocationFeatures();			}
-const vk::VkPhysicalDeviceShadingRateImageFeaturesNV&					Context::getShadingRateImageFeatures					(void) const { return m_device->getShadingRateImageFeatures();					}
-const vk::VkPhysicalDeviceSubgroupSizeControlFeatures&					Context::getSubgroupSizeControlFeatures					(void) const { return m_device->getSubgroupSizeControlFeatures();				}
-const vk::VkPhysicalDeviceSubpassShadingFeaturesHUAWEI&					Context::getSubpassShadingFeaturesHUAWEI				(void) const { return m_device->getSubpassShadingFeaturesHUAWEI();				}
-const vk::VkPhysicalDeviceSynchronization2Features&						Context::getSynchronization2Features					(void) const { return m_device->getSynchronization2Features();					}
-const vk::VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT&				Context::getTexelBufferAlignmentFeaturesEXT				(void) const { return m_device->getTexelBufferAlignmentFeaturesEXT();			}
-const vk::VkPhysicalDeviceTextureCompressionASTCHDRFeatures&			Context::getTextureCompressionASTCHDRFeatures			(void) const { return m_device->getTextureCompressionASTCHDRFeatures();			}
-const vk::VkPhysicalDeviceTimelineSemaphoreFeatures&					Context::getTimelineSemaphoreFeatures					(void) const { return m_device->getTimelineSemaphoreFeatures();					}
-const vk::VkPhysicalDeviceTransformFeedbackFeaturesEXT&					Context::getTransformFeedbackFeaturesEXT				(void) const { return m_device->getTransformFeedbackFeaturesEXT();				}
-const vk::VkPhysicalDeviceUniformBufferStandardLayoutFeatures&			Context::getUniformBufferStandardLayoutFeatures			(void) const { return m_device->getUniformBufferStandardLayoutFeatures();		}
-const vk::VkPhysicalDeviceVariablePointersFeatures&						Context::getVariablePointersFeatures					(void) const { return m_device->getVariablePointersFeatures();					}
-const vk::VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT&			Context::getVertexAttributeDivisorFeaturesEXT			(void) const { return m_device->getVertexAttributeDivisorFeaturesEXT();			}
-const vk::VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT&			Context::getVertexInputDynamicStateFeaturesEXT			(void) const { return m_device->getVertexInputDynamicStateFeaturesEXT();		}
-const vk::VkPhysicalDeviceVulkanMemoryModelFeatures&					Context::getVulkanMemoryModelFeatures					(void) const { return m_device->getVulkanMemoryModelFeatures();					}
-const vk::VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR&		Context::getWorkgroupMemoryExplicitLayoutFeatures		(void) const { return m_device->getWorkgroupMemoryExplicitLayoutFeatures();		}
-const vk::VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT&				Context::getYcbcr2Plane444FormatsFeaturesEXT			(void) const { return m_device->getYcbcr2Plane444FormatsFeaturesEXT();			}
-const vk::VkPhysicalDeviceYcbcrImageArraysFeaturesEXT&					Context::getYcbcrImageArraysFeaturesEXT					(void) const { return m_device->getYcbcrImageArraysFeaturesEXT();				}
-const vk::VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures&		Context::getZeroInitializeWorkgroupMemoryFeatures		(void) const { return m_device->getZeroInitializeWorkgroupMemoryFeatures();		}
+const vk::VkPhysicalDevice16BitStorageFeatures&							Context::get16BitStorageFeatures						(void) const { return m_device->get16BitStorageFeatures();							}
+const vk::VkPhysicalDevice4444FormatsFeaturesEXT&						Context::get4444FormatsFeaturesEXT						(void) const { return m_device->get4444FormatsFeaturesEXT();						}
+const vk::VkPhysicalDevice8BitStorageFeatures&							Context::get8BitStorageFeatures							(void) const { return m_device->get8BitStorageFeatures();							}
+const vk::VkPhysicalDeviceAccelerationStructureFeaturesKHR&				Context::getAccelerationStructureFeatures				(void) const { return m_device->getAccelerationStructureFeatures();					}
+const vk::VkPhysicalDeviceASTCDecodeFeaturesEXT&						Context::getASTCDecodeFeaturesEXT						(void) const { return m_device->getASTCDecodeFeaturesEXT();							}
+const vk::VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT&			Context::getBlendOperationAdvancedFeaturesEXT			(void) const { return m_device->getBlendOperationAdvancedFeaturesEXT();				}
+const vk::VkPhysicalDeviceBorderColorSwizzleFeaturesEXT&				Context::getBorderColorSwizzleFeaturesEXT				(void) const { return m_device->getBorderColorSwizzleFeaturesEXT();					}
+const vk::VkPhysicalDeviceBufferDeviceAddressFeatures&					Context::getBufferDeviceAddressFeatures					(void) const { return m_device->getBufferDeviceAddressFeatures();					}
+const vk::VkPhysicalDeviceBufferDeviceAddressFeaturesEXT&				Context::getBufferDeviceAddressFeaturesEXT				(void) const { return m_device->getBufferDeviceAddressFeaturesEXT();				}
+const vk::VkPhysicalDeviceCoherentMemoryFeaturesAMD&					Context::getCoherentMemoryFeaturesAMD					(void) const { return m_device->getCoherentMemoryFeaturesAMD();						}
+const vk::VkPhysicalDeviceColorWriteEnableFeaturesEXT&					Context::getColorWriteEnableFeaturesEXT					(void) const { return m_device->getColorWriteEnableFeaturesEXT();					}
+const vk::VkPhysicalDeviceComputeShaderDerivativesFeaturesNV&			Context::getComputeShaderDerivativesFeatures			(void) const { return m_device->getComputeShaderDerivativesFeatures();				}
+const vk::VkPhysicalDeviceConditionalRenderingFeaturesEXT&				Context::getConditionalRenderingFeaturesEXT				(void) const { return m_device->getConditionalRenderingFeaturesEXT();				}
+const vk::VkPhysicalDeviceCooperativeMatrixFeaturesNV&					Context::getCooperativeMatrixFeatures					(void) const { return m_device->getCooperativeMatrixFeatures();						}
+const vk::VkPhysicalDeviceCornerSampledImageFeaturesNV&					Context::getCornerSampledImageFeatures					(void) const { return m_device->getCornerSampledImageFeatures();					}
+const vk::VkPhysicalDeviceCoverageReductionModeFeaturesNV&				Context::getCoverageReductionModeFeatures				(void) const { return m_device->getCoverageReductionModeFeatures();					}
+const vk::VkPhysicalDeviceCustomBorderColorFeaturesEXT&					Context::getCustomBorderColorFeaturesEXT				(void) const { return m_device->getCustomBorderColorFeaturesEXT();					}
+const vk::VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV&	Context::getDedicatedAllocationImageAliasingFeatures	(void) const { return m_device->getDedicatedAllocationImageAliasingFeatures();		}
+const vk::VkPhysicalDeviceDepthClipControlFeaturesEXT&					Context::getDepthClipControlFeaturesEXT					(void) const { return m_device->getDepthClipControlFeaturesEXT();					}
+const vk::VkPhysicalDeviceDepthClipEnableFeaturesEXT&					Context::getDepthClipEnableFeaturesEXT					(void) const { return m_device->getDepthClipEnableFeaturesEXT();					}
+const vk::VkPhysicalDeviceDescriptorIndexingFeatures&					Context::getDescriptorIndexingFeatures					(void) const { return m_device->getDescriptorIndexingFeatures();					}
+const vk::VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE&		Context::getDescriptorSetHostMappingFeaturesVALVE		(void) const { return m_device->getDescriptorSetHostMappingFeaturesVALVE();			}
+const vk::VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV&			Context::getDeviceGeneratedCommandsFeatures				(void) const { return m_device->getDeviceGeneratedCommandsFeatures();				}
+const vk::VkPhysicalDeviceDeviceMemoryReportFeaturesEXT&				Context::getDeviceMemoryReportFeaturesEXT				(void) const { return m_device->getDeviceMemoryReportFeaturesEXT();					}
+const vk::VkPhysicalDeviceDiagnosticsConfigFeaturesNV&					Context::getDiagnosticsConfigFeatures					(void) const { return m_device->getDiagnosticsConfigFeatures();						}
+const vk::VkPhysicalDeviceDynamicRenderingFeatures&						Context::getDynamicRenderingFeatures					(void) const { return m_device->getDynamicRenderingFeatures();						}
+const vk::VkPhysicalDeviceExclusiveScissorFeaturesNV&					Context::getExclusiveScissorFeatures					(void) const { return m_device->getExclusiveScissorFeatures();						}
+const vk::VkPhysicalDeviceExtendedDynamicStateFeaturesEXT&				Context::getExtendedDynamicStateFeaturesEXT				(void) const { return m_device->getExtendedDynamicStateFeaturesEXT();				}
+const vk::VkPhysicalDeviceExtendedDynamicState2FeaturesEXT&				Context::getExtendedDynamicState2FeaturesEXT			(void) const { return m_device->getExtendedDynamicState2FeaturesEXT();				}
+const vk::VkPhysicalDeviceExternalMemoryRDMAFeaturesNV&					Context::getExternalMemoryRDMAFeatures					(void) const { return m_device->getExternalMemoryRDMAFeatures();					}
+const vk::VkPhysicalDeviceFragmentDensityMapFeaturesEXT&				Context::getFragmentDensityMapFeaturesEXT				(void) const { return m_device->getFragmentDensityMapFeaturesEXT();					}
+const vk::VkPhysicalDeviceFragmentDensityMap2FeaturesEXT&				Context::getFragmentDensityMap2FeaturesEXT				(void) const { return m_device->getFragmentDensityMap2FeaturesEXT();				}
+const vk::VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM&			Context::getFragmentDensityMapOffsetFeaturesQCOM		(void) const { return m_device->getFragmentDensityMapOffsetFeaturesQCOM();			}
+const vk::VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV&			Context::getFragmentShaderBarycentricFeatures			(void) const { return m_device->getFragmentShaderBarycentricFeatures();				}
+const vk::VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT&			Context::getFragmentShaderInterlockFeaturesEXT			(void) const { return m_device->getFragmentShaderInterlockFeaturesEXT();			}
+const vk::VkPhysicalDeviceFragmentShadingRateFeaturesKHR&				Context::getFragmentShadingRateFeatures					(void) const { return m_device->getFragmentShadingRateFeatures();					}
+const vk::VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV&			Context::getFragmentShadingRateEnumsFeatures			(void) const { return m_device->getFragmentShadingRateEnumsFeatures();				}
+const vk::VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR&				Context::getGlobalPriorityQueryFeatures					(void) const { return m_device->getGlobalPriorityQueryFeatures();					}
+const vk::VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT&			Context::getGraphicsPipelineLibraryFeaturesEXT			(void) const { return m_device->getGraphicsPipelineLibraryFeaturesEXT();			}
+const vk::VkPhysicalDeviceHostQueryResetFeatures&						Context::getHostQueryResetFeatures						(void) const { return m_device->getHostQueryResetFeatures();						}
+const vk::VkPhysicalDeviceImagelessFramebufferFeatures&					Context::getImagelessFramebufferFeatures				(void) const { return m_device->getImagelessFramebufferFeatures();					}
+const vk::VkPhysicalDeviceImage2DViewOf3DFeaturesEXT&					Context::getImage2DViewOf3DFeaturesEXT					(void) const { return m_device->getImage2DViewOf3DFeaturesEXT();					}
+const vk::VkPhysicalDeviceImageCompressionControlFeaturesEXT&			Context::getImageCompressionControlFeaturesEXT			(void) const { return m_device->getImageCompressionControlFeaturesEXT();			}
+const vk::VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT&	Context::getImageCompressionControlSwapchainFeaturesEXT	(void) const { return m_device->getImageCompressionControlSwapchainFeaturesEXT();	}
+const vk::VkPhysicalDeviceImageRobustnessFeatures&						Context::getImageRobustnessFeatures						(void) const { return m_device->getImageRobustnessFeatures();						}
+const vk::VkPhysicalDeviceImageViewMinLodFeaturesEXT&					Context::getImageViewMinLodFeaturesEXT					(void) const { return m_device->getImageViewMinLodFeaturesEXT();					}
+const vk::VkPhysicalDeviceIndexTypeUint8FeaturesEXT&					Context::getIndexTypeUint8FeaturesEXT					(void) const { return m_device->getIndexTypeUint8FeaturesEXT();						}
+const vk::VkPhysicalDeviceInheritedViewportScissorFeaturesNV&			Context::getInheritedViewportScissorFeatures			(void) const { return m_device->getInheritedViewportScissorFeatures();				}
+const vk::VkPhysicalDeviceInlineUniformBlockFeatures&					Context::getInlineUniformBlockFeatures					(void) const { return m_device->getInlineUniformBlockFeatures();					}
+const vk::VkPhysicalDeviceInvocationMaskFeaturesHUAWEI&					Context::getInvocationMaskFeaturesHUAWEI				(void) const { return m_device->getInvocationMaskFeaturesHUAWEI();					}
+const vk::VkPhysicalDeviceLinearColorAttachmentFeaturesNV&				Context::getLinearColorAttachmentFeatures				(void) const { return m_device->getLinearColorAttachmentFeatures();					}
+const vk::VkPhysicalDeviceLineRasterizationFeaturesEXT&					Context::getLineRasterizationFeaturesEXT				(void) const { return m_device->getLineRasterizationFeaturesEXT();					}
+const vk::VkPhysicalDeviceMaintenance4Features&							Context::getMaintenance4Features						(void) const { return m_device->getMaintenance4Features();							}
+const vk::VkPhysicalDeviceMemoryPriorityFeaturesEXT&					Context::getMemoryPriorityFeaturesEXT					(void) const { return m_device->getMemoryPriorityFeaturesEXT();						}
+const vk::VkPhysicalDeviceMeshShaderFeaturesNV&							Context::getMeshShaderFeatures							(void) const { return m_device->getMeshShaderFeatures();							}
+const vk::VkPhysicalDeviceMultiviewFeatures&							Context::getMultiviewFeatures							(void) const { return m_device->getMultiviewFeatures();								}
+const vk::VkPhysicalDeviceMultiDrawFeaturesEXT&							Context::getMultiDrawFeaturesEXT						(void) const { return m_device->getMultiDrawFeaturesEXT();							}
+const vk::VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE&			Context::getMutableDescriptorTypeFeaturesVALVE			(void) const { return m_device->getMutableDescriptorTypeFeaturesVALVE();			}
+const vk::VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT&			Context::getPageableDeviceLocalMemoryFeaturesEXT		(void) const { return m_device->getPageableDeviceLocalMemoryFeaturesEXT();			}
+const vk::VkPhysicalDevicePerformanceQueryFeaturesKHR&					Context::getPerformanceQueryFeatures					(void) const { return m_device->getPerformanceQueryFeatures();						}
+const vk::VkPhysicalDevicePipelineCreationCacheControlFeatures&			Context::getPipelineCreationCacheControlFeatures		(void) const { return m_device->getPipelineCreationCacheControlFeatures();			}
+const vk::VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR&		Context::getPipelineExecutablePropertiesFeatures		(void) const { return m_device->getPipelineExecutablePropertiesFeatures();			}
+const vk::VkPhysicalDevicePipelinePropertiesFeaturesEXT&				Context::getPipelinePropertiesFeaturesEXT				(void) const { return m_device->getPipelinePropertiesFeaturesEXT();					}
+const vk::VkPhysicalDevicePortabilitySubsetFeaturesKHR&					Context::getPortabilitySubsetFeatures					(void) const { return m_device->getPortabilitySubsetFeatures();						}
+const vk::VkPhysicalDevicePresentIdFeaturesKHR&							Context::getPresentIdFeatures							(void) const { return m_device->getPresentIdFeatures();								}
+const vk::VkPhysicalDevicePresentWaitFeaturesKHR&						Context::getPresentWaitFeatures							(void) const { return m_device->getPresentWaitFeatures();							}
+const vk::VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT&			Context::getPrimitivesGeneratedQueryFeaturesEXT			(void) const { return m_device->getPrimitivesGeneratedQueryFeaturesEXT();			}
+const vk::VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT&		Context::getPrimitiveTopologyListRestartFeaturesEXT		(void) const { return m_device->getPrimitiveTopologyListRestartFeaturesEXT();		}
+const vk::VkPhysicalDevicePrivateDataFeatures&							Context::getPrivateDataFeatures							(void) const { return m_device->getPrivateDataFeatures();							}
+const vk::VkPhysicalDeviceProtectedMemoryFeatures&						Context::getProtectedMemoryFeatures						(void) const { return m_device->getProtectedMemoryFeatures();						}
+const vk::VkPhysicalDeviceProvokingVertexFeaturesEXT&					Context::getProvokingVertexFeaturesEXT					(void) const { return m_device->getProvokingVertexFeaturesEXT();					}
+const vk::VkPhysicalDeviceRayQueryFeaturesKHR&							Context::getRayQueryFeatures							(void) const { return m_device->getRayQueryFeatures();								}
+const vk::VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR&			Context::getRayTracingMaintenance1Features				(void) const { return m_device->getRayTracingMaintenance1Features();				}
+const vk::VkPhysicalDeviceRayTracingMotionBlurFeaturesNV&				Context::getRayTracingMotionBlurFeatures				(void) const { return m_device->getRayTracingMotionBlurFeatures();					}
+const vk::VkPhysicalDeviceRayTracingPipelineFeaturesKHR&				Context::getRayTracingPipelineFeatures					(void) const { return m_device->getRayTracingPipelineFeatures();					}
+const vk::VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV&			Context::getRepresentativeFragmentTestFeatures			(void) const { return m_device->getRepresentativeFragmentTestFeatures();			}
+const vk::VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT&					Context::getRGBA10X6FormatsFeaturesEXT					(void) const { return m_device->getRGBA10X6FormatsFeaturesEXT();					}
+const vk::VkPhysicalDeviceRobustness2FeaturesEXT&						Context::getRobustness2FeaturesEXT						(void) const { return m_device->getRobustness2FeaturesEXT();						}
+const vk::VkPhysicalDeviceSamplerYcbcrConversionFeatures&				Context::getSamplerYcbcrConversionFeatures				(void) const { return m_device->getSamplerYcbcrConversionFeatures();				}
+const vk::VkPhysicalDeviceScalarBlockLayoutFeatures&					Context::getScalarBlockLayoutFeatures					(void) const { return m_device->getScalarBlockLayoutFeatures();						}
+const vk::VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures&			Context::getSeparateDepthStencilLayoutsFeatures			(void) const { return m_device->getSeparateDepthStencilLayoutsFeatures();			}
+const vk::VkPhysicalDeviceShaderAtomicFloatFeaturesEXT&					Context::getShaderAtomicFloatFeaturesEXT				(void) const { return m_device->getShaderAtomicFloatFeaturesEXT();					}
+const vk::VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT&				Context::getShaderAtomicFloat2FeaturesEXT				(void) const { return m_device->getShaderAtomicFloat2FeaturesEXT();					}
+const vk::VkPhysicalDeviceShaderAtomicInt64Features&					Context::getShaderAtomicInt64Features					(void) const { return m_device->getShaderAtomicInt64Features();						}
+const vk::VkPhysicalDeviceShaderClockFeaturesKHR&						Context::getShaderClockFeatures							(void) const { return m_device->getShaderClockFeatures();							}
+const vk::VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures&		Context::getShaderDemoteToHelperInvocationFeatures		(void) const { return m_device->getShaderDemoteToHelperInvocationFeatures();		}
+const vk::VkPhysicalDeviceShaderDrawParametersFeatures&					Context::getShaderDrawParametersFeatures				(void) const { return m_device->getShaderDrawParametersFeatures();					}
+const vk::VkPhysicalDeviceShaderFloat16Int8Features&					Context::getShaderFloat16Int8Features					(void) const { return m_device->getShaderFloat16Int8Features();						}
+const vk::VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT&			Context::getShaderImageAtomicInt64FeaturesEXT			(void) const { return m_device->getShaderImageAtomicInt64FeaturesEXT();				}
+const vk::VkPhysicalDeviceShaderImageFootprintFeaturesNV&				Context::getShaderImageFootprintFeatures				(void) const { return m_device->getShaderImageFootprintFeatures();					}
+const vk::VkPhysicalDeviceShaderIntegerDotProductFeatures&				Context::getShaderIntegerDotProductFeatures				(void) const { return m_device->getShaderIntegerDotProductFeatures();				}
+const vk::VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL&			Context::getShaderIntegerFunctions2FeaturesINTEL		(void) const { return m_device->getShaderIntegerFunctions2FeaturesINTEL();			}
+const vk::VkPhysicalDeviceShaderSMBuiltinsFeaturesNV&					Context::getShaderSMBuiltinsFeatures					(void) const { return m_device->getShaderSMBuiltinsFeatures();						}
+const vk::VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures&			Context::getShaderSubgroupExtendedTypesFeatures			(void) const { return m_device->getShaderSubgroupExtendedTypesFeatures();			}
+const vk::VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR&	Context::getShaderSubgroupUniformControlFlowFeatures	(void) const { return m_device->getShaderSubgroupUniformControlFlowFeatures();		}
+const vk::VkPhysicalDeviceShaderTerminateInvocationFeatures&			Context::getShaderTerminateInvocationFeatures			(void) const { return m_device->getShaderTerminateInvocationFeatures();				}
+const vk::VkPhysicalDeviceShadingRateImageFeaturesNV&					Context::getShadingRateImageFeatures					(void) const { return m_device->getShadingRateImageFeatures();						}
+const vk::VkPhysicalDeviceSubgroupSizeControlFeatures&					Context::getSubgroupSizeControlFeatures					(void) const { return m_device->getSubgroupSizeControlFeatures();					}
+const vk::VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT&				Context::getSubpassMergeFeedbackFeaturesEXT				(void) const { return m_device->getSubpassMergeFeedbackFeaturesEXT();				}
+const vk::VkPhysicalDeviceSubpassShadingFeaturesHUAWEI&					Context::getSubpassShadingFeaturesHUAWEI				(void) const { return m_device->getSubpassShadingFeaturesHUAWEI();					}
+const vk::VkPhysicalDeviceSynchronization2Features&						Context::getSynchronization2Features					(void) const { return m_device->getSynchronization2Features();						}
+const vk::VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT&				Context::getTexelBufferAlignmentFeaturesEXT				(void) const { return m_device->getTexelBufferAlignmentFeaturesEXT();				}
+const vk::VkPhysicalDeviceTextureCompressionASTCHDRFeatures&			Context::getTextureCompressionASTCHDRFeatures			(void) const { return m_device->getTextureCompressionASTCHDRFeatures();				}
+const vk::VkPhysicalDeviceTimelineSemaphoreFeatures&					Context::getTimelineSemaphoreFeatures					(void) const { return m_device->getTimelineSemaphoreFeatures();						}
+const vk::VkPhysicalDeviceTransformFeedbackFeaturesEXT&					Context::getTransformFeedbackFeaturesEXT				(void) const { return m_device->getTransformFeedbackFeaturesEXT();					}
+const vk::VkPhysicalDeviceUniformBufferStandardLayoutFeatures&			Context::getUniformBufferStandardLayoutFeatures			(void) const { return m_device->getUniformBufferStandardLayoutFeatures();			}
+const vk::VkPhysicalDeviceVariablePointersFeatures&						Context::getVariablePointersFeatures					(void) const { return m_device->getVariablePointersFeatures();						}
+const vk::VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT&			Context::getVertexAttributeDivisorFeaturesEXT			(void) const { return m_device->getVertexAttributeDivisorFeaturesEXT();				}
+const vk::VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT&			Context::getVertexInputDynamicStateFeaturesEXT			(void) const { return m_device->getVertexInputDynamicStateFeaturesEXT();			}
+const vk::VkPhysicalDeviceVulkanMemoryModelFeatures&					Context::getVulkanMemoryModelFeatures					(void) const { return m_device->getVulkanMemoryModelFeatures();						}
+const vk::VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR&		Context::getWorkgroupMemoryExplicitLayoutFeatures		(void) const { return m_device->getWorkgroupMemoryExplicitLayoutFeatures();			}
+const vk::VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT&				Context::getYcbcr2Plane444FormatsFeaturesEXT			(void) const { return m_device->getYcbcr2Plane444FormatsFeaturesEXT();				}
+const vk::VkPhysicalDeviceYcbcrImageArraysFeaturesEXT&					Context::getYcbcrImageArraysFeaturesEXT					(void) const { return m_device->getYcbcrImageArraysFeaturesEXT();					}
+const vk::VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures&		Context::getZeroInitializeWorkgroupMemoryFeatures		(void) const { return m_device->getZeroInitializeWorkgroupMemoryFeatures();			}
diff --git a/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFeaturesForDefaultDeviceDefs.inl b/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFeaturesForDefaultDeviceDefs.inl
index 772b586..efde2d3 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFeaturesForDefaultDeviceDefs.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFeaturesForDefaultDeviceDefs.inl
@@ -3,112 +3,117 @@
  * This file was generated by /scripts/gen_framework.py
  */
 
-const VkPhysicalDevice16BitStorageFeatures&							get16BitStorageFeatures						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevice16BitStorageFeatures>();							}
-const VkPhysicalDevice4444FormatsFeaturesEXT&						get4444FormatsFeaturesEXT					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevice4444FormatsFeaturesEXT>();						}
-const VkPhysicalDevice8BitStorageFeatures&							get8BitStorageFeatures						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevice8BitStorageFeatures>();							}
-const VkPhysicalDeviceAccelerationStructureFeaturesKHR&				getAccelerationStructureFeatures			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceAccelerationStructureFeaturesKHR>();				}
-const VkPhysicalDeviceASTCDecodeFeaturesEXT&						getASTCDecodeFeaturesEXT					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceASTCDecodeFeaturesEXT>();							}
-const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT&			getBlendOperationAdvancedFeaturesEXT		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>();				}
-const VkPhysicalDeviceBorderColorSwizzleFeaturesEXT&				getBorderColorSwizzleFeaturesEXT			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceBorderColorSwizzleFeaturesEXT>();					}
-const VkPhysicalDeviceBufferDeviceAddressFeatures&					getBufferDeviceAddressFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceBufferDeviceAddressFeatures>();					}
-const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT&				getBufferDeviceAddressFeaturesEXT			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT>();				}
-const VkPhysicalDeviceCoherentMemoryFeaturesAMD&					getCoherentMemoryFeaturesAMD				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceCoherentMemoryFeaturesAMD>();						}
-const VkPhysicalDeviceColorWriteEnableFeaturesEXT&					getColorWriteEnableFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceColorWriteEnableFeaturesEXT>();					}
-const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV&			getComputeShaderDerivativesFeatures			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV>();			}
-const VkPhysicalDeviceConditionalRenderingFeaturesEXT&				getConditionalRenderingFeaturesEXT			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceConditionalRenderingFeaturesEXT>();				}
-const VkPhysicalDeviceCooperativeMatrixFeaturesNV&					getCooperativeMatrixFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceCooperativeMatrixFeaturesNV>();					}
-const VkPhysicalDeviceCornerSampledImageFeaturesNV&					getCornerSampledImageFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceCornerSampledImageFeaturesNV>();					}
-const VkPhysicalDeviceCoverageReductionModeFeaturesNV&				getCoverageReductionModeFeatures			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceCoverageReductionModeFeaturesNV>();				}
-const VkPhysicalDeviceCustomBorderColorFeaturesEXT&					getCustomBorderColorFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceCustomBorderColorFeaturesEXT>();					}
-const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV&	getDedicatedAllocationImageAliasingFeatures	(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV>();	}
-const VkPhysicalDeviceDepthClipControlFeaturesEXT&					getDepthClipControlFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDepthClipControlFeaturesEXT>();					}
-const VkPhysicalDeviceDepthClipEnableFeaturesEXT&					getDepthClipEnableFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDepthClipEnableFeaturesEXT>();					}
-const VkPhysicalDeviceDescriptorIndexingFeatures&					getDescriptorIndexingFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDescriptorIndexingFeatures>();					}
-const VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE&		getDescriptorSetHostMappingFeaturesVALVE	(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE>();			}
-const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV&			getDeviceGeneratedCommandsFeatures			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV>();				}
-const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT&				getDeviceMemoryReportFeaturesEXT			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDeviceMemoryReportFeaturesEXT>();					}
-const VkPhysicalDeviceDiagnosticsConfigFeaturesNV&					getDiagnosticsConfigFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDiagnosticsConfigFeaturesNV>();					}
-const VkPhysicalDeviceDynamicRenderingFeatures&						getDynamicRenderingFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDynamicRenderingFeatures>();						}
-const VkPhysicalDeviceExclusiveScissorFeaturesNV&					getExclusiveScissorFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceExclusiveScissorFeaturesNV>();					}
-const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT&				getExtendedDynamicStateFeaturesEXT			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceExtendedDynamicStateFeaturesEXT>();				}
-const VkPhysicalDeviceExtendedDynamicState2FeaturesEXT&				getExtendedDynamicState2FeaturesEXT			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceExtendedDynamicState2FeaturesEXT>();				}
-const VkPhysicalDeviceExternalMemoryRDMAFeaturesNV&					getExternalMemoryRDMAFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceExternalMemoryRDMAFeaturesNV>();					}
-const VkPhysicalDeviceFragmentDensityMapFeaturesEXT&				getFragmentDensityMapFeaturesEXT			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFragmentDensityMapFeaturesEXT>();					}
-const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT&				getFragmentDensityMap2FeaturesEXT			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFragmentDensityMap2FeaturesEXT>();				}
-const VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM&			getFragmentDensityMapOffsetFeaturesQCOM		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM>();			}
-const VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV&			getFragmentShaderBarycentricFeatures		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV>();			}
-const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT&			getFragmentShaderInterlockFeaturesEXT		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT>();			}
-const VkPhysicalDeviceFragmentShadingRateFeaturesKHR&				getFragmentShadingRateFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFragmentShadingRateFeaturesKHR>();				}
-const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV&			getFragmentShadingRateEnumsFeatures			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV>();			}
-const VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR&				getGlobalPriorityQueryFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR>();				}
-const VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT&			getGraphicsPipelineLibraryFeaturesEXT		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT>();			}
-const VkPhysicalDeviceHostQueryResetFeatures&						getHostQueryResetFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceHostQueryResetFeatures>();						}
-const VkPhysicalDeviceImagelessFramebufferFeatures&					getImagelessFramebufferFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceImagelessFramebufferFeatures>();					}
-const VkPhysicalDeviceImage2DViewOf3DFeaturesEXT&					getImage2DViewOf3DFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceImage2DViewOf3DFeaturesEXT>();					}
-const VkPhysicalDeviceImageRobustnessFeatures&						getImageRobustnessFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceImageRobustnessFeatures>();						}
-const VkPhysicalDeviceImageViewMinLodFeaturesEXT&					getImageViewMinLodFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceImageViewMinLodFeaturesEXT>();					}
-const VkPhysicalDeviceIndexTypeUint8FeaturesEXT&					getIndexTypeUint8FeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>();						}
-const VkPhysicalDeviceInheritedViewportScissorFeaturesNV&			getInheritedViewportScissorFeatures			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceInheritedViewportScissorFeaturesNV>();			}
-const VkPhysicalDeviceInlineUniformBlockFeatures&					getInlineUniformBlockFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceInlineUniformBlockFeatures>();					}
-const VkPhysicalDeviceInvocationMaskFeaturesHUAWEI&					getInvocationMaskFeaturesHUAWEI				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceInvocationMaskFeaturesHUAWEI>();					}
-const VkPhysicalDeviceLinearColorAttachmentFeaturesNV&				getLinearColorAttachmentFeatures			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceLinearColorAttachmentFeaturesNV>();				}
-const VkPhysicalDeviceLineRasterizationFeaturesEXT&					getLineRasterizationFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceLineRasterizationFeaturesEXT>();					}
-const VkPhysicalDeviceMaintenance4Features&							getMaintenance4Features						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceMaintenance4Features>();							}
-const VkPhysicalDeviceMemoryPriorityFeaturesEXT&					getMemoryPriorityFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceMemoryPriorityFeaturesEXT>();						}
-const VkPhysicalDeviceMeshShaderFeaturesNV&							getMeshShaderFeatures						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceMeshShaderFeaturesNV>();							}
-const VkPhysicalDeviceMultiviewFeatures&							getMultiviewFeatures						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceMultiviewFeatures>();								}
-const VkPhysicalDeviceMultiDrawFeaturesEXT&							getMultiDrawFeaturesEXT						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceMultiDrawFeaturesEXT>();							}
-const VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE&			getMutableDescriptorTypeFeaturesVALVE		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE>();			}
-const VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT&			getPageableDeviceLocalMemoryFeaturesEXT		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT>();			}
-const VkPhysicalDevicePerformanceQueryFeaturesKHR&					getPerformanceQueryFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePerformanceQueryFeaturesKHR>();					}
-const VkPhysicalDevicePipelineCreationCacheControlFeatures&			getPipelineCreationCacheControlFeatures		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePipelineCreationCacheControlFeatures>();			}
-const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR&		getPipelineExecutablePropertiesFeatures		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR>();		}
-const VkPhysicalDevicePortabilitySubsetFeaturesKHR&					getPortabilitySubsetFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePortabilitySubsetFeaturesKHR>();					}
-const VkPhysicalDevicePresentIdFeaturesKHR&							getPresentIdFeatures						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePresentIdFeaturesKHR>();							}
-const VkPhysicalDevicePresentWaitFeaturesKHR&						getPresentWaitFeatures						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePresentWaitFeaturesKHR>();						}
-const VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT&			getPrimitivesGeneratedQueryFeaturesEXT		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT>();			}
-const VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT&		getPrimitiveTopologyListRestartFeaturesEXT	(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT>();		}
-const VkPhysicalDevicePrivateDataFeatures&							getPrivateDataFeatures						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePrivateDataFeatures>();							}
-const VkPhysicalDeviceProtectedMemoryFeatures&						getProtectedMemoryFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceProtectedMemoryFeatures>();						}
-const VkPhysicalDeviceProvokingVertexFeaturesEXT&					getProvokingVertexFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceProvokingVertexFeaturesEXT>();					}
-const VkPhysicalDeviceRayQueryFeaturesKHR&							getRayQueryFeatures							(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceRayQueryFeaturesKHR>();							}
-const VkPhysicalDeviceRayTracingMotionBlurFeaturesNV&				getRayTracingMotionBlurFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceRayTracingMotionBlurFeaturesNV>();				}
-const VkPhysicalDeviceRayTracingPipelineFeaturesKHR&				getRayTracingPipelineFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceRayTracingPipelineFeaturesKHR>();					}
-const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV&			getRepresentativeFragmentTestFeatures		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV>();			}
-const VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT&					getRGBA10X6FormatsFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT>();					}
-const VkPhysicalDeviceRobustness2FeaturesEXT&						getRobustness2FeaturesEXT					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceRobustness2FeaturesEXT>();						}
-const VkPhysicalDeviceSamplerYcbcrConversionFeatures&				getSamplerYcbcrConversionFeatures			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceSamplerYcbcrConversionFeatures>();				}
-const VkPhysicalDeviceScalarBlockLayoutFeatures&					getScalarBlockLayoutFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceScalarBlockLayoutFeatures>();						}
-const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures&			getSeparateDepthStencilLayoutsFeatures		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures>();			}
-const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT&					getShaderAtomicFloatFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderAtomicFloatFeaturesEXT>();					}
-const VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT&				getShaderAtomicFloat2FeaturesEXT			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT>();					}
-const VkPhysicalDeviceShaderAtomicInt64Features&					getShaderAtomicInt64Features				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderAtomicInt64Features>();						}
-const VkPhysicalDeviceShaderClockFeaturesKHR&						getShaderClockFeatures						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderClockFeaturesKHR>();						}
-const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures&		getShaderDemoteToHelperInvocationFeatures	(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures>();		}
-const VkPhysicalDeviceShaderDrawParametersFeatures&					getShaderDrawParametersFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderDrawParametersFeatures>();					}
-const VkPhysicalDeviceShaderFloat16Int8Features&					getShaderFloat16Int8Features				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderFloat16Int8Features>();						}
-const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT&			getShaderImageAtomicInt64FeaturesEXT		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT>();				}
-const VkPhysicalDeviceShaderImageFootprintFeaturesNV&				getShaderImageFootprintFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderImageFootprintFeaturesNV>();				}
-const VkPhysicalDeviceShaderIntegerDotProductFeatures&				getShaderIntegerDotProductFeatures			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderIntegerDotProductFeatures>();				}
-const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL&			getShaderIntegerFunctions2FeaturesINTEL		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL>();			}
-const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV&					getShaderSMBuiltinsFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderSMBuiltinsFeaturesNV>();					}
-const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures&			getShaderSubgroupExtendedTypesFeatures		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures>();			}
-const VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR&	getShaderSubgroupUniformControlFlowFeatures	(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR>();	}
-const VkPhysicalDeviceShaderTerminateInvocationFeatures&			getShaderTerminateInvocationFeatures		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderTerminateInvocationFeatures>();				}
-const VkPhysicalDeviceShadingRateImageFeaturesNV&					getShadingRateImageFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShadingRateImageFeaturesNV>();					}
-const VkPhysicalDeviceSubgroupSizeControlFeatures&					getSubgroupSizeControlFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceSubgroupSizeControlFeatures>();					}
-const VkPhysicalDeviceSubpassShadingFeaturesHUAWEI&					getSubpassShadingFeaturesHUAWEI				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceSubpassShadingFeaturesHUAWEI>();					}
-const VkPhysicalDeviceSynchronization2Features&						getSynchronization2Features					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceSynchronization2Features>();						}
-const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT&				getTexelBufferAlignmentFeaturesEXT			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT>();				}
-const VkPhysicalDeviceTextureCompressionASTCHDRFeatures&			getTextureCompressionASTCHDRFeatures		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceTextureCompressionASTCHDRFeatures>();				}
-const VkPhysicalDeviceTimelineSemaphoreFeatures&					getTimelineSemaphoreFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceTimelineSemaphoreFeatures>();						}
-const VkPhysicalDeviceTransformFeedbackFeaturesEXT&					getTransformFeedbackFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceTransformFeedbackFeaturesEXT>();					}
-const VkPhysicalDeviceUniformBufferStandardLayoutFeatures&			getUniformBufferStandardLayoutFeatures		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceUniformBufferStandardLayoutFeatures>();			}
-const VkPhysicalDeviceVariablePointersFeatures&						getVariablePointersFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceVariablePointersFeatures>();						}
-const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT&			getVertexAttributeDivisorFeaturesEXT		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT>();				}
-const VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT&			getVertexInputDynamicStateFeaturesEXT		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT>();			}
-const VkPhysicalDeviceVulkanMemoryModelFeatures&					getVulkanMemoryModelFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceVulkanMemoryModelFeatures>();						}
-const VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR&		getWorkgroupMemoryExplicitLayoutFeatures	(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR>();		}
-const VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT&				getYcbcr2Plane444FormatsFeaturesEXT			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT>();				}
-const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT&					getYcbcrImageArraysFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT>();					}
-const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures&		getZeroInitializeWorkgroupMemoryFeatures	(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures>();			}
+const VkPhysicalDevice16BitStorageFeatures&							get16BitStorageFeatures							(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevice16BitStorageFeatures>();							}
+const VkPhysicalDevice4444FormatsFeaturesEXT&						get4444FormatsFeaturesEXT						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevice4444FormatsFeaturesEXT>();						}
+const VkPhysicalDevice8BitStorageFeatures&							get8BitStorageFeatures							(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevice8BitStorageFeatures>();							}
+const VkPhysicalDeviceAccelerationStructureFeaturesKHR&				getAccelerationStructureFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceAccelerationStructureFeaturesKHR>();				}
+const VkPhysicalDeviceASTCDecodeFeaturesEXT&						getASTCDecodeFeaturesEXT						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceASTCDecodeFeaturesEXT>();							}
+const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT&			getBlendOperationAdvancedFeaturesEXT			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>();				}
+const VkPhysicalDeviceBorderColorSwizzleFeaturesEXT&				getBorderColorSwizzleFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceBorderColorSwizzleFeaturesEXT>();					}
+const VkPhysicalDeviceBufferDeviceAddressFeatures&					getBufferDeviceAddressFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceBufferDeviceAddressFeatures>();					}
+const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT&				getBufferDeviceAddressFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT>();				}
+const VkPhysicalDeviceCoherentMemoryFeaturesAMD&					getCoherentMemoryFeaturesAMD					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceCoherentMemoryFeaturesAMD>();						}
+const VkPhysicalDeviceColorWriteEnableFeaturesEXT&					getColorWriteEnableFeaturesEXT					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceColorWriteEnableFeaturesEXT>();					}
+const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV&			getComputeShaderDerivativesFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV>();			}
+const VkPhysicalDeviceConditionalRenderingFeaturesEXT&				getConditionalRenderingFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceConditionalRenderingFeaturesEXT>();				}
+const VkPhysicalDeviceCooperativeMatrixFeaturesNV&					getCooperativeMatrixFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceCooperativeMatrixFeaturesNV>();					}
+const VkPhysicalDeviceCornerSampledImageFeaturesNV&					getCornerSampledImageFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceCornerSampledImageFeaturesNV>();					}
+const VkPhysicalDeviceCoverageReductionModeFeaturesNV&				getCoverageReductionModeFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceCoverageReductionModeFeaturesNV>();				}
+const VkPhysicalDeviceCustomBorderColorFeaturesEXT&					getCustomBorderColorFeaturesEXT					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceCustomBorderColorFeaturesEXT>();					}
+const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV&	getDedicatedAllocationImageAliasingFeatures		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV>();	}
+const VkPhysicalDeviceDepthClipControlFeaturesEXT&					getDepthClipControlFeaturesEXT					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDepthClipControlFeaturesEXT>();					}
+const VkPhysicalDeviceDepthClipEnableFeaturesEXT&					getDepthClipEnableFeaturesEXT					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDepthClipEnableFeaturesEXT>();					}
+const VkPhysicalDeviceDescriptorIndexingFeatures&					getDescriptorIndexingFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDescriptorIndexingFeatures>();					}
+const VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE&		getDescriptorSetHostMappingFeaturesVALVE		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE>();			}
+const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV&			getDeviceGeneratedCommandsFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV>();				}
+const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT&				getDeviceMemoryReportFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDeviceMemoryReportFeaturesEXT>();					}
+const VkPhysicalDeviceDiagnosticsConfigFeaturesNV&					getDiagnosticsConfigFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDiagnosticsConfigFeaturesNV>();					}
+const VkPhysicalDeviceDynamicRenderingFeatures&						getDynamicRenderingFeatures						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDynamicRenderingFeatures>();						}
+const VkPhysicalDeviceExclusiveScissorFeaturesNV&					getExclusiveScissorFeatures						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceExclusiveScissorFeaturesNV>();					}
+const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT&				getExtendedDynamicStateFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceExtendedDynamicStateFeaturesEXT>();				}
+const VkPhysicalDeviceExtendedDynamicState2FeaturesEXT&				getExtendedDynamicState2FeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceExtendedDynamicState2FeaturesEXT>();				}
+const VkPhysicalDeviceExternalMemoryRDMAFeaturesNV&					getExternalMemoryRDMAFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceExternalMemoryRDMAFeaturesNV>();					}
+const VkPhysicalDeviceFragmentDensityMapFeaturesEXT&				getFragmentDensityMapFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFragmentDensityMapFeaturesEXT>();					}
+const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT&				getFragmentDensityMap2FeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFragmentDensityMap2FeaturesEXT>();				}
+const VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM&			getFragmentDensityMapOffsetFeaturesQCOM			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM>();			}
+const VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV&			getFragmentShaderBarycentricFeatures			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV>();			}
+const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT&			getFragmentShaderInterlockFeaturesEXT			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT>();			}
+const VkPhysicalDeviceFragmentShadingRateFeaturesKHR&				getFragmentShadingRateFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFragmentShadingRateFeaturesKHR>();				}
+const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV&			getFragmentShadingRateEnumsFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV>();			}
+const VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR&				getGlobalPriorityQueryFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR>();				}
+const VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT&			getGraphicsPipelineLibraryFeaturesEXT			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT>();			}
+const VkPhysicalDeviceHostQueryResetFeatures&						getHostQueryResetFeatures						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceHostQueryResetFeatures>();						}
+const VkPhysicalDeviceImagelessFramebufferFeatures&					getImagelessFramebufferFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceImagelessFramebufferFeatures>();					}
+const VkPhysicalDeviceImage2DViewOf3DFeaturesEXT&					getImage2DViewOf3DFeaturesEXT					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceImage2DViewOf3DFeaturesEXT>();					}
+const VkPhysicalDeviceImageCompressionControlFeaturesEXT&			getImageCompressionControlFeaturesEXT			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceImageCompressionControlFeaturesEXT>();			}
+const VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT&	getImageCompressionControlSwapchainFeaturesEXT	(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT>();	}
+const VkPhysicalDeviceImageRobustnessFeatures&						getImageRobustnessFeatures						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceImageRobustnessFeatures>();						}
+const VkPhysicalDeviceImageViewMinLodFeaturesEXT&					getImageViewMinLodFeaturesEXT					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceImageViewMinLodFeaturesEXT>();					}
+const VkPhysicalDeviceIndexTypeUint8FeaturesEXT&					getIndexTypeUint8FeaturesEXT					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>();						}
+const VkPhysicalDeviceInheritedViewportScissorFeaturesNV&			getInheritedViewportScissorFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceInheritedViewportScissorFeaturesNV>();			}
+const VkPhysicalDeviceInlineUniformBlockFeatures&					getInlineUniformBlockFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceInlineUniformBlockFeatures>();					}
+const VkPhysicalDeviceInvocationMaskFeaturesHUAWEI&					getInvocationMaskFeaturesHUAWEI					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceInvocationMaskFeaturesHUAWEI>();					}
+const VkPhysicalDeviceLinearColorAttachmentFeaturesNV&				getLinearColorAttachmentFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceLinearColorAttachmentFeaturesNV>();				}
+const VkPhysicalDeviceLineRasterizationFeaturesEXT&					getLineRasterizationFeaturesEXT					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceLineRasterizationFeaturesEXT>();					}
+const VkPhysicalDeviceMaintenance4Features&							getMaintenance4Features							(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceMaintenance4Features>();							}
+const VkPhysicalDeviceMemoryPriorityFeaturesEXT&					getMemoryPriorityFeaturesEXT					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceMemoryPriorityFeaturesEXT>();						}
+const VkPhysicalDeviceMeshShaderFeaturesNV&							getMeshShaderFeatures							(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceMeshShaderFeaturesNV>();							}
+const VkPhysicalDeviceMultiviewFeatures&							getMultiviewFeatures							(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceMultiviewFeatures>();								}
+const VkPhysicalDeviceMultiDrawFeaturesEXT&							getMultiDrawFeaturesEXT							(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceMultiDrawFeaturesEXT>();							}
+const VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE&			getMutableDescriptorTypeFeaturesVALVE			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE>();			}
+const VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT&			getPageableDeviceLocalMemoryFeaturesEXT			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT>();			}
+const VkPhysicalDevicePerformanceQueryFeaturesKHR&					getPerformanceQueryFeatures						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePerformanceQueryFeaturesKHR>();					}
+const VkPhysicalDevicePipelineCreationCacheControlFeatures&			getPipelineCreationCacheControlFeatures			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePipelineCreationCacheControlFeatures>();			}
+const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR&		getPipelineExecutablePropertiesFeatures			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR>();		}
+const VkPhysicalDevicePipelinePropertiesFeaturesEXT&				getPipelinePropertiesFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePipelinePropertiesFeaturesEXT>();					}
+const VkPhysicalDevicePortabilitySubsetFeaturesKHR&					getPortabilitySubsetFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePortabilitySubsetFeaturesKHR>();					}
+const VkPhysicalDevicePresentIdFeaturesKHR&							getPresentIdFeatures							(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePresentIdFeaturesKHR>();							}
+const VkPhysicalDevicePresentWaitFeaturesKHR&						getPresentWaitFeatures							(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePresentWaitFeaturesKHR>();						}
+const VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT&			getPrimitivesGeneratedQueryFeaturesEXT			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT>();			}
+const VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT&		getPrimitiveTopologyListRestartFeaturesEXT		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT>();		}
+const VkPhysicalDevicePrivateDataFeatures&							getPrivateDataFeatures							(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePrivateDataFeatures>();							}
+const VkPhysicalDeviceProtectedMemoryFeatures&						getProtectedMemoryFeatures						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceProtectedMemoryFeatures>();						}
+const VkPhysicalDeviceProvokingVertexFeaturesEXT&					getProvokingVertexFeaturesEXT					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceProvokingVertexFeaturesEXT>();					}
+const VkPhysicalDeviceRayQueryFeaturesKHR&							getRayQueryFeatures								(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceRayQueryFeaturesKHR>();							}
+const VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR&			getRayTracingMaintenance1Features				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR>();				}
+const VkPhysicalDeviceRayTracingMotionBlurFeaturesNV&				getRayTracingMotionBlurFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceRayTracingMotionBlurFeaturesNV>();				}
+const VkPhysicalDeviceRayTracingPipelineFeaturesKHR&				getRayTracingPipelineFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceRayTracingPipelineFeaturesKHR>();					}
+const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV&			getRepresentativeFragmentTestFeatures			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV>();			}
+const VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT&					getRGBA10X6FormatsFeaturesEXT					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT>();					}
+const VkPhysicalDeviceRobustness2FeaturesEXT&						getRobustness2FeaturesEXT						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceRobustness2FeaturesEXT>();						}
+const VkPhysicalDeviceSamplerYcbcrConversionFeatures&				getSamplerYcbcrConversionFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceSamplerYcbcrConversionFeatures>();				}
+const VkPhysicalDeviceScalarBlockLayoutFeatures&					getScalarBlockLayoutFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceScalarBlockLayoutFeatures>();						}
+const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures&			getSeparateDepthStencilLayoutsFeatures			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures>();			}
+const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT&					getShaderAtomicFloatFeaturesEXT					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderAtomicFloatFeaturesEXT>();					}
+const VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT&				getShaderAtomicFloat2FeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT>();					}
+const VkPhysicalDeviceShaderAtomicInt64Features&					getShaderAtomicInt64Features					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderAtomicInt64Features>();						}
+const VkPhysicalDeviceShaderClockFeaturesKHR&						getShaderClockFeatures							(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderClockFeaturesKHR>();						}
+const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures&		getShaderDemoteToHelperInvocationFeatures		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures>();		}
+const VkPhysicalDeviceShaderDrawParametersFeatures&					getShaderDrawParametersFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderDrawParametersFeatures>();					}
+const VkPhysicalDeviceShaderFloat16Int8Features&					getShaderFloat16Int8Features					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderFloat16Int8Features>();						}
+const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT&			getShaderImageAtomicInt64FeaturesEXT			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT>();				}
+const VkPhysicalDeviceShaderImageFootprintFeaturesNV&				getShaderImageFootprintFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderImageFootprintFeaturesNV>();				}
+const VkPhysicalDeviceShaderIntegerDotProductFeatures&				getShaderIntegerDotProductFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderIntegerDotProductFeatures>();				}
+const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL&			getShaderIntegerFunctions2FeaturesINTEL			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL>();			}
+const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV&					getShaderSMBuiltinsFeatures						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderSMBuiltinsFeaturesNV>();					}
+const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures&			getShaderSubgroupExtendedTypesFeatures			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures>();			}
+const VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR&	getShaderSubgroupUniformControlFlowFeatures		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR>();	}
+const VkPhysicalDeviceShaderTerminateInvocationFeatures&			getShaderTerminateInvocationFeatures			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderTerminateInvocationFeatures>();				}
+const VkPhysicalDeviceShadingRateImageFeaturesNV&					getShadingRateImageFeatures						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShadingRateImageFeaturesNV>();					}
+const VkPhysicalDeviceSubgroupSizeControlFeatures&					getSubgroupSizeControlFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceSubgroupSizeControlFeatures>();					}
+const VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT&				getSubpassMergeFeedbackFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT>();				}
+const VkPhysicalDeviceSubpassShadingFeaturesHUAWEI&					getSubpassShadingFeaturesHUAWEI					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceSubpassShadingFeaturesHUAWEI>();					}
+const VkPhysicalDeviceSynchronization2Features&						getSynchronization2Features						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceSynchronization2Features>();						}
+const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT&				getTexelBufferAlignmentFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT>();				}
+const VkPhysicalDeviceTextureCompressionASTCHDRFeatures&			getTextureCompressionASTCHDRFeatures			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceTextureCompressionASTCHDRFeatures>();				}
+const VkPhysicalDeviceTimelineSemaphoreFeatures&					getTimelineSemaphoreFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceTimelineSemaphoreFeatures>();						}
+const VkPhysicalDeviceTransformFeedbackFeaturesEXT&					getTransformFeedbackFeaturesEXT					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceTransformFeedbackFeaturesEXT>();					}
+const VkPhysicalDeviceUniformBufferStandardLayoutFeatures&			getUniformBufferStandardLayoutFeatures			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceUniformBufferStandardLayoutFeatures>();			}
+const VkPhysicalDeviceVariablePointersFeatures&						getVariablePointersFeatures						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceVariablePointersFeatures>();						}
+const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT&			getVertexAttributeDivisorFeaturesEXT			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT>();				}
+const VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT&			getVertexInputDynamicStateFeaturesEXT			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT>();			}
+const VkPhysicalDeviceVulkanMemoryModelFeatures&					getVulkanMemoryModelFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceVulkanMemoryModelFeatures>();						}
+const VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR&		getWorkgroupMemoryExplicitLayoutFeatures		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR>();		}
+const VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT&				getYcbcr2Plane444FormatsFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT>();				}
+const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT&					getYcbcrImageArraysFeaturesEXT					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT>();					}
+const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures&		getZeroInitializeWorkgroupMemoryFeatures		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures>();			}
diff --git a/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFunctionPointers.inl b/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFunctionPointers.inl
index e98e3f1..032c385 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFunctionPointers.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFunctionPointers.inl
@@ -221,6 +221,7 @@
 GetPipelineExecutableInternalRepresentationsKHRFunc	getPipelineExecutableInternalRepresentationsKHR;
 CmdWriteBufferMarker2AMDFunc						cmdWriteBufferMarker2AMD;
 GetQueueCheckpointData2NVFunc						getQueueCheckpointData2NV;
+CmdTraceRaysIndirect2KHRFunc						cmdTraceRaysIndirect2KHR;
 DebugMarkerSetObjectTagEXTFunc						debugMarkerSetObjectTagEXT;
 DebugMarkerSetObjectNameEXTFunc						debugMarkerSetObjectNameEXT;
 CmdDebugMarkerBeginEXTFunc							cmdDebugMarkerBeginEXT;
@@ -311,11 +312,13 @@
 CreateIndirectCommandsLayoutNVFunc					createIndirectCommandsLayoutNV;
 DestroyIndirectCommandsLayoutNVFunc					destroyIndirectCommandsLayoutNV;
 CmdSetFragmentShadingRateEnumNVFunc					cmdSetFragmentShadingRateEnumNV;
+GetImageSubresourceLayout2EXTFunc					getImageSubresourceLayout2EXT;
 CmdSetVertexInputEXTFunc							cmdSetVertexInputEXT;
 GetDeviceSubpassShadingMaxWorkgroupSizeHUAWEIFunc	getDeviceSubpassShadingMaxWorkgroupSizeHUAWEI;
 CmdSubpassShadingHUAWEIFunc							cmdSubpassShadingHUAWEI;
 CmdBindInvocationMaskHUAWEIFunc						cmdBindInvocationMaskHUAWEI;
 GetMemoryRemoteAddressNVFunc						getMemoryRemoteAddressNV;
+GetPipelinePropertiesEXTFunc						getPipelinePropertiesEXT;
 CmdSetPatchControlPointsEXTFunc						cmdSetPatchControlPointsEXT;
 CmdSetLogicOpEXTFunc								cmdSetLogicOpEXT;
 CmdSetColorWriteEnableEXTFunc						cmdSetColorWriteEnableEXT;
diff --git a/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceProperties.inl b/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceProperties.inl
index 9a40c0f..3d7fec4 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceProperties.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceProperties.inl
@@ -259,6 +259,7 @@
 template<> void initPropertyFromBlob<VkPhysicalDeviceFragmentDensityMap2PropertiesEXT>(VkPhysicalDeviceFragmentDensityMap2PropertiesEXT&, const AllPropertiesBlobs&) {}
 template<> void initPropertyFromBlob<VkPhysicalDeviceDrmPropertiesEXT>(VkPhysicalDeviceDrmPropertiesEXT&, const AllPropertiesBlobs&) {}
 template<> void initPropertyFromBlob<VkPhysicalDeviceSubpassShadingPropertiesHUAWEI>(VkPhysicalDeviceSubpassShadingPropertiesHUAWEI&, const AllPropertiesBlobs&) {}
+template<> void initPropertyFromBlob<VkPhysicalDevicePipelinePropertiesFeaturesEXT>(VkPhysicalDevicePipelinePropertiesFeaturesEXT&, const AllPropertiesBlobs&) {}
 template<> void initPropertyFromBlob<VkPhysicalDeviceMultiDrawPropertiesEXT>(VkPhysicalDeviceMultiDrawPropertiesEXT&, const AllPropertiesBlobs&) {}
 template<> void initPropertyFromBlob<VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM>(VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM&, const AllPropertiesBlobs&) {}
 template<> void initPropertyFromBlob<VkPhysicalDeviceAccelerationStructurePropertiesKHR>(VkPhysicalDeviceAccelerationStructurePropertiesKHR&, const AllPropertiesBlobs&) {}
diff --git a/external/vulkancts/framework/vulkan/generated/vulkan/vkExtensionFunctions.inl b/external/vulkancts/framework/vulkan/generated/vulkan/vkExtensionFunctions.inl
index 62bf322..1d5212b 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkan/vkExtensionFunctions.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkan/vkExtensionFunctions.inl
@@ -336,6 +336,10 @@
 	{
 		return;
 	}
+	if (extName == "VK_KHR_ray_tracing_maintenance1")
+	{
+		return;
+	}
 	if (extName == "VK_KHR_portability_enumeration")
 	{
 		return;
@@ -913,6 +917,10 @@
 	{
 		return;
 	}
+	if (extName == "VK_EXT_image_compression_control")
+	{
+		return;
+	}
 	if (extName == "VK_EXT_4444_formats")
 	{
 		return;
@@ -963,6 +971,10 @@
 	{
 		return;
 	}
+	if (extName == "VK_EXT_pipeline_properties")
+	{
+		return;
+	}
 	if (extName == "VK_EXT_extended_dynamic_state2")
 	{
 		return;
@@ -1019,6 +1031,14 @@
 	{
 		return;
 	}
+	if (extName == "VK_EXT_image_compression_control_swapchain")
+	{
+		return;
+	}
+	if (extName == "VK_EXT_subpass_merge_feedback")
+	{
+		return;
+	}
 	if (extName == "VK_KHR_acceleration_structure")
 	{
 		return;
@@ -1554,6 +1574,11 @@
 	{
 		return;
 	}
+	if (extName == "VK_KHR_ray_tracing_maintenance1")
+	{
+		functions.push_back("vkCmdTraceRaysIndirect2KHR");
+		return;
+	}
 	if (extName == "VK_KHR_portability_enumeration")
 	{
 		return;
@@ -2223,6 +2248,11 @@
 	{
 		return;
 	}
+	if (extName == "VK_EXT_image_compression_control")
+	{
+		functions.push_back("vkGetImageSubresourceLayout2EXT");
+		return;
+	}
 	if (extName == "VK_EXT_4444_formats")
 	{
 		return;
@@ -2276,6 +2306,11 @@
 		functions.push_back("vkGetMemoryRemoteAddressNV");
 		return;
 	}
+	if (extName == "VK_EXT_pipeline_properties")
+	{
+		functions.push_back("vkGetPipelinePropertiesEXT");
+		return;
+	}
 	if (extName == "VK_EXT_extended_dynamic_state2")
 	{
 		functions.push_back("vkCmdSetPatchControlPointsEXT");
@@ -2343,6 +2378,14 @@
 	{
 		return;
 	}
+	if (extName == "VK_EXT_image_compression_control_swapchain")
+	{
+		return;
+	}
+	if (extName == "VK_EXT_subpass_merge_feedback")
+	{
+		return;
+	}
 	if (extName == "VK_KHR_acceleration_structure")
 	{
 		functions.push_back("vkCreateAccelerationStructureKHR");
@@ -2607,6 +2650,7 @@
 	"VK_KHR_pipeline_executable_properties",
 	"VK_KHR_synchronization2",
 	"VK_KHR_copy_commands2",
+	"VK_KHR_ray_tracing_maintenance1",
 	"VK_KHR_maintenance4",
 	"VK_EXT_debug_marker",
 	"VK_EXT_transform_feedback",
@@ -2640,10 +2684,12 @@
 	"VK_NV_device_generated_commands",
 	"VK_EXT_private_data",
 	"VK_NV_fragment_shading_rate_enums",
+	"VK_EXT_image_compression_control",
 	"VK_EXT_vertex_input_dynamic_state",
 	"VK_HUAWEI_subpass_shading",
 	"VK_HUAWEI_invocation_mask",
 	"VK_NV_external_memory_rdma",
+	"VK_EXT_pipeline_properties",
 	"VK_EXT_extended_dynamic_state2",
 	"VK_EXT_color_write_enable",
 	"VK_EXT_multi_draw",
diff --git a/external/vulkancts/framework/vulkan/generated/vulkan/vkFunctionPointerTypes.inl b/external/vulkancts/framework/vulkan/generated/vulkan/vkFunctionPointerTypes.inl
index cac9da0..e162853 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkan/vkFunctionPointerTypes.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkan/vkFunctionPointerTypes.inl
@@ -324,6 +324,7 @@
 typedef VKAPI_ATTR void					(VKAPI_CALL* CmdCopyImageToBuffer2KHRFunc)											(VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo);
 typedef VKAPI_ATTR void					(VKAPI_CALL* CmdBlitImage2KHRFunc)													(VkCommandBuffer commandBuffer, const VkBlitImageInfo2* pBlitImageInfo);
 typedef VKAPI_ATTR void					(VKAPI_CALL* CmdResolveImage2KHRFunc)												(VkCommandBuffer commandBuffer, const VkResolveImageInfo2* pResolveImageInfo);
+typedef VKAPI_ATTR void					(VKAPI_CALL* CmdTraceRaysIndirect2KHRFunc)											(VkCommandBuffer commandBuffer, VkDeviceAddress indirectDeviceAddress);
 typedef VKAPI_ATTR void					(VKAPI_CALL* GetDeviceBufferMemoryRequirementsKHRFunc)								(VkDevice device, const VkDeviceBufferMemoryRequirements* pInfo, VkMemoryRequirements2* pMemoryRequirements);
 typedef VKAPI_ATTR void					(VKAPI_CALL* GetDeviceImageMemoryRequirementsKHRFunc)								(VkDevice device, const VkDeviceImageMemoryRequirements* pInfo, VkMemoryRequirements2* pMemoryRequirements);
 typedef VKAPI_ATTR void					(VKAPI_CALL* GetDeviceImageSparseMemoryRequirementsKHRFunc)							(VkDevice device, const VkDeviceImageMemoryRequirements* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements);
@@ -451,6 +452,7 @@
 typedef VKAPI_ATTR VkResult				(VKAPI_CALL* SetPrivateDataEXTFunc)													(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t data);
 typedef VKAPI_ATTR void					(VKAPI_CALL* GetPrivateDataEXTFunc)													(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t* pData);
 typedef VKAPI_ATTR void					(VKAPI_CALL* CmdSetFragmentShadingRateEnumNVFunc)									(VkCommandBuffer commandBuffer, VkFragmentShadingRateNV shadingRate, const VkFragmentShadingRateCombinerOpKHR combinerOps[2]);
+typedef VKAPI_ATTR void					(VKAPI_CALL* GetImageSubresourceLayout2EXTFunc)										(VkDevice device, VkImage image, const VkImageSubresource2EXT* pSubresource, VkSubresourceLayout2EXT* pLayout);
 typedef VKAPI_ATTR VkResult				(VKAPI_CALL* AcquireWinrtDisplayNVFunc)												(VkPhysicalDevice physicalDevice, VkDisplayKHR display);
 typedef VKAPI_ATTR VkResult				(VKAPI_CALL* GetWinrtDisplayNVFunc)													(VkPhysicalDevice physicalDevice, uint32_t deviceRelativeId, VkDisplayKHR* pDisplay);
 typedef VKAPI_ATTR void					(VKAPI_CALL* CmdSetVertexInputEXTFunc)												(VkCommandBuffer commandBuffer, uint32_t vertexBindingDescriptionCount, const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, uint32_t vertexAttributeDescriptionCount, const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions);
@@ -458,6 +460,7 @@
 typedef VKAPI_ATTR void					(VKAPI_CALL* CmdSubpassShadingHUAWEIFunc)											(VkCommandBuffer commandBuffer);
 typedef VKAPI_ATTR void					(VKAPI_CALL* CmdBindInvocationMaskHUAWEIFunc)										(VkCommandBuffer commandBuffer, VkImageView imageView, VkImageLayout imageLayout);
 typedef VKAPI_ATTR VkResult				(VKAPI_CALL* GetMemoryRemoteAddressNVFunc)											(VkDevice device, const VkMemoryGetRemoteAddressInfoNV* pMemoryGetRemoteAddressInfo, VkRemoteAddressNV* pAddress);
+typedef VKAPI_ATTR VkResult				(VKAPI_CALL* GetPipelinePropertiesEXTFunc)											(VkDevice device, const VkPipelineInfoEXT* pPipelineInfo, VkBaseOutStructure* pPipelineProperties);
 typedef VKAPI_ATTR void					(VKAPI_CALL* CmdSetPatchControlPointsEXTFunc)										(VkCommandBuffer commandBuffer, uint32_t patchControlPoints);
 typedef VKAPI_ATTR void					(VKAPI_CALL* CmdSetRasterizerDiscardEnableEXTFunc)									(VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable);
 typedef VKAPI_ATTR void					(VKAPI_CALL* CmdSetDepthBiasEnableEXTFunc)											(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable);
diff --git a/external/vulkancts/framework/vulkan/generated/vulkan/vkGetStructureTypeImpl.inl b/external/vulkancts/framework/vulkan/generated/vulkan/vkGetStructureTypeImpl.inl
index 58117fd..0717b2a 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkan/vkGetStructureTypeImpl.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkan/vkGetStructureTypeImpl.inl
@@ -1393,6 +1393,11 @@
 	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR;
 }
 
+template<> VkStructureType getStructureType<VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR> (void)
+{
+	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR;
+}
+
 template<> VkStructureType getStructureType<VkDebugReportCallbackCreateInfoEXT> (void)
 {
 	return VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT;
@@ -2308,6 +2313,31 @@
 	return VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM;
 }
 
+template<> VkStructureType getStructureType<VkPhysicalDeviceImageCompressionControlFeaturesEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkImageCompressionControlEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT;
+}
+
+template<> VkStructureType getStructureType<VkSubresourceLayout2EXT> (void)
+{
+	return VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_EXT;
+}
+
+template<> VkStructureType getStructureType<VkImageSubresource2EXT> (void)
+{
+	return VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_EXT;
+}
+
+template<> VkStructureType getStructureType<VkImageCompressionPropertiesEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT;
+}
+
 template<> VkStructureType getStructureType<VkPhysicalDevice4444FormatsFeaturesEXT> (void)
 {
 	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT;
@@ -2398,6 +2428,16 @@
 	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV;
 }
 
+template<> VkStructureType getStructureType<VkPipelinePropertiesIdentifierEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_PIPELINE_PROPERTIES_IDENTIFIER_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDevicePipelinePropertiesFeaturesEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT;
+}
+
 template<> VkStructureType getStructureType<VkPhysicalDeviceExtendedDynamicState2FeaturesEXT> (void)
 {
 	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT;
@@ -2493,6 +2533,31 @@
 	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV;
 }
 
+template<> VkStructureType getStructureType<VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkRenderPassCreationControlEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_CONTROL_EXT;
+}
+
+template<> VkStructureType getStructureType<VkRenderPassCreationFeedbackInfoEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_FEEDBACK_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkRenderPassSubpassFeedbackInfoEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_RENDER_PASS_SUBPASS_FEEDBACK_INFO_EXT;
+}
+
 template<> VkStructureType getStructureType<VkAccelerationStructureGeometryTrianglesDataKHR> (void)
 {
 	return VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR;
diff --git a/external/vulkancts/framework/vulkan/generated/vulkan/vkInitDeviceFunctionPointers.inl b/external/vulkancts/framework/vulkan/generated/vulkan/vkInitDeviceFunctionPointers.inl
index 70cf9f8..0ac2b11 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkan/vkInitDeviceFunctionPointers.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkan/vkInitDeviceFunctionPointers.inl
@@ -349,6 +349,7 @@
 m_vk.getPipelineExecutableInternalRepresentationsKHR	= (GetPipelineExecutableInternalRepresentationsKHRFunc)	GET_PROC_ADDR("vkGetPipelineExecutableInternalRepresentationsKHR");
 m_vk.cmdWriteBufferMarker2AMD							= (CmdWriteBufferMarker2AMDFunc)						GET_PROC_ADDR("vkCmdWriteBufferMarker2AMD");
 m_vk.getQueueCheckpointData2NV							= (GetQueueCheckpointData2NVFunc)						GET_PROC_ADDR("vkGetQueueCheckpointData2NV");
+m_vk.cmdTraceRaysIndirect2KHR							= (CmdTraceRaysIndirect2KHRFunc)						GET_PROC_ADDR("vkCmdTraceRaysIndirect2KHR");
 m_vk.debugMarkerSetObjectTagEXT							= (DebugMarkerSetObjectTagEXTFunc)						GET_PROC_ADDR("vkDebugMarkerSetObjectTagEXT");
 m_vk.debugMarkerSetObjectNameEXT						= (DebugMarkerSetObjectNameEXTFunc)						GET_PROC_ADDR("vkDebugMarkerSetObjectNameEXT");
 m_vk.cmdDebugMarkerBeginEXT								= (CmdDebugMarkerBeginEXTFunc)							GET_PROC_ADDR("vkCmdDebugMarkerBeginEXT");
@@ -439,11 +440,13 @@
 m_vk.createIndirectCommandsLayoutNV						= (CreateIndirectCommandsLayoutNVFunc)					GET_PROC_ADDR("vkCreateIndirectCommandsLayoutNV");
 m_vk.destroyIndirectCommandsLayoutNV					= (DestroyIndirectCommandsLayoutNVFunc)					GET_PROC_ADDR("vkDestroyIndirectCommandsLayoutNV");
 m_vk.cmdSetFragmentShadingRateEnumNV					= (CmdSetFragmentShadingRateEnumNVFunc)					GET_PROC_ADDR("vkCmdSetFragmentShadingRateEnumNV");
+m_vk.getImageSubresourceLayout2EXT						= (GetImageSubresourceLayout2EXTFunc)					GET_PROC_ADDR("vkGetImageSubresourceLayout2EXT");
 m_vk.cmdSetVertexInputEXT								= (CmdSetVertexInputEXTFunc)							GET_PROC_ADDR("vkCmdSetVertexInputEXT");
 m_vk.getDeviceSubpassShadingMaxWorkgroupSizeHUAWEI		= (GetDeviceSubpassShadingMaxWorkgroupSizeHUAWEIFunc)	GET_PROC_ADDR("vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI");
 m_vk.cmdSubpassShadingHUAWEI							= (CmdSubpassShadingHUAWEIFunc)							GET_PROC_ADDR("vkCmdSubpassShadingHUAWEI");
 m_vk.cmdBindInvocationMaskHUAWEI						= (CmdBindInvocationMaskHUAWEIFunc)						GET_PROC_ADDR("vkCmdBindInvocationMaskHUAWEI");
 m_vk.getMemoryRemoteAddressNV							= (GetMemoryRemoteAddressNVFunc)						GET_PROC_ADDR("vkGetMemoryRemoteAddressNV");
+m_vk.getPipelinePropertiesEXT							= (GetPipelinePropertiesEXTFunc)						GET_PROC_ADDR("vkGetPipelinePropertiesEXT");
 m_vk.cmdSetPatchControlPointsEXT						= (CmdSetPatchControlPointsEXTFunc)						GET_PROC_ADDR("vkCmdSetPatchControlPointsEXT");
 m_vk.cmdSetLogicOpEXT									= (CmdSetLogicOpEXTFunc)								GET_PROC_ADDR("vkCmdSetLogicOpEXT");
 m_vk.cmdSetColorWriteEnableEXT							= (CmdSetColorWriteEnableEXTFunc)						GET_PROC_ADDR("vkCmdSetColorWriteEnableEXT");
diff --git a/external/vulkancts/framework/vulkan/generated/vulkan/vkMandatoryFeatures.inl b/external/vulkancts/framework/vulkan/generated/vulkan/vkMandatoryFeatures.inl
index be16fff..31e39db 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkan/vkMandatoryFeatures.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkan/vkMandatoryFeatures.inl
@@ -370,6 +370,16 @@
 		nextPtr  = &physicalDeviceRayQueryFeaturesKHR.pNext;
 	}
 
+	vk::VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR physicalDeviceRayTracingMaintenance1FeaturesKHR;
+	deMemset(&physicalDeviceRayTracingMaintenance1FeaturesKHR, 0, sizeof(physicalDeviceRayTracingMaintenance1FeaturesKHR));
+
+	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_ray_tracing_maintenance1")) )
+	{
+		physicalDeviceRayTracingMaintenance1FeaturesKHR.sType = getStructureType<VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR>();
+		*nextPtr = &physicalDeviceRayTracingMaintenance1FeaturesKHR;
+		nextPtr  = &physicalDeviceRayTracingMaintenance1FeaturesKHR.pNext;
+	}
+
 	vk::VkPhysicalDeviceRayTracingPipelineFeaturesKHR physicalDeviceRayTracingPipelineFeaturesKHR;
 	deMemset(&physicalDeviceRayTracingPipelineFeaturesKHR, 0, sizeof(physicalDeviceRayTracingPipelineFeaturesKHR));
 
@@ -1312,6 +1322,15 @@
 		}
 	}
 
+	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_ray_tracing_maintenance1")) )
+	{
+		if ( physicalDeviceRayTracingMaintenance1FeaturesKHR.rayTracingMaintenance1 == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature rayTracingMaintenance1 not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
 	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_ray_tracing_pipeline")) )
 	{
 		if ( ( physicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipeline == VK_FALSE ) && ( physicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipelineTraceRaysIndirect == VK_FALSE ) )
diff --git a/external/vulkancts/framework/vulkan/generated/vulkan/vkNullDriverImpl.inl b/external/vulkancts/framework/vulkan/generated/vulkan/vkNullDriverImpl.inl
index 9526293..4653c95 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkan/vkNullDriverImpl.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkan/vkNullDriverImpl.inl
@@ -2030,6 +2030,12 @@
 	DE_UNREF(pCheckpointData);
 }
 
+VKAPI_ATTR void VKAPI_CALL cmdTraceRaysIndirect2KHR (VkCommandBuffer commandBuffer, VkDeviceAddress indirectDeviceAddress)
+{
+	DE_UNREF(commandBuffer);
+	DE_UNREF(indirectDeviceAddress);
+}
+
 VKAPI_ATTR void VKAPI_CALL debugReportMessageEXT (VkInstance instance, VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage)
 {
 	DE_UNREF(instance);
@@ -2757,6 +2763,14 @@
 	DE_UNREF(combinerOps);
 }
 
+VKAPI_ATTR void VKAPI_CALL getImageSubresourceLayout2EXT (VkDevice device, VkImage image, const VkImageSubresource2EXT* pSubresource, VkSubresourceLayout2EXT* pLayout)
+{
+	DE_UNREF(device);
+	DE_UNREF(image);
+	DE_UNREF(pSubresource);
+	DE_UNREF(pLayout);
+}
+
 VKAPI_ATTR VkResult VKAPI_CALL acquireWinrtDisplayNV (VkPhysicalDevice physicalDevice, VkDisplayKHR display)
 {
 	DE_UNREF(physicalDevice);
@@ -2809,6 +2823,14 @@
 	return VK_SUCCESS;
 }
 
+VKAPI_ATTR VkResult VKAPI_CALL getPipelinePropertiesEXT (VkDevice device, const VkPipelineInfoEXT* pPipelineInfo, VkBaseOutStructure* pPipelineProperties)
+{
+	DE_UNREF(device);
+	DE_UNREF(pPipelineInfo);
+	DE_UNREF(pPipelineProperties);
+	return VK_SUCCESS;
+}
+
 VKAPI_ATTR void VKAPI_CALL cmdSetPatchControlPointsEXT (VkCommandBuffer commandBuffer, uint32_t patchControlPoints)
 {
 	DE_UNREF(commandBuffer);
@@ -3677,6 +3699,7 @@
 	VK_NULL_FUNC_ENTRY(vkCmdCopyImageToBuffer2KHR,							cmdCopyImageToBuffer2),
 	VK_NULL_FUNC_ENTRY(vkCmdBlitImage2KHR,									cmdBlitImage2),
 	VK_NULL_FUNC_ENTRY(vkCmdResolveImage2KHR,								cmdResolveImage2),
+	VK_NULL_FUNC_ENTRY(vkCmdTraceRaysIndirect2KHR,							cmdTraceRaysIndirect2KHR),
 	VK_NULL_FUNC_ENTRY(vkGetDeviceBufferMemoryRequirementsKHR,				getDeviceBufferMemoryRequirements),
 	VK_NULL_FUNC_ENTRY(vkGetDeviceImageMemoryRequirementsKHR,				getDeviceImageMemoryRequirements),
 	VK_NULL_FUNC_ENTRY(vkGetDeviceImageSparseMemoryRequirementsKHR,			getDeviceImageSparseMemoryRequirements),
@@ -3787,11 +3810,13 @@
 	VK_NULL_FUNC_ENTRY(vkSetPrivateDataEXT,									setPrivateData),
 	VK_NULL_FUNC_ENTRY(vkGetPrivateDataEXT,									getPrivateData),
 	VK_NULL_FUNC_ENTRY(vkCmdSetFragmentShadingRateEnumNV,					cmdSetFragmentShadingRateEnumNV),
+	VK_NULL_FUNC_ENTRY(vkGetImageSubresourceLayout2EXT,						getImageSubresourceLayout2EXT),
 	VK_NULL_FUNC_ENTRY(vkCmdSetVertexInputEXT,								cmdSetVertexInputEXT),
 	VK_NULL_FUNC_ENTRY(vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI,		getDeviceSubpassShadingMaxWorkgroupSizeHUAWEI),
 	VK_NULL_FUNC_ENTRY(vkCmdSubpassShadingHUAWEI,							cmdSubpassShadingHUAWEI),
 	VK_NULL_FUNC_ENTRY(vkCmdBindInvocationMaskHUAWEI,						cmdBindInvocationMaskHUAWEI),
 	VK_NULL_FUNC_ENTRY(vkGetMemoryRemoteAddressNV,							getMemoryRemoteAddressNV),
+	VK_NULL_FUNC_ENTRY(vkGetPipelinePropertiesEXT,							getPipelinePropertiesEXT),
 	VK_NULL_FUNC_ENTRY(vkCmdSetPatchControlPointsEXT,						cmdSetPatchControlPointsEXT),
 	VK_NULL_FUNC_ENTRY(vkCmdSetRasterizerDiscardEnableEXT,					cmdSetRasterizerDiscardEnable),
 	VK_NULL_FUNC_ENTRY(vkCmdSetDepthBiasEnableEXT,							cmdSetDepthBiasEnable),
diff --git a/external/vulkancts/framework/vulkan/generated/vulkan/vkStrUtil.inl b/external/vulkancts/framework/vulkan/generated/vulkan/vkStrUtil.inl
index a6530c4..bb1c221 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkan/vkStrUtil.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkan/vkStrUtil.inl
@@ -97,6 +97,7 @@
 const char*	getFragmentShadingRateTypeNVName						(VkFragmentShadingRateTypeNV value);
 const char*	getFragmentShadingRateNVName							(VkFragmentShadingRateNV value);
 const char*	getAccelerationStructureMotionInstanceTypeNVName		(VkAccelerationStructureMotionInstanceTypeNV value);
+const char*	getSubpassMergeStatusEXTName							(VkSubpassMergeStatusEXT value);
 const char*	getBuildAccelerationStructureModeKHRName				(VkBuildAccelerationStructureModeKHR value);
 const char*	getAccelerationStructureBuildTypeKHRName				(VkAccelerationStructureBuildTypeKHR value);
 const char*	getAccelerationStructureCompatibilityKHRName			(VkAccelerationStructureCompatibilityKHR value);
@@ -217,6 +218,7 @@
 inline tcu::Format::Enum<VkFragmentShadingRateTypeNV>						getFragmentShadingRateTypeNVStr						(VkFragmentShadingRateTypeNV value)						{ return tcu::Format::Enum<VkFragmentShadingRateTypeNV>(getFragmentShadingRateTypeNVName, value);											}
 inline tcu::Format::Enum<VkFragmentShadingRateNV>							getFragmentShadingRateNVStr							(VkFragmentShadingRateNV value)							{ return tcu::Format::Enum<VkFragmentShadingRateNV>(getFragmentShadingRateNVName, value);													}
 inline tcu::Format::Enum<VkAccelerationStructureMotionInstanceTypeNV>		getAccelerationStructureMotionInstanceTypeNVStr		(VkAccelerationStructureMotionInstanceTypeNV value)		{ return tcu::Format::Enum<VkAccelerationStructureMotionInstanceTypeNV>(getAccelerationStructureMotionInstanceTypeNVName, value);			}
+inline tcu::Format::Enum<VkSubpassMergeStatusEXT>							getSubpassMergeStatusEXTStr							(VkSubpassMergeStatusEXT value)							{ return tcu::Format::Enum<VkSubpassMergeStatusEXT>(getSubpassMergeStatusEXTName, value);													}
 inline tcu::Format::Enum<VkBuildAccelerationStructureModeKHR>				getBuildAccelerationStructureModeKHRStr				(VkBuildAccelerationStructureModeKHR value)				{ return tcu::Format::Enum<VkBuildAccelerationStructureModeKHR>(getBuildAccelerationStructureModeKHRName, value);							}
 inline tcu::Format::Enum<VkAccelerationStructureBuildTypeKHR>				getAccelerationStructureBuildTypeKHRStr				(VkAccelerationStructureBuildTypeKHR value)				{ return tcu::Format::Enum<VkAccelerationStructureBuildTypeKHR>(getAccelerationStructureBuildTypeKHRName, value);							}
 inline tcu::Format::Enum<VkAccelerationStructureCompatibilityKHR>			getAccelerationStructureCompatibilityKHRStr			(VkAccelerationStructureCompatibilityKHR value)			{ return tcu::Format::Enum<VkAccelerationStructureCompatibilityKHR>(getAccelerationStructureCompatibilityKHRName, value);					}
@@ -337,6 +339,7 @@
 inline std::ostream&	operator<<	(std::ostream& s, VkFragmentShadingRateTypeNV value)						{ return s << getFragmentShadingRateTypeNVStr(value);						}
 inline std::ostream&	operator<<	(std::ostream& s, VkFragmentShadingRateNV value)							{ return s << getFragmentShadingRateNVStr(value);							}
 inline std::ostream&	operator<<	(std::ostream& s, VkAccelerationStructureMotionInstanceTypeNV value)		{ return s << getAccelerationStructureMotionInstanceTypeNVStr(value);		}
+inline std::ostream&	operator<<	(std::ostream& s, VkSubpassMergeStatusEXT value)							{ return s << getSubpassMergeStatusEXTStr(value);							}
 inline std::ostream&	operator<<	(std::ostream& s, VkBuildAccelerationStructureModeKHR value)				{ return s << getBuildAccelerationStructureModeKHRStr(value);				}
 inline std::ostream&	operator<<	(std::ostream& s, VkAccelerationStructureBuildTypeKHR value)				{ return s << getAccelerationStructureBuildTypeKHRStr(value);				}
 inline std::ostream&	operator<<	(std::ostream& s, VkAccelerationStructureCompatibilityKHR value)			{ return s << getAccelerationStructureCompatibilityKHRStr(value);			}
@@ -448,6 +451,8 @@
 tcu::Format::Bitfield<32>	getIndirectCommandsLayoutUsageFlagsNVStr					(VkIndirectCommandsLayoutUsageFlagsNV value);
 tcu::Format::Bitfield<32>	getDeviceDiagnosticsConfigFlagsNVStr						(VkDeviceDiagnosticsConfigFlagsNV value);
 tcu::Format::Bitfield<32>	getGraphicsPipelineLibraryFlagsEXTStr						(VkGraphicsPipelineLibraryFlagsEXT value);
+tcu::Format::Bitfield<32>	getImageCompressionFlagsEXTStr								(VkImageCompressionFlagsEXT value);
+tcu::Format::Bitfield<32>	getImageCompressionFixedRateFlagsEXTStr						(VkImageCompressionFixedRateFlagsEXT value);
 tcu::Format::Bitfield<32>	getAccelerationStructureCreateFlagsKHRStr					(VkAccelerationStructureCreateFlagsKHR value);
 tcu::Format::Bitfield<32>	getVideoCodecOperationFlagsKHRStr							(VkVideoCodecOperationFlagsKHR value);
 tcu::Format::Bitfield<32>	getVideoChromaSubsamplingFlagsKHRStr						(VkVideoChromaSubsamplingFlagsKHR value);
@@ -881,6 +886,8 @@
 std::ostream&	operator<<	(std::ostream& s, const VkCheckpointData2NV& value);
 std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR& value);
 std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR& value);
+std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR& value);
+std::ostream&	operator<<	(std::ostream& s, const VkTraceRaysIndirectCommand2KHR& value);
 std::ostream&	operator<<	(std::ostream& s, const VkDebugReportCallbackCreateInfoEXT& value);
 std::ostream&	operator<<	(std::ostream& s, const VkPipelineRasterizationStateRasterizationOrderAMD& value);
 std::ostream&	operator<<	(std::ostream& s, const VkDebugMarkerObjectNameInfoEXT& value);
@@ -1100,6 +1107,11 @@
 std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT& value);
 std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT& value);
 std::ostream&	operator<<	(std::ostream& s, const VkCopyCommandTransformInfoQCOM& value);
+std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceImageCompressionControlFeaturesEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkImageCompressionControlEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkSubresourceLayout2EXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkImageSubresource2EXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkImageCompressionPropertiesEXT& value);
 std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDevice4444FormatsFeaturesEXT& value);
 std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM& value);
 std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT& value);
@@ -1119,6 +1131,8 @@
 std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceInvocationMaskFeaturesHUAWEI& value);
 std::ostream&	operator<<	(std::ostream& s, const VkMemoryGetRemoteAddressInfoNV& value);
 std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceExternalMemoryRDMAFeaturesNV& value);
+std::ostream&	operator<<	(std::ostream& s, const VkPipelinePropertiesIdentifierEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDevicePipelinePropertiesFeaturesEXT& value);
 std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceExtendedDynamicState2FeaturesEXT& value);
 std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceColorWriteEnableFeaturesEXT& value);
 std::ostream&	operator<<	(std::ostream& s, const VkPipelineColorWriteCreateInfoEXT& value);
@@ -1140,6 +1154,11 @@
 std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM& value);
 std::ostream&	operator<<	(std::ostream& s, const VkSubpassFragmentDensityMapOffsetEndInfoQCOM& value);
 std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceLinearColorAttachmentFeaturesNV& value);
+std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkRenderPassCreationControlEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkRenderPassCreationFeedbackInfoEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkRenderPassSubpassFeedbackInfoEXT& value);
 std::ostream&	operator<<	(std::ostream& s, const VkDeviceOrHostAddressKHR& value);
 std::ostream&	operator<<	(std::ostream& s, const VkAccelerationStructureBuildRangeInfoKHR& value);
 std::ostream&	operator<<	(std::ostream& s, const VkAccelerationStructureGeometryTrianglesDataKHR& value);
diff --git a/external/vulkancts/framework/vulkan/generated/vulkan/vkStrUtilImpl.inl b/external/vulkancts/framework/vulkan/generated/vulkan/vkStrUtilImpl.inl
index 2d75b53..8f59a55 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkan/vkStrUtilImpl.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkan/vkStrUtilImpl.inl
@@ -118,6 +118,7 @@
 		case VK_THREAD_DONE_KHR:									return "VK_THREAD_DONE_KHR";
 		case VK_OPERATION_DEFERRED_KHR:								return "VK_OPERATION_DEFERRED_KHR";
 		case VK_OPERATION_NOT_DEFERRED_KHR:							return "VK_OPERATION_NOT_DEFERRED_KHR";
+		case VK_ERROR_COMPRESSION_EXHAUSTED_EXT:					return "VK_ERROR_COMPRESSION_EXHAUSTED_EXT";
 		case VK_RESULT_MAX_ENUM:									return "VK_RESULT_MAX_ENUM";
 		default:													return DE_NULL;
 	}
@@ -708,6 +709,11 @@
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT";
 		case VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM:									return "VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM";
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR:		return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR";
+		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT";
+		case VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT:										return "VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT";
+		case VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_EXT:											return "VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_EXT";
+		case VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_EXT:												return "VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_EXT";
+		case VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT:									return "VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT";
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT:							return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT";
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM:	return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM";
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT";
@@ -742,11 +748,14 @@
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI";
 		case VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV:									return "VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV";
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV";
+		case VK_STRUCTURE_TYPE_PIPELINE_PROPERTIES_IDENTIFIER_EXT:									return "VK_STRUCTURE_TYPE_PIPELINE_PROPERTIES_IDENTIFIER_EXT";
+		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT";
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT";
 		case VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX:										return "VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX";
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT";
 		case VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT:								return "VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT";
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT";
+		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR";
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT";
 		case VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT:									return "VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT";
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT:								return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT";
@@ -762,6 +771,11 @@
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM";
 		case VK_STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM:					return "VK_STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM";
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV";
+		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT:	return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT";
+		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT";
+		case VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_CONTROL_EXT:									return "VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_CONTROL_EXT";
+		case VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_FEEDBACK_INFO_EXT:								return "VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_FEEDBACK_INFO_EXT";
+		case VK_STRUCTURE_TYPE_RENDER_PASS_SUBPASS_FEEDBACK_INFO_EXT:								return "VK_STRUCTURE_TYPE_RENDER_PASS_SUBPASS_FEEDBACK_INFO_EXT";
 		case VK_STRUCTURE_TYPE_MAX_ENUM:															return "VK_STRUCTURE_TYPE_MAX_ENUM";
 		default:																					return DE_NULL;
 	}
@@ -1205,20 +1219,22 @@
 {
 	switch (value)
 	{
-		case VK_QUERY_TYPE_OCCLUSION:										return "VK_QUERY_TYPE_OCCLUSION";
-		case VK_QUERY_TYPE_PIPELINE_STATISTICS:								return "VK_QUERY_TYPE_PIPELINE_STATISTICS";
-		case VK_QUERY_TYPE_TIMESTAMP:										return "VK_QUERY_TYPE_TIMESTAMP";
-		case VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR:							return "VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR";
-		case VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT:					return "VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT";
-		case VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR:							return "VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR";
-		case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR:		return "VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR";
-		case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR:	return "VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR";
-		case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV:		return "VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV";
-		case VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL:							return "VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL";
-		case VK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR:			return "VK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR";
-		case VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT:						return "VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT";
-		case VK_QUERY_TYPE_MAX_ENUM:										return "VK_QUERY_TYPE_MAX_ENUM";
-		default:															return DE_NULL;
+		case VK_QUERY_TYPE_OCCLUSION:														return "VK_QUERY_TYPE_OCCLUSION";
+		case VK_QUERY_TYPE_PIPELINE_STATISTICS:												return "VK_QUERY_TYPE_PIPELINE_STATISTICS";
+		case VK_QUERY_TYPE_TIMESTAMP:														return "VK_QUERY_TYPE_TIMESTAMP";
+		case VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR:											return "VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR";
+		case VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT:									return "VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT";
+		case VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR:											return "VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR";
+		case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR:						return "VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR";
+		case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR:					return "VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR";
+		case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV:						return "VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV";
+		case VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL:											return "VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL";
+		case VK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR:							return "VK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR";
+		case VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT:										return "VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT";
+		case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR:	return "VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR";
+		case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR:									return "VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR";
+		case VK_QUERY_TYPE_MAX_ENUM:														return "VK_QUERY_TYPE_MAX_ENUM";
+		default:																			return DE_NULL;
 	}
 }
 
@@ -2465,6 +2481,29 @@
 	}
 }
 
+const char* getSubpassMergeStatusEXTName (VkSubpassMergeStatusEXT value)
+{
+	switch (value)
+	{
+		case VK_SUBPASS_MERGE_STATUS_MERGED_EXT:									return "VK_SUBPASS_MERGE_STATUS_MERGED_EXT";
+		case VK_SUBPASS_MERGE_STATUS_DISALLOWED_EXT:								return "VK_SUBPASS_MERGE_STATUS_DISALLOWED_EXT";
+		case VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SIDE_EFFECTS_EXT:					return "VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SIDE_EFFECTS_EXT";
+		case VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SAMPLES_MISMATCH_EXT:				return "VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SAMPLES_MISMATCH_EXT";
+		case VK_SUBPASS_MERGE_STATUS_NOT_MERGED_VIEWS_MISMATCH_EXT:					return "VK_SUBPASS_MERGE_STATUS_NOT_MERGED_VIEWS_MISMATCH_EXT";
+		case VK_SUBPASS_MERGE_STATUS_NOT_MERGED_ALIASING_EXT:						return "VK_SUBPASS_MERGE_STATUS_NOT_MERGED_ALIASING_EXT";
+		case VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPENDENCIES_EXT:					return "VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPENDENCIES_EXT";
+		case VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INCOMPATIBLE_INPUT_ATTACHMENT_EXT:	return "VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INCOMPATIBLE_INPUT_ATTACHMENT_EXT";
+		case VK_SUBPASS_MERGE_STATUS_NOT_MERGED_TOO_MANY_ATTACHMENTS_EXT:			return "VK_SUBPASS_MERGE_STATUS_NOT_MERGED_TOO_MANY_ATTACHMENTS_EXT";
+		case VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INSUFFICIENT_STORAGE_EXT:			return "VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INSUFFICIENT_STORAGE_EXT";
+		case VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPTH_STENCIL_COUNT_EXT:			return "VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPTH_STENCIL_COUNT_EXT";
+		case VK_SUBPASS_MERGE_STATUS_NOT_MERGED_RESOLVE_ATTACHMENT_REUSE_EXT:		return "VK_SUBPASS_MERGE_STATUS_NOT_MERGED_RESOLVE_ATTACHMENT_REUSE_EXT";
+		case VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SINGLE_SUBPASS_EXT:					return "VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SINGLE_SUBPASS_EXT";
+		case VK_SUBPASS_MERGE_STATUS_NOT_MERGED_UNSPECIFIED_EXT:					return "VK_SUBPASS_MERGE_STATUS_NOT_MERGED_UNSPECIFIED_EXT";
+		case VK_SUBPASS_MERGE_STATUS_MAX_ENUM_EXT:									return "VK_SUBPASS_MERGE_STATUS_MAX_ENUM_EXT";
+		default:																	return DE_NULL;
+	}
+}
+
 const char* getBuildAccelerationStructureModeKHRName (VkBuildAccelerationStructureModeKHR value)
 {
 	switch (value)
@@ -4155,6 +4194,53 @@
 	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
 }
 
+tcu::Format::Bitfield<32> getImageCompressionFlagsEXTStr (VkImageCompressionFlagsEXT value)
+{
+	static const tcu::Format::BitDesc s_desc[] =
+	{
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_DEFAULT_EXT,				"VK_IMAGE_COMPRESSION_DEFAULT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT,	"VK_IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT,	"VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_DISABLED_EXT,				"VK_IMAGE_COMPRESSION_DISABLED_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FLAG_BITS_MAX_ENUM_EXT,	"VK_IMAGE_COMPRESSION_FLAG_BITS_MAX_ENUM_EXT"),
+	};
+	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getImageCompressionFixedRateFlagsEXTStr (VkImageCompressionFixedRateFlagsEXT value)
+{
+	static const tcu::Format::BitDesc s_desc[] =
+	{
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_NONE_EXT,					"VK_IMAGE_COMPRESSION_FIXED_RATE_NONE_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_1BPC_BIT_EXT,				"VK_IMAGE_COMPRESSION_FIXED_RATE_1BPC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT,				"VK_IMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_3BPC_BIT_EXT,				"VK_IMAGE_COMPRESSION_FIXED_RATE_3BPC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT,				"VK_IMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_5BPC_BIT_EXT,				"VK_IMAGE_COMPRESSION_FIXED_RATE_5BPC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_6BPC_BIT_EXT,				"VK_IMAGE_COMPRESSION_FIXED_RATE_6BPC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_7BPC_BIT_EXT,				"VK_IMAGE_COMPRESSION_FIXED_RATE_7BPC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_8BPC_BIT_EXT,				"VK_IMAGE_COMPRESSION_FIXED_RATE_8BPC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_9BPC_BIT_EXT,				"VK_IMAGE_COMPRESSION_FIXED_RATE_9BPC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_10BPC_BIT_EXT,				"VK_IMAGE_COMPRESSION_FIXED_RATE_10BPC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_11BPC_BIT_EXT,				"VK_IMAGE_COMPRESSION_FIXED_RATE_11BPC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_12BPC_BIT_EXT,				"VK_IMAGE_COMPRESSION_FIXED_RATE_12BPC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_13BPC_BIT_EXT,				"VK_IMAGE_COMPRESSION_FIXED_RATE_13BPC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_14BPC_BIT_EXT,				"VK_IMAGE_COMPRESSION_FIXED_RATE_14BPC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_15BPC_BIT_EXT,				"VK_IMAGE_COMPRESSION_FIXED_RATE_15BPC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_16BPC_BIT_EXT,				"VK_IMAGE_COMPRESSION_FIXED_RATE_16BPC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_17BPC_BIT_EXT,				"VK_IMAGE_COMPRESSION_FIXED_RATE_17BPC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_18BPC_BIT_EXT,				"VK_IMAGE_COMPRESSION_FIXED_RATE_18BPC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_19BPC_BIT_EXT,				"VK_IMAGE_COMPRESSION_FIXED_RATE_19BPC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_20BPC_BIT_EXT,				"VK_IMAGE_COMPRESSION_FIXED_RATE_20BPC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_21BPC_BIT_EXT,				"VK_IMAGE_COMPRESSION_FIXED_RATE_21BPC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_22BPC_BIT_EXT,				"VK_IMAGE_COMPRESSION_FIXED_RATE_22BPC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_23BPC_BIT_EXT,				"VK_IMAGE_COMPRESSION_FIXED_RATE_23BPC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_24BPC_BIT_EXT,				"VK_IMAGE_COMPRESSION_FIXED_RATE_24BPC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_IMAGE_COMPRESSION_FIXED_RATE_FLAG_BITS_MAX_ENUM_EXT,	"VK_IMAGE_COMPRESSION_FIXED_RATE_FLAG_BITS_MAX_ENUM_EXT"),
+	};
+	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
 tcu::Format::Bitfield<32> getAccelerationStructureCreateFlagsKHRStr (VkAccelerationStructureCreateFlagsKHR value)
 {
 	static const tcu::Format::BitDesc s_desc[] =
@@ -4324,7 +4410,8 @@
 {
 	static const tcu::Format::BitDesc s_desc[] =
 	{
-		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CAPABILITY_DIRECT_8X8_INFERENCE_BIT_EXT,				"VK_VIDEO_ENCODE_H264_CAPABILITY_DIRECT_8X8_INFERENCE_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CAPABILITY_DIRECT_8X8_INFERENCE_ENABLED_BIT_EXT,		"VK_VIDEO_ENCODE_H264_CAPABILITY_DIRECT_8X8_INFERENCE_ENABLED_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CAPABILITY_DIRECT_8X8_INFERENCE_DISABLED_BIT_EXT,		"VK_VIDEO_ENCODE_H264_CAPABILITY_DIRECT_8X8_INFERENCE_DISABLED_BIT_EXT"),
 		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CAPABILITY_SEPARATE_COLOUR_PLANE_BIT_EXT,				"VK_VIDEO_ENCODE_H264_CAPABILITY_SEPARATE_COLOUR_PLANE_BIT_EXT"),
 		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CAPABILITY_QPPRIME_Y_ZERO_TRANSFORM_BYPASS_BIT_EXT,	"VK_VIDEO_ENCODE_H264_CAPABILITY_QPPRIME_Y_ZERO_TRANSFORM_BYPASS_BIT_EXT"),
 		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CAPABILITY_SCALING_LISTS_BIT_EXT,						"VK_VIDEO_ENCODE_H264_CAPABILITY_SCALING_LISTS_BIT_EXT"),
@@ -4347,6 +4434,7 @@
 		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CAPABILITY_SLICE_MB_COUNT_BIT_EXT,					"VK_VIDEO_ENCODE_H264_CAPABILITY_SLICE_MB_COUNT_BIT_EXT"),
 		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_EXT,				"VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_EXT"),
 		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_EXT,				"VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_EXT,				"VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_EXT"),
 		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CAPABILITY_FLAG_BITS_MAX_ENUM_EXT,					"VK_VIDEO_ENCODE_H264_CAPABILITY_FLAG_BITS_MAX_ENUM_EXT"),
 	};
 	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
@@ -9435,6 +9523,38 @@
 	return s;
 }
 
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR& value)
+{
+	s << "VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\trayTracingMaintenance1 = " << value.rayTracingMaintenance1 << '\n';
+	s << "\trayTracingPipelineTraceRaysIndirect2 = " << value.rayTracingPipelineTraceRaysIndirect2 << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkTraceRaysIndirectCommand2KHR& value)
+{
+	s << "VkTraceRaysIndirectCommand2KHR = {\n";
+	s << "\traygenShaderRecordAddress = " << value.raygenShaderRecordAddress << '\n';
+	s << "\traygenShaderRecordSize = " << value.raygenShaderRecordSize << '\n';
+	s << "\tmissShaderBindingTableAddress = " << value.missShaderBindingTableAddress << '\n';
+	s << "\tmissShaderBindingTableSize = " << value.missShaderBindingTableSize << '\n';
+	s << "\tmissShaderBindingTableStride = " << value.missShaderBindingTableStride << '\n';
+	s << "\thitShaderBindingTableAddress = " << value.hitShaderBindingTableAddress << '\n';
+	s << "\thitShaderBindingTableSize = " << value.hitShaderBindingTableSize << '\n';
+	s << "\thitShaderBindingTableStride = " << value.hitShaderBindingTableStride << '\n';
+	s << "\tcallableShaderBindingTableAddress = " << value.callableShaderBindingTableAddress << '\n';
+	s << "\tcallableShaderBindingTableSize = " << value.callableShaderBindingTableSize << '\n';
+	s << "\tcallableShaderBindingTableStride = " << value.callableShaderBindingTableStride << '\n';
+	s << "\twidth = " << value.width << '\n';
+	s << "\theight = " << value.height << '\n';
+	s << "\tdepth = " << value.depth << '\n';
+	s << '}';
+	return s;
+}
+
 std::ostream& operator<< (std::ostream& s, const VkDebugReportCallbackCreateInfoEXT& value)
 {
 	s << "VkDebugReportCallbackCreateInfoEXT = {\n";
@@ -11996,6 +12116,59 @@
 	return s;
 }
 
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceImageCompressionControlFeaturesEXT& value)
+{
+	s << "VkPhysicalDeviceImageCompressionControlFeaturesEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\timageCompressionControl = " << value.imageCompressionControl << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageCompressionControlEXT& value)
+{
+	s << "VkImageCompressionControlEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tflags = " << getImageCompressionFlagsEXTStr(value.flags) << '\n';
+	s << "\tcompressionControlPlaneCount = " << value.compressionControlPlaneCount << '\n';
+	s << "\tpFixedRateFlags = " << value.pFixedRateFlags << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSubresourceLayout2EXT& value)
+{
+	s << "VkSubresourceLayout2EXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tsubresourceLayout = " << value.subresourceLayout << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageSubresource2EXT& value)
+{
+	s << "VkImageSubresource2EXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\timageSubresource = " << value.imageSubresource << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageCompressionPropertiesEXT& value)
+{
+	s << "VkImageCompressionPropertiesEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\timageCompressionFlags = " << getImageCompressionFlagsEXTStr(value.imageCompressionFlags) << '\n';
+	s << "\timageCompressionFixedRateFlags = " << getImageCompressionFixedRateFlagsEXTStr(value.imageCompressionFixedRateFlags) << '\n';
+	s << '}';
+	return s;
+}
+
 std::ostream& operator<< (std::ostream& s, const VkPhysicalDevice4444FormatsFeaturesEXT& value)
 {
 	s << "VkPhysicalDevice4444FormatsFeaturesEXT = {\n";
@@ -12203,6 +12376,26 @@
 	return s;
 }
 
+std::ostream& operator<< (std::ostream& s, const VkPipelinePropertiesIdentifierEXT& value)
+{
+	s << "VkPipelinePropertiesIdentifierEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tpipelineIdentifier = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<uint8_t>(DE_ARRAY_BEGIN(value.pipelineIdentifier)), tcu::Format::HexIterator<uint8_t>(DE_ARRAY_END(value.pipelineIdentifier))) << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDevicePipelinePropertiesFeaturesEXT& value)
+{
+	s << "VkPhysicalDevicePipelinePropertiesFeaturesEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tpipelinePropertiesIdentifier = " << value.pipelinePropertiesIdentifier << '\n';
+	s << '}';
+	return s;
+}
+
 std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceExtendedDynamicState2FeaturesEXT& value)
 {
 	s << "VkPhysicalDeviceExtendedDynamicState2FeaturesEXT = {\n";
@@ -12423,6 +12616,58 @@
 	return s;
 }
 
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT& value)
+{
+	s << "VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\timageCompressionControlSwapchain = " << value.imageCompressionControlSwapchain << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT& value)
+{
+	s << "VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tsubpassMergeFeedback = " << value.subpassMergeFeedback << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkRenderPassCreationControlEXT& value)
+{
+	s << "VkRenderPassCreationControlEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tdisallowMerging = " << value.disallowMerging << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkRenderPassCreationFeedbackInfoEXT& value)
+{
+	s << "VkRenderPassCreationFeedbackInfoEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tpostMergeSubpassCount = " << value.postMergeSubpassCount << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkRenderPassSubpassFeedbackInfoEXT& value)
+{
+	s << "VkRenderPassSubpassFeedbackInfoEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tsubpassMergeStatus = " << value.subpassMergeStatus << '\n';
+	s << "\tdescription = " << (const char*)value.description << '\n';
+	s << "\tpostMergeIndex = " << value.postMergeIndex << '\n';
+	s << '}';
+	return s;
+}
+
 std::ostream& operator<< (std::ostream& s, const VkDeviceOrHostAddressKHR& value)
 {
 	s << "VkDeviceOrHostAddressKHR = {\n";
@@ -13857,7 +14102,6 @@
 	s << "\tbit_depth_luma_minus8 = " << value.bit_depth_luma_minus8 << '\n';
 	s << "\tbit_depth_chroma_minus8 = " << value.bit_depth_chroma_minus8 << '\n';
 	s << "\tlog2_max_pic_order_cnt_lsb_minus4 = " << value.log2_max_pic_order_cnt_lsb_minus4 << '\n';
-	s << "\tsps_max_dec_pic_buffering_minus1 = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<uint8_t>(DE_ARRAY_BEGIN(value.sps_max_dec_pic_buffering_minus1)), tcu::Format::HexIterator<uint8_t>(DE_ARRAY_END(value.sps_max_dec_pic_buffering_minus1))) << '\n';
 	s << "\tlog2_min_luma_coding_block_size_minus3 = " << value.log2_min_luma_coding_block_size_minus3 << '\n';
 	s << "\tlog2_diff_max_min_luma_coding_block_size = " << value.log2_diff_max_min_luma_coding_block_size << '\n';
 	s << "\tlog2_min_luma_transform_block_size_minus2 = " << value.log2_min_luma_transform_block_size_minus2 << '\n';
diff --git a/external/vulkancts/framework/vulkan/generated/vulkan/vkStructTypes.inl b/external/vulkancts/framework/vulkan/generated/vulkan/vkStructTypes.inl
index b717790..4aa683f 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkan/vkStructTypes.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkan/vkStructTypes.inl
@@ -3597,6 +3597,32 @@
 	VkBool32		workgroupMemoryExplicitLayout16BitAccess;
 };
 
+struct VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR
+{
+	VkStructureType	sType;
+	void*			pNext;
+	VkBool32		rayTracingMaintenance1;
+	VkBool32		rayTracingPipelineTraceRaysIndirect2;
+};
+
+struct VkTraceRaysIndirectCommand2KHR
+{
+	VkDeviceAddress	raygenShaderRecordAddress;
+	VkDeviceSize	raygenShaderRecordSize;
+	VkDeviceAddress	missShaderBindingTableAddress;
+	VkDeviceSize	missShaderBindingTableSize;
+	VkDeviceSize	missShaderBindingTableStride;
+	VkDeviceAddress	hitShaderBindingTableAddress;
+	VkDeviceSize	hitShaderBindingTableSize;
+	VkDeviceSize	hitShaderBindingTableStride;
+	VkDeviceAddress	callableShaderBindingTableAddress;
+	VkDeviceSize	callableShaderBindingTableSize;
+	VkDeviceSize	callableShaderBindingTableStride;
+	uint32_t		width;
+	uint32_t		height;
+	uint32_t		depth;
+};
+
 struct VkDebugReportCallbackCreateInfoEXT
 {
 	VkStructureType					sType;
@@ -5501,6 +5527,44 @@
 	VkSurfaceTransformFlagBitsKHR	transform;
 };
 
+struct VkPhysicalDeviceImageCompressionControlFeaturesEXT
+{
+	VkStructureType	sType;
+	void*			pNext;
+	VkBool32		imageCompressionControl;
+};
+
+struct VkImageCompressionControlEXT
+{
+	VkStructureType							sType;
+	const void*								pNext;
+	VkImageCompressionFlagsEXT				flags;
+	uint32_t								compressionControlPlaneCount;
+	VkImageCompressionFixedRateFlagsEXT*	pFixedRateFlags;
+};
+
+struct VkSubresourceLayout2EXT
+{
+	VkStructureType		sType;
+	void*				pNext;
+	VkSubresourceLayout	subresourceLayout;
+};
+
+struct VkImageSubresource2EXT
+{
+	VkStructureType		sType;
+	void*				pNext;
+	VkImageSubresource	imageSubresource;
+};
+
+struct VkImageCompressionPropertiesEXT
+{
+	VkStructureType						sType;
+	void*								pNext;
+	VkImageCompressionFlagsEXT			imageCompressionFlags;
+	VkImageCompressionFixedRateFlagsEXT	imageCompressionFixedRateFlags;
+};
+
 struct VkPhysicalDevice4444FormatsFeaturesEXT
 {
 	VkStructureType	sType;
@@ -5651,6 +5715,20 @@
 	VkBool32		externalMemoryRDMA;
 };
 
+struct VkPipelinePropertiesIdentifierEXT
+{
+	VkStructureType	sType;
+	void*			pNext;
+	uint8_t			pipelineIdentifier[VK_UUID_SIZE];
+};
+
+struct VkPhysicalDevicePipelinePropertiesFeaturesEXT
+{
+	VkStructureType	sType;
+	void*			pNext;
+	VkBool32		pipelinePropertiesIdentifier;
+};
+
 struct VkPhysicalDeviceExtendedDynamicState2FeaturesEXT
 {
 	VkStructureType	sType;
@@ -5808,6 +5886,43 @@
 	VkBool32		linearColorAttachment;
 };
 
+struct VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT
+{
+	VkStructureType	sType;
+	void*			pNext;
+	VkBool32		imageCompressionControlSwapchain;
+};
+
+struct VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT
+{
+	VkStructureType	sType;
+	void*			pNext;
+	VkBool32		subpassMergeFeedback;
+};
+
+struct VkRenderPassCreationControlEXT
+{
+	VkStructureType	sType;
+	const void*		pNext;
+	VkBool32		disallowMerging;
+};
+
+struct VkRenderPassCreationFeedbackInfoEXT
+{
+	VkStructureType	sType;
+	const void*		pNext;
+	uint32_t		postMergeSubpassCount;
+};
+
+struct VkRenderPassSubpassFeedbackInfoEXT
+{
+	VkStructureType			sType;
+	const void*				pNext;
+	VkSubpassMergeStatusEXT	subpassMergeStatus;
+	char					description[VK_MAX_DESCRIPTION_SIZE];
+	uint32_t				postMergeIndex;
+};
+
 union VkDeviceOrHostAddressKHR
 {
 	VkDeviceAddress	deviceAddress;
@@ -6932,7 +7047,6 @@
 	uint8_t										bit_depth_luma_minus8;
 	uint8_t										bit_depth_chroma_minus8;
 	uint8_t										log2_max_pic_order_cnt_lsb_minus4;
-	uint8_t										sps_max_dec_pic_buffering_minus1[STD_VIDEO_H265_SPS_MAX_SUB_LAYERS];
 	uint8_t										log2_min_luma_coding_block_size_minus3;
 	uint8_t										log2_diff_max_min_luma_coding_block_size;
 	uint8_t										log2_min_luma_transform_block_size_minus2;
@@ -8216,6 +8330,8 @@
 
 typedef VkQueueFamilyGlobalPriorityPropertiesKHR VkQueueFamilyGlobalPriorityPropertiesEXT;
 
+typedef VkPipelineInfoKHR VkPipelineInfoEXT;
+
 typedef VkTransformMatrixKHR VkTransformMatrixNV;
 
 typedef VkAabbPositionsKHR VkAabbPositionsNV;
diff --git a/external/vulkancts/framework/vulkan/generated/vulkan/vkTypeUtil.inl b/external/vulkancts/framework/vulkan/generated/vulkan/vkTypeUtil.inl
index 5d03a8f..e6718fc 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkan/vkTypeUtil.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkan/vkTypeUtil.inl
@@ -442,6 +442,26 @@
 	return res;
 }
 
+inline VkTraceRaysIndirectCommand2KHR makeTraceRaysIndirectCommand2KHR (VkDeviceAddress raygenShaderRecordAddress, VkDeviceSize raygenShaderRecordSize, VkDeviceAddress missShaderBindingTableAddress, VkDeviceSize missShaderBindingTableSize, VkDeviceSize missShaderBindingTableStride, VkDeviceAddress hitShaderBindingTableAddress, VkDeviceSize hitShaderBindingTableSize, VkDeviceSize hitShaderBindingTableStride, VkDeviceAddress callableShaderBindingTableAddress, VkDeviceSize callableShaderBindingTableSize, VkDeviceSize callableShaderBindingTableStride, uint32_t width, uint32_t height, uint32_t depth)
+{
+	VkTraceRaysIndirectCommand2KHR res;
+	res.raygenShaderRecordAddress			= raygenShaderRecordAddress;
+	res.raygenShaderRecordSize				= raygenShaderRecordSize;
+	res.missShaderBindingTableAddress		= missShaderBindingTableAddress;
+	res.missShaderBindingTableSize			= missShaderBindingTableSize;
+	res.missShaderBindingTableStride		= missShaderBindingTableStride;
+	res.hitShaderBindingTableAddress		= hitShaderBindingTableAddress;
+	res.hitShaderBindingTableSize			= hitShaderBindingTableSize;
+	res.hitShaderBindingTableStride			= hitShaderBindingTableStride;
+	res.callableShaderBindingTableAddress	= callableShaderBindingTableAddress;
+	res.callableShaderBindingTableSize		= callableShaderBindingTableSize;
+	res.callableShaderBindingTableStride	= callableShaderBindingTableStride;
+	res.width								= width;
+	res.height								= height;
+	res.depth								= depth;
+	return res;
+}
+
 inline VkShaderResourceUsageAMD makeShaderResourceUsageAMD (uint32_t numUsedVgprs, uint32_t numUsedSgprs, uint32_t ldsSizePerLocalWorkGroup, size_t ldsUsageSizeInBytes, size_t scratchMemUsageInBytes)
 {
 	VkShaderResourceUsageAMD res;
diff --git a/external/vulkancts/framework/vulkan/generated/vulkan/vkVirtualDeviceInterface.inl b/external/vulkancts/framework/vulkan/generated/vulkan/vkVirtualDeviceInterface.inl
index b407c86..7b7cf87 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkan/vkVirtualDeviceInterface.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkan/vkVirtualDeviceInterface.inl
@@ -221,6 +221,7 @@
 virtual VkResult			getPipelineExecutableInternalRepresentationsKHR	(VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, uint32_t* pInternalRepresentationCount, VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations) const = 0;
 virtual void				cmdWriteBufferMarker2AMD						(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkBuffer dstBuffer, VkDeviceSize dstOffset, uint32_t marker) const = 0;
 virtual void				getQueueCheckpointData2NV						(VkQueue queue, uint32_t* pCheckpointDataCount, VkCheckpointData2NV* pCheckpointData) const = 0;
+virtual void				cmdTraceRaysIndirect2KHR						(VkCommandBuffer commandBuffer, VkDeviceAddress indirectDeviceAddress) const = 0;
 virtual VkResult			debugMarkerSetObjectTagEXT						(VkDevice device, const VkDebugMarkerObjectTagInfoEXT* pTagInfo) const = 0;
 virtual VkResult			debugMarkerSetObjectNameEXT						(VkDevice device, const VkDebugMarkerObjectNameInfoEXT* pNameInfo) const = 0;
 virtual void				cmdDebugMarkerBeginEXT							(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo) const = 0;
@@ -311,11 +312,13 @@
 virtual VkResult			createIndirectCommandsLayoutNV					(VkDevice device, const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkIndirectCommandsLayoutNV* pIndirectCommandsLayout) const = 0;
 virtual void				destroyIndirectCommandsLayoutNV					(VkDevice device, VkIndirectCommandsLayoutNV indirectCommandsLayout, const VkAllocationCallbacks* pAllocator) const = 0;
 virtual void				cmdSetFragmentShadingRateEnumNV					(VkCommandBuffer commandBuffer, VkFragmentShadingRateNV shadingRate, const VkFragmentShadingRateCombinerOpKHR combinerOps[2]) const = 0;
+virtual void				getImageSubresourceLayout2EXT					(VkDevice device, VkImage image, const VkImageSubresource2EXT* pSubresource, VkSubresourceLayout2EXT* pLayout) const = 0;
 virtual void				cmdSetVertexInputEXT							(VkCommandBuffer commandBuffer, uint32_t vertexBindingDescriptionCount, const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, uint32_t vertexAttributeDescriptionCount, const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions) const = 0;
 virtual VkResult			getDeviceSubpassShadingMaxWorkgroupSizeHUAWEI	(VkDevice device, VkRenderPass renderpass, VkExtent2D* pMaxWorkgroupSize) const = 0;
 virtual void				cmdSubpassShadingHUAWEI							(VkCommandBuffer commandBuffer) const = 0;
 virtual void				cmdBindInvocationMaskHUAWEI						(VkCommandBuffer commandBuffer, VkImageView imageView, VkImageLayout imageLayout) const = 0;
 virtual VkResult			getMemoryRemoteAddressNV						(VkDevice device, const VkMemoryGetRemoteAddressInfoNV* pMemoryGetRemoteAddressInfo, VkRemoteAddressNV* pAddress) const = 0;
+virtual VkResult			getPipelinePropertiesEXT						(VkDevice device, const VkPipelineInfoEXT* pPipelineInfo, VkBaseOutStructure* pPipelineProperties) const = 0;
 virtual void				cmdSetPatchControlPointsEXT						(VkCommandBuffer commandBuffer, uint32_t patchControlPoints) const = 0;
 virtual void				cmdSetLogicOpEXT								(VkCommandBuffer commandBuffer, VkLogicOp logicOp) const = 0;
 virtual void				cmdSetColorWriteEnableEXT						(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkBool32* pColorWriteEnables) const = 0;
diff --git a/external/vulkancts/framework/vulkan/generated/vulkan/vkVulkan_c.inl b/external/vulkancts/framework/vulkan/generated/vulkan/vkVulkan_c.inl
index 81bb195..c9fa5cc 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkan/vkVulkan_c.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkan/vkVulkan_c.inl
@@ -505,7 +505,6 @@
 #define STD_VIDEO_H265_SCALING_LIST_32X32_NUM_ELEMENTS 64
 #define STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE 3
 #define STD_VIDEO_H265_PREDICTOR_PALETTE_COMP_ENTRIES_LIST_SIZE 128
-#define STD_VIDEO_H265_SPS_MAX_SUB_LAYERS 8
 #define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE 19
 #define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE 21
 #define STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE 6
@@ -728,7 +727,6 @@
     deUint8                                       bit_depth_luma_minus8;
     deUint8                                       bit_depth_chroma_minus8;
     deUint8                                       log2_max_pic_order_cnt_lsb_minus4;
-    deUint8                                       sps_max_dec_pic_buffering_minus1[STD_VIDEO_H265_SPS_MAX_SUB_LAYERS];
     deUint8                                       log2_min_luma_coding_block_size_minus3;
     deUint8                                       log2_diff_max_min_luma_coding_block_size;
     deUint8                                       log2_min_luma_transform_block_size_minus2;
@@ -956,10 +954,10 @@
 
 #define vulkan_video_codec_h265std_decode 1
 // Vulkan 0.9 provisional Vulkan video H.265 decode std specification version number
-#define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_API_VERSION_0_9_6 VK_MAKE_VIDEO_STD_VERSION(0, 9, 6) // Patch version should always be set to 0
+#define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_API_VERSION_0_9_7 VK_MAKE_VIDEO_STD_VERSION(0, 9, 7) // Patch version should always be set to 0
 
 #define STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE 8
-#define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_API_VERSION_0_9_6
+#define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_API_VERSION_0_9_7
 #define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h265_decode"
 typedef struct StdVideoDecodeH265PictureInfoFlags {
     deUint32    IrapPicFlag : 1;
@@ -1073,7 +1071,7 @@
 #define VK_API_VERSION_1_0 VK_MAKE_API_VERSION(0, 1, 0, 0)// Patch version should always be set to 0
 
 // Version of this file
-#define VK_HEADER_VERSION 211
+#define VK_HEADER_VERSION 213
 
 // Complete version of this file
 #define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 1, 3, VK_HEADER_VERSION)
@@ -1176,6 +1174,7 @@
     VK_THREAD_DONE_KHR = 1000268001,
     VK_OPERATION_DEFERRED_KHR = 1000268002,
     VK_OPERATION_NOT_DEFERRED_KHR = 1000268003,
+    VK_ERROR_COMPRESSION_EXHAUSTED_EXT = -1000338000,
     VK_ERROR_OUT_OF_POOL_MEMORY_KHR = VK_ERROR_OUT_OF_POOL_MEMORY,
     VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR = VK_ERROR_INVALID_EXTERNAL_HANDLE,
     VK_ERROR_FRAGMENTATION_EXT = VK_ERROR_FRAGMENTATION,
@@ -1889,6 +1888,11 @@
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT = 1000332001,
     VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM = 1000333000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR = 1000336000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT = 1000338000,
+    VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT = 1000338001,
+    VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_EXT = 1000338002,
+    VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_EXT = 1000338003,
+    VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT = 1000338004,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT = 1000340000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM = 1000342000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT = 1000344000,
@@ -1923,11 +1927,14 @@
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI = 1000370000,
     VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV = 1000371000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV = 1000371001,
+    VK_STRUCTURE_TYPE_PIPELINE_PROPERTIES_IDENTIFIER_EXT = 1000372000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT = 1000372001,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT = 1000377000,
     VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX = 1000378000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT = 1000381000,
     VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT = 1000381001,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT = 1000382000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR = 1000386000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT = 1000391000,
     VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT = 1000391001,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT = 1000392000,
@@ -1943,6 +1950,11 @@
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM = 1000425001,
     VK_STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM = 1000425002,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV = 1000430000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT = 1000437000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT = 1000458000,
+    VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_CONTROL_EXT = 1000458001,
+    VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_FEEDBACK_INFO_EXT = 1000458002,
+    VK_STRUCTURE_TYPE_RENDER_PASS_SUBPASS_FEEDBACK_INFO_EXT = 1000458003,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES,
     VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,
@@ -2105,6 +2117,7 @@
     VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR = VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2,
     VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR = VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2,
     VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3,
+    VK_STRUCTURE_TYPE_PIPELINE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR,
     VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT = VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES,
@@ -2597,6 +2610,8 @@
     VK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR = 1000299000,
 #endif
     VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT = 1000382000,
+    VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR = 1000386000,
+    VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR = 1000386001,
     VK_QUERY_TYPE_MAX_ENUM = 0x7FFFFFFF
 } VkQueryType;
 
@@ -7357,6 +7372,7 @@
 static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV = 0x00100000ULL;
 static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI = 0x8000000000ULL;
 static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI = 0x10000000000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR = 0x10000000ULL;
 
 typedef VkFlags64 VkAccessFlags2;
 
@@ -7431,6 +7447,7 @@
 static const VkAccessFlagBits2 VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT = 0x01000000ULL;
 static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 0x00080000ULL;
 static const VkAccessFlagBits2 VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI = 0x8000000000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR = 0x10000000000ULL;
 
 
 typedef enum VkSubmitFlagBits {
@@ -10485,6 +10502,42 @@
 
 
 
+#define VK_KHR_ray_tracing_maintenance1 1
+#define VK_KHR_RAY_TRACING_MAINTENANCE_1_SPEC_VERSION 1
+#define VK_KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME "VK_KHR_ray_tracing_maintenance1"
+typedef struct VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           rayTracingMaintenance1;
+    VkBool32           rayTracingPipelineTraceRaysIndirect2;
+} VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR;
+
+typedef struct VkTraceRaysIndirectCommand2KHR {
+    VkDeviceAddress    raygenShaderRecordAddress;
+    VkDeviceSize       raygenShaderRecordSize;
+    VkDeviceAddress    missShaderBindingTableAddress;
+    VkDeviceSize       missShaderBindingTableSize;
+    VkDeviceSize       missShaderBindingTableStride;
+    VkDeviceAddress    hitShaderBindingTableAddress;
+    VkDeviceSize       hitShaderBindingTableSize;
+    VkDeviceSize       hitShaderBindingTableStride;
+    VkDeviceAddress    callableShaderBindingTableAddress;
+    VkDeviceSize       callableShaderBindingTableSize;
+    VkDeviceSize       callableShaderBindingTableStride;
+    deUint32           width;
+    deUint32           height;
+    deUint32           depth;
+} VkTraceRaysIndirectCommand2KHR;
+
+typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysIndirect2KHR)(VkCommandBuffer commandBuffer, VkDeviceAddress indirectDeviceAddress);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysIndirect2KHR(
+    VkCommandBuffer                             commandBuffer,
+    VkDeviceAddress                             indirectDeviceAddress);
+#endif
+
+
 #define VK_KHR_portability_enumeration 1
 #define VK_KHR_PORTABILITY_ENUMERATION_SPEC_VERSION 1
 #define VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME "VK_KHR_portability_enumeration"
@@ -14454,6 +14507,92 @@
 
 
 
+#define VK_EXT_image_compression_control 1
+#define VK_EXT_IMAGE_COMPRESSION_CONTROL_SPEC_VERSION 1
+#define VK_EXT_IMAGE_COMPRESSION_CONTROL_EXTENSION_NAME "VK_EXT_image_compression_control"
+
+typedef enum VkImageCompressionFlagBitsEXT {
+    VK_IMAGE_COMPRESSION_DEFAULT_EXT = 0,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT = 0x00000001,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT = 0x00000002,
+    VK_IMAGE_COMPRESSION_DISABLED_EXT = 0x00000004,
+    VK_IMAGE_COMPRESSION_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkImageCompressionFlagBitsEXT;
+typedef VkFlags VkImageCompressionFlagsEXT;
+
+typedef enum VkImageCompressionFixedRateFlagBitsEXT {
+    VK_IMAGE_COMPRESSION_FIXED_RATE_NONE_EXT = 0,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_1BPC_BIT_EXT = 0x00000001,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT = 0x00000002,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_3BPC_BIT_EXT = 0x00000004,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT = 0x00000008,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_5BPC_BIT_EXT = 0x00000010,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_6BPC_BIT_EXT = 0x00000020,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_7BPC_BIT_EXT = 0x00000040,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_8BPC_BIT_EXT = 0x00000080,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_9BPC_BIT_EXT = 0x00000100,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_10BPC_BIT_EXT = 0x00000200,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_11BPC_BIT_EXT = 0x00000400,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_12BPC_BIT_EXT = 0x00000800,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_13BPC_BIT_EXT = 0x00001000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_14BPC_BIT_EXT = 0x00002000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_15BPC_BIT_EXT = 0x00004000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_16BPC_BIT_EXT = 0x00008000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_17BPC_BIT_EXT = 0x00010000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_18BPC_BIT_EXT = 0x00020000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_19BPC_BIT_EXT = 0x00040000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_20BPC_BIT_EXT = 0x00080000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_21BPC_BIT_EXT = 0x00100000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_22BPC_BIT_EXT = 0x00200000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_23BPC_BIT_EXT = 0x00400000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_24BPC_BIT_EXT = 0x00800000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkImageCompressionFixedRateFlagBitsEXT;
+typedef VkFlags VkImageCompressionFixedRateFlagsEXT;
+typedef struct VkPhysicalDeviceImageCompressionControlFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           imageCompressionControl;
+} VkPhysicalDeviceImageCompressionControlFeaturesEXT;
+
+typedef struct VkImageCompressionControlEXT {
+    VkStructureType                         sType;
+    const void*                             pNext;
+    VkImageCompressionFlagsEXT              flags;
+    deUint32                                compressionControlPlaneCount;
+    VkImageCompressionFixedRateFlagsEXT*    pFixedRateFlags;
+} VkImageCompressionControlEXT;
+
+typedef struct VkSubresourceLayout2EXT {
+    VkStructureType        sType;
+    void*                  pNext;
+    VkSubresourceLayout    subresourceLayout;
+} VkSubresourceLayout2EXT;
+
+typedef struct VkImageSubresource2EXT {
+    VkStructureType       sType;
+    void*                 pNext;
+    VkImageSubresource    imageSubresource;
+} VkImageSubresource2EXT;
+
+typedef struct VkImageCompressionPropertiesEXT {
+    VkStructureType                        sType;
+    void*                                  pNext;
+    VkImageCompressionFlagsEXT             imageCompressionFlags;
+    VkImageCompressionFixedRateFlagsEXT    imageCompressionFixedRateFlags;
+} VkImageCompressionPropertiesEXT;
+
+typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout2EXT)(VkDevice device, VkImage image, const VkImageSubresource2EXT* pSubresource, VkSubresourceLayout2EXT* pLayout);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2EXT(
+    VkDevice                                    device,
+    VkImage                                     image,
+    const VkImageSubresource2EXT*               pSubresource,
+    VkSubresourceLayout2EXT*                    pLayout);
+#endif
+
+
 #define VK_EXT_4444_formats 1
 #define VK_EXT_4444_FORMATS_SPEC_VERSION  1
 #define VK_EXT_4444_FORMATS_EXTENSION_NAME "VK_EXT_4444_formats"
@@ -14697,6 +14836,33 @@
 #endif
 
 
+#define VK_EXT_pipeline_properties 1
+#define VK_EXT_PIPELINE_PROPERTIES_SPEC_VERSION 1
+#define VK_EXT_PIPELINE_PROPERTIES_EXTENSION_NAME "VK_EXT_pipeline_properties"
+typedef VkPipelineInfoKHR VkPipelineInfoEXT;
+
+typedef struct VkPipelinePropertiesIdentifierEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    deUint8            pipelineIdentifier[VK_UUID_SIZE];
+} VkPipelinePropertiesIdentifierEXT;
+
+typedef struct VkPhysicalDevicePipelinePropertiesFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           pipelinePropertiesIdentifier;
+} VkPhysicalDevicePipelinePropertiesFeaturesEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPipelinePropertiesEXT)(VkDevice device, const VkPipelineInfoEXT* pPipelineInfo, VkBaseOutStructure* pPipelineProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelinePropertiesEXT(
+    VkDevice                                    device,
+    const VkPipelineInfoEXT*                    pPipelineInfo,
+    VkBaseOutStructure*                         pPipelineProperties);
+#endif
+
+
 #define VK_EXT_extended_dynamic_state2 1
 #define VK_EXT_EXTENDED_DYNAMIC_STATE_2_SPEC_VERSION 1
 #define VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME "VK_EXT_extended_dynamic_state2"
@@ -14986,6 +15152,66 @@
 #define VK_GOOGLE_SURFACELESS_QUERY_EXTENSION_NAME "VK_GOOGLE_surfaceless_query"
 
 
+#define VK_EXT_image_compression_control_swapchain 1
+#define VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_SPEC_VERSION 1
+#define VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_EXTENSION_NAME "VK_EXT_image_compression_control_swapchain"
+typedef struct VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           imageCompressionControlSwapchain;
+} VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT;
+
+
+
+#define VK_EXT_subpass_merge_feedback 1
+#define VK_EXT_SUBPASS_MERGE_FEEDBACK_SPEC_VERSION 1
+#define VK_EXT_SUBPASS_MERGE_FEEDBACK_EXTENSION_NAME "VK_EXT_subpass_merge_feedback"
+
+typedef enum VkSubpassMergeStatusEXT {
+    VK_SUBPASS_MERGE_STATUS_MERGED_EXT = 0,
+    VK_SUBPASS_MERGE_STATUS_DISALLOWED_EXT = 1,
+    VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SIDE_EFFECTS_EXT = 2,
+    VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SAMPLES_MISMATCH_EXT = 3,
+    VK_SUBPASS_MERGE_STATUS_NOT_MERGED_VIEWS_MISMATCH_EXT = 4,
+    VK_SUBPASS_MERGE_STATUS_NOT_MERGED_ALIASING_EXT = 5,
+    VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPENDENCIES_EXT = 6,
+    VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INCOMPATIBLE_INPUT_ATTACHMENT_EXT = 7,
+    VK_SUBPASS_MERGE_STATUS_NOT_MERGED_TOO_MANY_ATTACHMENTS_EXT = 8,
+    VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INSUFFICIENT_STORAGE_EXT = 9,
+    VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPTH_STENCIL_COUNT_EXT = 10,
+    VK_SUBPASS_MERGE_STATUS_NOT_MERGED_RESOLVE_ATTACHMENT_REUSE_EXT = 11,
+    VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SINGLE_SUBPASS_EXT = 12,
+    VK_SUBPASS_MERGE_STATUS_NOT_MERGED_UNSPECIFIED_EXT = 13,
+    VK_SUBPASS_MERGE_STATUS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkSubpassMergeStatusEXT;
+typedef struct VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           subpassMergeFeedback;
+} VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT;
+
+typedef struct VkRenderPassCreationControlEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkBool32           disallowMerging;
+} VkRenderPassCreationControlEXT;
+
+typedef struct VkRenderPassCreationFeedbackInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    deUint32           postMergeSubpassCount;
+} VkRenderPassCreationFeedbackInfoEXT;
+
+typedef struct VkRenderPassSubpassFeedbackInfoEXT {
+    VkStructureType            sType;
+    const void*                pNext;
+    VkSubpassMergeStatusEXT    subpassMergeStatus;
+    char                       description[VK_MAX_DESCRIPTION_SIZE];
+    deUint32                   postMergeIndex;
+} VkRenderPassSubpassFeedbackInfoEXT;
+
+
+
 #define VK_KHR_acceleration_structure 1
 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkAccelerationStructureKHR)
 #define VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION 13
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceExtensions.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceExtensions.inl
index 17291c1..fde77c8 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceExtensions.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceExtensions.inl
@@ -51,6 +51,7 @@
 	"VK_KHR_present_wait",
 	"VK_KHR_push_descriptor",
 	"VK_KHR_ray_query",
+	"VK_KHR_ray_tracing_maintenance1",
 	"VK_KHR_ray_tracing_pipeline",
 	"VK_KHR_relaxed_block_layout",
 	"VK_KHR_sampler_mirror_clamp_to_edge",
diff --git a/external/vulkancts/framework/vulkan/vkRayTracingUtil.cpp b/external/vulkancts/framework/vulkan/vkRayTracingUtil.cpp
index f96ec96..7eeaf90 100644
--- a/external/vulkancts/framework/vulkan/vkRayTracingUtil.cpp
+++ b/external/vulkancts/framework/vulkan/vkRayTracingUtil.cpp
@@ -1757,9 +1757,7 @@
 														Allocator&				allocator)
 {
 	// Prevent a programmer from calling this method more than once.
-	if (m_createOnce) DE_ASSERT(0);
-
-	m_createOnce = true;
+	if (m_createOnce) DE_ASSERT(0); m_createOnce = true;
 	DE_ASSERT(m_structs.size() != 0);
 
 	auto createAccellerationStructureBuffer = [&](VkDeviceSize bufferSize) -> typename std::add_pointer<BufferWithMemory>::type
@@ -2784,7 +2782,7 @@
 	{
 		const deUint64& lookAddr	= addresses[i+1];
 		auto			end			= matches.end();
-		auto			match		= std::find_if(matches.begin(), end, [&](const std::pair<deUint64, deUint32>& item){ return item.first == lookAddr; });
+		auto			match		= std::find_if(matches.begin(), end, [&](const std::pair<deUint64, std::size_t>& item){ return item.first == lookAddr; });
 		if (match != end)
 		{
 			m_bottomLevelInstances .emplace_back(m_bottomLevelInstances[match->second]);
@@ -3491,6 +3489,22 @@
 								   indirectDeviceAddress);
 }
 
+static inline void cmdTraceRaysIndirect2KHR (const DeviceInterface&	vk,
+											VkCommandBuffer			commandBuffer,
+											VkDeviceAddress			indirectDeviceAddress )
+{
+	DE_ASSERT(indirectDeviceAddress != 0);
+
+	return vk.cmdTraceRaysIndirect2KHR(commandBuffer, indirectDeviceAddress);
+}
+
+void cmdTraceRaysIndirect2	(const DeviceInterface&	vk,
+							 VkCommandBuffer		commandBuffer,
+							 VkDeviceAddress		indirectDeviceAddress)
+{
+	return cmdTraceRaysIndirect2KHR(vk, commandBuffer, indirectDeviceAddress);
+}
+
 #else
 
 deUint32 rayTracingDefineAnything()
diff --git a/external/vulkancts/framework/vulkan/vkRayTracingUtil.hpp b/external/vulkancts/framework/vulkan/vkRayTracingUtil.hpp
index 958d0b7..3569d37 100644
--- a/external/vulkancts/framework/vulkan/vkRayTracingUtil.hpp
+++ b/external/vulkancts/framework/vulkan/vkRayTracingUtil.hpp
@@ -959,6 +959,11 @@
 							 const VkStridedDeviceAddressRegionKHR*	callableShaderBindingTableRegion,
 							 VkDeviceAddress						indirectDeviceAddress);
 
+void cmdTraceRaysIndirect2	(const DeviceInterface&					vk,
+							 VkCommandBuffer						commandBuffer,
+							 VkDeviceAddress						indirectDeviceAddress);
+
+
 #else
 
 deUint32 rayTracingDefineAnything();
diff --git a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingAccelerationStructuresTests.cpp b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingAccelerationStructuresTests.cpp
index b6738e6..24d9f9b 100644
--- a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingAccelerationStructuresTests.cpp
+++ b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingAccelerationStructuresTests.cpp
@@ -44,6 +44,8 @@
 #include "tcuImageCompare.hpp"
 #include "tcuFloat.hpp"
 
+#include <cmath>
+#include <cstddef>
 #include <set>
 #include <limits>
 
@@ -55,6 +57,7 @@
 {
 using namespace vk;
 using namespace vkt;
+using namespace tcu;
 
 static const VkFlags	ALL_RAY_TRACING_STAGES	= VK_SHADER_STAGE_RAYGEN_BIT_KHR
 												| VK_SHADER_STAGE_ANY_HIT_BIT_KHR
@@ -176,6 +179,8 @@
 	deUint32								workerThreadsCount;
 	EmptyAccelerationStructureCase			emptyASCase;
 	InstanceCustomIndexCase					instanceCustomIndexCase;
+	bool									useCullMask;
+	uint32_t								cullMask;
 };
 
 deUint32 getShaderGroupSize (const InstanceInterface&	vki,
@@ -538,7 +543,15 @@
 			if (((x + y) % 2) == 0)
 				continue;
 			const deUint32 instanceCustomIndex = ((testParams.instanceCustomIndexCase != InstanceCustomIndexCase::NONE) ? (INSTANCE_CUSTOM_INDEX_BASE + x + y) : 0u);
-			result->addInstance(bottomLevelAccelerationStructures[currentInstanceIndex++], identityMatrix3x4, instanceCustomIndex, 0xFFu, 0u, instanceFlags);
+
+			if (testParams.useCullMask)
+			{
+				result->addInstance(bottomLevelAccelerationStructures[currentInstanceIndex++], identityMatrix3x4, instanceCustomIndex, testParams.cullMask, 0u, instanceFlags);
+			}
+			else
+			{
+				result->addInstance(bottomLevelAccelerationStructures[currentInstanceIndex++], identityMatrix3x4, instanceCustomIndex, 0xFFu, 0u, instanceFlags);
+			}
 		}
 	}
 
@@ -587,26 +600,49 @@
 	missShaderBindingTable												= rayTracingPipeline->createShaderBindingTable(vkd, device, pipeline, allocator, shaderGroupHandleSize, shaderGroupBaseAlignment, 3, 1 );
 }
 
+deUint32 bitfieldReverse(deUint32 num)
+{
+	deUint32 reverse_num = 0;
+	deUint32 i;
+	for (i = 0; i < 32; i++)
+	{
+		if((num & (1 << i)))
+	reverse_num |= 1 << ((32 - 1) - i);
+	}
+	return reverse_num;
+}
+
 bool CheckerboardConfiguration::verifyImage(BufferWithMemory* resultBuffer, Context& context, TestParams& testParams)
 {
 	// Checkerboard configuration does not support empty geometry tests.
 	DE_ASSERT(testParams.emptyASCase == EmptyAccelerationStructureCase::NOT_EMPTY);
 
 	DE_UNREF(context);
-	const auto*						bufferPtr	= (deInt32*)resultBuffer->getAllocation().getHostPtr();
-	deUint32						pos			= 0;
-	deUint32						failures	= 0;
+	const auto*						bufferPtr		= (deInt32*)resultBuffer->getAllocation().getHostPtr();
+	deUint32						pos				= 0;
+	deUint32						failures		= 0;
 
 	// verify results - each test case should generate checkerboard pattern
 	for (deUint32 y = 0; y < testParams.height; ++y)
 	for (deUint32 x = 0; x < testParams.width; ++x)
 	{
 		// The hit value should match the shader code.
-		const deInt32 hitValue			= ((testParams.instanceCustomIndexCase != InstanceCustomIndexCase::NONE) ? static_cast<deInt32>(INSTANCE_CUSTOM_INDEX_BASE + x + y) : 2);
-		const deInt32 expectedResult	= ((x + y) % 2) ? hitValue : 1;
+		if (testParams.useCullMask)
+		{
+			const deInt32 hitValue			= testParams.cullMask & 0x000000FFu; // only 8 last bits are used by the cullMask
+			const deInt32 expectedResult	= ((x + y) % 2) ? hitValue : bitfieldReverse(testParams.cullMask &  0x000000FFu);
 
-		if (bufferPtr[pos] != expectedResult)
-			failures++;
+			if (bufferPtr[pos] != expectedResult)
+				failures++;
+		}
+		else
+		{
+			const deInt32 hitValue			= ((testParams.instanceCustomIndexCase != InstanceCustomIndexCase::NONE) ? static_cast<deInt32>(INSTANCE_CUSTOM_INDEX_BASE + x + y) : 2);
+			const deInt32 expectedResult	= ((x + y) % 2) ? hitValue : 1;
+
+			if (bufferPtr[pos] != expectedResult)
+				failures++;
+		}
 
 		++pos;
 	}
@@ -804,6 +840,21 @@
 	missShaderBindingTable												= rayTracingPipeline->createShaderBindingTable(vkd, device, pipeline, allocator, shaderGroupHandleSize, shaderGroupBaseAlignment, 2, 1 );
 }
 
+bool pointInTriangle2D(const tcu::Vec3& p, const tcu::Vec3& p0, const tcu::Vec3& p1, const tcu::Vec3& p2)
+{
+	float s = p0.y() * p2.x() - p0.x() * p2.y() + (p2.y() - p0.y()) * p.x() + (p0.x() - p2.x()) * p.y();
+	float t = p0.x() * p1.y() - p0.y() * p1.x() + (p0.y() - p1.y()) * p.x() + (p1.x() - p0.x()) * p.y();
+
+	if ((s < 0) != (t < 0))
+		return false;
+
+	float a = -p1.y() * p2.x() + p0.y() * (p2.x() - p1.x()) + p0.x() * (p1.y() - p2.y()) + p1.x() * p2.y();
+
+	return a < 0 ?
+		(s <= 0 && s + t >= a) :
+		(s >= 0 && s + t <= a);
+}
+
 bool SingleTriangleConfiguration::verifyImage(BufferWithMemory* resultBuffer, Context& context, TestParams& testParams)
 {
 	tcu::TextureFormat			imageFormat		= vk::mapVkFormat(getResultImageFormat());
@@ -928,6 +979,9 @@
 	if (m_data.buildType == VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR && accelerationStructureFeaturesKHR.accelerationStructureHostCommands == DE_FALSE)
 		TCU_THROW(NotSupportedError, "Requires VkPhysicalDeviceAccelerationStructureFeaturesKHR.accelerationStructureHostCommands");
 
+	if (m_data.useCullMask)
+		context.requireDeviceFunctionality("VK_KHR_ray_tracing_maintenance1");
+
 	// Check supported vertex format.
 	checkAccelerationStructureVertexBufferFormat(context.getInstanceInterface(), context.getPhysicalDevice(), m_data.vertexFormat);
 }
@@ -948,8 +1002,10 @@
 	default: DE_ASSERT(false); break;
 	}
 
+
 	const std::string				imageDeclaration	= "layout(r32i, set = 0, binding = 0) uniform iimage2D result;\n";
 	const std::string				storeCustomIndex	= "  imageStore(result, ivec2(gl_LaunchIDEXT.xy), ivec4(gl_InstanceCustomIndexEXT, 0, 0, 1));\n";
+	const std::string				storeCullMask		= "  imageStore(result, ivec2(gl_LaunchIDEXT.xy), ivec4(gl_CullMaskEXT, 0, 0, 1));\n";
 	const vk::ShaderBuildOptions	buildOptions		(programCollection.usedVulkanVersion, vk::SPIRV_VERSION_1_4, 0u, true);
 
 	{
@@ -972,7 +1028,7 @@
 			<< "  vec3  origin    = vec3(float(gl_LaunchIDEXT.x) + 0.5f, float(gl_LaunchIDEXT.y) + 0.5f, 0.5);\n"
 			<< "  vec3  direction = vec3(0.0,0.0,-1.0);\n"
 			<< "  hitValue        = ivec4(0,0,0,0);\n"
-			<< "  traceRayEXT(topLevelAS, " << ((m_data.cullFlags == InstanceCullFlags::NONE) ? "0" : "gl_RayFlagsCullBackFacingTrianglesEXT") << ", 0xFF, 0, 0, 0, origin, tmin, direction, tmax, 0);\n";
+			<< "  traceRayEXT(topLevelAS, " << ((m_data.cullFlags == InstanceCullFlags::NONE) ? "0, " : "gl_RayFlagsCullBackFacingTrianglesEXT, ") << m_data.cullMask << ", 0, 0, 0, origin, tmin, direction, tmax, 0);\n";
 
 		if (storeInRGen)
 			css << "  imageStore(result, ivec2(gl_LaunchIDEXT.xy), hitValue);\n";
@@ -987,6 +1043,7 @@
 		css
 			<< "#version 460 core\n"
 			<< "#extension GL_EXT_ray_tracing : require\n"
+			<< ((m_data.useCullMask) ? "#extension GL_EXT_ray_cull_mask : require\n" : "\n")
 			<< "layout(location = 0) rayPayloadInEXT ivec4 hitValue;\n";
 
 		if (storeInCHit)
@@ -998,7 +1055,16 @@
 			<< "  hitValue = ivec4(2,0,0,1);\n";
 
 		if (storeInCHit)
-			css << storeCustomIndex;
+		{
+			if (m_data.useCullMask)
+			{
+				css << storeCullMask;
+			}
+			else
+			{
+				css << storeCustomIndex;
+			}
+		}
 
 		css << "}\n";
 
@@ -1011,10 +1077,11 @@
 		css
 			<< "#version 460 core\n"
 			<< "#extension GL_EXT_ray_tracing : require\n"
+			<< ((m_data.useCullMask) ? "#extension GL_EXT_ray_cull_mask : require\n" : "\n")
 			<< imageDeclaration
 			<< "void main()\n"
 			<< "{\n"
-			<< storeCustomIndex
+			<< ((m_data.useCullMask) ? storeCullMask : storeCustomIndex)
 			<< "}\n";
 
 		programCollection.glslSources.add("ahit") << glu::AnyHitSource(updateRayTracingGLSL(css.str())) << buildOptions;
@@ -1025,6 +1092,7 @@
 		css
 			<< "#version 460 core\n"
 			<< "#extension GL_EXT_ray_tracing : require\n"
+			<< ((m_data.useCullMask) ? "#extension GL_EXT_ray_cull_mask : require\n" : "\n")
 			<< "hitAttributeEXT ivec4 hitAttribute;\n";
 
 		if (storeInISec)
@@ -1035,9 +1103,17 @@
 			<< "{\n"
 			<< "  hitAttribute = ivec4(0,0,0,0);\n"
 			<< "  reportIntersectionEXT(0.5f, 0);\n";
-
 		if (storeInISec)
-			css << storeCustomIndex;
+		{
+			if (m_data.useCullMask)
+			{
+				css << storeCullMask;
+			}
+			else
+			{
+				css << storeCustomIndex;
+			}
+		}
 
 		css << "}\n";
 
@@ -1049,6 +1125,7 @@
 		css
 			<< "#version 460 core\n"
 			<< "#extension GL_EXT_ray_tracing : require\n"
+			<< ((m_data.useCullMask) ? "#extension GL_EXT_ray_cull_mask : require\n" : "\n")
 			<< "layout(location = 0) rayPayloadInEXT ivec4 hitValue;\n";
 
 		if (!storeInRGen)
@@ -1058,9 +1135,17 @@
 			<< "void main()\n"
 			<< "{\n"
 			<< "  hitValue = ivec4(1,0,0,1);\n";
-
 		if (!storeInRGen)
-			css << "  imageStore(result, ivec2(gl_LaunchIDEXT.xy), hitValue);\n";
+		{
+			if (m_data.useCullMask)
+			{
+				css << "  imageStore(result, ivec2(gl_LaunchIDEXT.xy), ivec4(bitfieldReverse(uint(gl_CullMaskEXT)), 0, 0, 1)); \n";
+			}
+			else
+			{
+				css << "  imageStore(result, ivec2(gl_LaunchIDEXT.xy), hitValue);\n";
+			}
+		}
 
 		css << "}\n";
 
@@ -2779,7 +2864,7 @@
 				{ 0.0f, 0.0f, 1.0f, 0.0f },
 			}
 		};
-		tlas->addInstance(bottoms[i], transformMatrixKHR, 0, 0xFFu, 0u, getCullFlags((m_params->cullFlags)));
+		tlas->addInstance(bottoms[i], transformMatrixKHR, 0, m_params->cullMask, 0u, getCullFlags((m_params->cullFlags)));
 	}
 
 	tlas->createAndBuild(vk, device, cmdBuffer, allocator);
@@ -2890,6 +2975,1155 @@
 	return (matches == 0);
 }
 
+// note that these names should be auto-generated but they do not
+#ifndef VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME
+#define VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME "VK_KHR_acceleration_structure"
+#endif
+#ifndef VK_KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME
+#define VK_KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME "VK_KHR_ray_tracing_maintenance1"
+#endif
+
+template<class X, class... Y>
+inline de::SharedPtr<X> makeShared(Y&&... ctorArgs) {
+	return de::SharedPtr<X>(new X(std::forward<Y>(ctorArgs)...));
+}
+template<class X, class... Y>
+inline de::MovePtr<X> makeMovePtr(Y&&... ctorArgs) {
+	return de::MovePtr<X>(new X(std::forward<Y>(ctorArgs)...));
+}
+template<class X>
+inline de::SharedPtr<X> makeSharedFrom(const X& x) {
+	return makeShared<X>(x);
+}
+
+struct QueryPoolResultsParams
+{
+	enum class Type
+	{
+		Size,
+		Pointers
+	}									queryType;
+	VkAccelerationStructureBuildTypeKHR	buildType;
+	bool								inVkBuffer;
+	deUint32							blasCount;
+};
+
+typedef de::SharedPtr<const QueryPoolResultsParams> QueryPoolResultsParamsPtr;
+
+class QueryPoolResultsInstance : public TestInstance
+{
+public:
+	using TlasPtr = de::SharedPtr<TopLevelAccelerationStructure>;
+	using BlasPtr = de::SharedPtr<BottomLevelAccelerationStructure>;
+
+				QueryPoolResultsInstance	(Context&						context,
+											 QueryPoolResultsParamsPtr		params)
+					: TestInstance	(context)
+					, m_params		(params) {}
+	auto		prepareBottomAccStructures	(const DeviceInterface&			vk,
+											 VkDevice						device,
+											 Allocator&						allocator,
+											 VkCommandBuffer				cmdBuffer) ->std::vector<BlasPtr>;
+	TlasPtr		prepareTopAccStructure		(const DeviceInterface&			vk,
+											 VkDevice						device,
+											 Allocator&						allocator,
+											 VkCommandBuffer				cmdBuffer,
+											 const std::vector<BlasPtr>&	bottoms);
+protected:
+	const QueryPoolResultsParamsPtr	m_params;
+};
+
+class QueryPoolResultsSizeInstance : public QueryPoolResultsInstance
+{
+public:
+				QueryPoolResultsSizeInstance (Context& context, QueryPoolResultsParamsPtr params)
+					: QueryPoolResultsInstance(context, params) {}
+	TestStatus	iterate						  (void) override;
+};
+
+class QueryPoolResultsPointersInstance : public QueryPoolResultsInstance
+{
+public:
+				QueryPoolResultsPointersInstance (Context& context, QueryPoolResultsParamsPtr params)
+					: QueryPoolResultsInstance(context, params) {}
+
+	TestStatus	iterate							  (void) override;
+};
+
+class QueryPoolResultsCase : public TestCase
+{
+public:
+					QueryPoolResultsCase	(TestContext&				ctx,
+											 const char*				name,
+											 QueryPoolResultsParamsPtr	params)
+						: TestCase(ctx, name, std::string())
+						, m_params(params) {}
+	void			checkSupport			(Context&					context) const override;
+	TestInstance*	createInstance			(Context&					context) const override;
+
+	template<class T, class P = T(*)[1], class R = decltype(std::begin(*std::declval<P>()))>
+	static auto makeStdBeginEnd(void* p, deUint32 n) -> std::pair<R, R>
+	{
+		auto tmp = std::begin(*P(p));
+		auto begin = tmp;
+		std::advance(tmp, n);
+		return { begin, tmp };
+	}
+
+private:
+	const QueryPoolResultsParamsPtr	m_params;
+};
+
+TestInstance* QueryPoolResultsCase::createInstance (Context& context) const
+{
+	switch (m_params->queryType)
+	{
+		case QueryPoolResultsParams::Type::Size:		return new QueryPoolResultsSizeInstance(context, m_params);
+		case QueryPoolResultsParams::Type::Pointers:	return new QueryPoolResultsPointersInstance(context, m_params);
+	}
+	TCU_THROW(InternalError, "Unknown test type");
+	return nullptr;
+}
+
+void QueryPoolResultsCase::checkSupport (Context& context) const
+{
+	context.requireDeviceFunctionality(VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME);
+	context.requireDeviceFunctionality(VK_KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME);
+
+	const VkPhysicalDeviceAccelerationStructureFeaturesKHR&	accelerationStructureFeaturesKHR = context.getAccelerationStructureFeatures();
+	if (m_params->buildType == VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR && accelerationStructureFeaturesKHR.accelerationStructureHostCommands == DE_FALSE)
+		TCU_THROW(NotSupportedError, "Requires VkPhysicalDeviceAccelerationStructureFeaturesKHR.accelerationStructureHostCommands");
+
+	const VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR& maintenance1FeaturesKHR = context.getRayTracingMaintenance1Features();
+	if (maintenance1FeaturesKHR.rayTracingMaintenance1 == VK_FALSE)
+		TCU_THROW(NotSupportedError, "Requires VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR::rayTracingMaintenance1");
+}
+
+auto QueryPoolResultsInstance::prepareBottomAccStructures (const DeviceInterface&	vk,
+														   VkDevice					device,
+														   Allocator&				allocator,
+														   VkCommandBuffer			cmdBuffer) -> std::vector<BlasPtr>
+{
+	std::vector<Vec3>		triangle		=
+	{
+		{ 0.0, 0.0, 0.0 },
+		{ 0.5, 0.0, 0.0 },
+		{ 0.0, 0.5, 0.0 },
+	};
+
+	const deUint32			triangleCount	= ((1 + m_params->blasCount) * m_params->blasCount) / 2;
+	const float				angle			= (4.0f * std::acos(0.0f)) / float(triangleCount);
+	auto					rotateCcwZ		= [&](const Vec3& p, const Vec3& center) -> tcu::Vec3
+	{
+		const float s = std::sin(angle);
+		const float c = std::cos(angle);
+		const auto  t = p - center;
+		return tcu::Vec3(c * t.x() - s * t.y(), s * t.x() + c * t.y(), t.z()) + center;
+	};
+	auto					nextGeometry	= [&]() -> void
+	{
+		for (auto& vertex : triangle)
+			vertex = rotateCcwZ(vertex, Vec3(0.0f, 0.0f, 0.0f));
+	};
+
+	std::vector<BlasPtr>	bottoms			(m_params->blasCount);
+
+	for (deUint32 b = 0; b < m_params->blasCount; ++b)
+	{
+		BlasPtr blas(makeBottomLevelAccelerationStructure().release());
+
+		blas->setBuildType(m_params->buildType);
+		blas->addGeometry(triangle, true, VK_GEOMETRY_OPAQUE_BIT_KHR);
+		for (deUint32 geom = b; geom < m_params->blasCount; ++geom)
+		{
+			nextGeometry();
+			blas->addGeometry(triangle, true, VK_GEOMETRY_OPAQUE_BIT_KHR);
+		}
+
+		blas->createAndBuild(vk, device, cmdBuffer, allocator);
+
+		bottoms[b] = blas;
+	}
+
+	return bottoms;
+}
+
+auto QueryPoolResultsInstance::prepareTopAccStructure (const DeviceInterface&		vk,
+													   VkDevice						device,
+													   Allocator&					allocator,
+													   VkCommandBuffer				cmdBuffer,
+													   const std::vector<BlasPtr>&	bottoms) -> TlasPtr
+{
+	const std::size_t	instanceCount = bottoms.size();
+
+	de::MovePtr<TopLevelAccelerationStructure>	tlas = makeTopLevelAccelerationStructure();
+	tlas->setBuildType(m_params->buildType);
+	tlas->setInstanceCount(instanceCount);
+
+	for (std::size_t i = 0; i < instanceCount; ++i)
+	{
+		tlas->addInstance(bottoms[i], identityMatrix3x4, 0, 0xFFu, 0u, VkGeometryInstanceFlagsKHR(0));
+	}
+
+	tlas->createAndBuild(vk, device, cmdBuffer, allocator);
+
+	return TlasPtr(tlas.release());
+}
+
+TestStatus QueryPoolResultsSizeInstance::iterate (void)
+{
+	const DeviceInterface&								vk				= m_context.getDeviceInterface();
+	const VkDevice										device			= m_context.getDevice();
+	const deUint32										familyIndex		= m_context.getUniversalQueueFamilyIndex();
+	const VkQueue										queue			= m_context.getUniversalQueue();
+	Allocator&											allocator		= m_context.getDefaultAllocator();
+
+	const Move<VkCommandPool>							cmdPool			= createCommandPool(vk, device, 0, familyIndex);
+	const Move<VkCommandBuffer>							cmdBuffer		= allocateCommandBuffer(vk, device, *cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+
+	beginCommandBuffer(vk, *cmdBuffer, 0);
+	const std::vector<BlasPtr>							bottoms			= prepareBottomAccStructures(vk, device, allocator, *cmdBuffer);
+	TlasPtr												tlas			= prepareTopAccStructure(vk, device, allocator, *cmdBuffer, bottoms);
+	endCommandBuffer(vk, *cmdBuffer);
+	submitCommandsAndWait(vk, device, queue, *cmdBuffer);
+
+	const deUint32										queryCount		= m_params->blasCount + 1;
+	std::vector<VkAccelerationStructureKHR>				handles			(queryCount);
+	handles[0] = *tlas.get()->getPtr();
+	std::transform(bottoms.begin(), bottoms.end(), std::next(handles.begin()), [](const BlasPtr& blas){ return *blas.get()->getPtr(); });
+
+	Move<VkQueryPool>									queryPoolSize	= makeQueryPool(vk, device, VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR, queryCount);
+	Move<VkQueryPool>									queryPoolSerial	= makeQueryPool(vk, device, VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR, queryCount);
+
+	de::MovePtr<BufferWithMemory>						buffer;
+	std::vector<VkDeviceSize>							sizeSizes		(queryCount);
+	std::vector<VkDeviceSize>							serialSizes		(queryCount);
+
+	if (m_params->inVkBuffer)
+	{
+		const auto vci = makeBufferCreateInfo(2 * queryCount * sizeof(VkDeviceSize), VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+		buffer = makeMovePtr<BufferWithMemory>(vk, device, allocator, vci, MemoryRequirement::Coherent | MemoryRequirement::HostVisible);
+	}
+
+	if (m_params->buildType == VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR)
+	{
+		beginCommandBuffer(vk, *cmdBuffer, 0);
+		vk.cmdResetQueryPool(*cmdBuffer, *queryPoolSize, 0, queryCount);
+		vk.cmdResetQueryPool(*cmdBuffer, *queryPoolSerial, 0, queryCount);
+		vk.cmdWriteAccelerationStructuresPropertiesKHR(*cmdBuffer, queryCount, handles.data(), VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR, *queryPoolSize, 0);
+		vk.cmdWriteAccelerationStructuresPropertiesKHR(*cmdBuffer, queryCount, handles.data(), VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR, *queryPoolSerial, 0);
+		if (m_params->inVkBuffer)
+		{
+			vk.cmdCopyQueryPoolResults(*cmdBuffer, *queryPoolSize, 0, queryCount, **buffer, (0 * queryCount * sizeof(VkDeviceSize)),
+									   sizeof(VkDeviceSize), VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT);
+			vk.cmdCopyQueryPoolResults(*cmdBuffer, *queryPoolSerial, 0, queryCount, **buffer, (1 * queryCount * sizeof(VkDeviceSize)),
+									   sizeof(VkDeviceSize), VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT);
+		}
+		endCommandBuffer(vk, *cmdBuffer);
+		submitCommandsAndWait(vk, device, queue, *cmdBuffer);
+
+		if (m_params->inVkBuffer)
+		{
+			Allocation&	alloc		= buffer->getAllocation();
+			invalidateMappedMemoryRange(vk, device, alloc.getMemory(), alloc.getOffset(), VK_WHOLE_SIZE);
+
+			deUint8*	ptrSize		= reinterpret_cast<deUint8*>(alloc.getHostPtr());
+			deUint8*	ptrSerial	= ptrSize + queryCount * sizeof(VkDeviceSize);
+
+			auto		rangeSize	= QueryPoolResultsCase::makeStdBeginEnd<VkDeviceSize>(ptrSize, queryCount);
+			auto		rangeSerial	= QueryPoolResultsCase::makeStdBeginEnd<VkDeviceSize>(ptrSerial, queryCount);
+
+			std::copy_n(rangeSize.first, queryCount, sizeSizes.begin());
+			std::copy_n(rangeSerial.first, queryCount, serialSizes.begin());
+		}
+		else
+		{
+			VK_CHECK(vk.getQueryPoolResults(device, *queryPoolSize, 0u, queryCount, queryCount * sizeof(VkDeviceSize),
+											sizeSizes.data(), sizeof(VkDeviceSize), VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT));
+			VK_CHECK(vk.getQueryPoolResults(device, *queryPoolSerial, 0u, queryCount, queryCount * sizeof(VkDeviceSize),
+											serialSizes.data(), sizeof(VkDeviceSize), VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT));
+		}
+	}
+	else
+	{
+		vk.writeAccelerationStructuresPropertiesKHR(device, queryCount, handles.data(), VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR,
+													queryCount * sizeof(VkDeviceSize), sizeSizes.data(), sizeof(VkDeviceSize));
+		vk.writeAccelerationStructuresPropertiesKHR(device, queryCount, handles.data(), VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR,
+													queryCount * sizeof(VkDeviceSize), serialSizes.data(), sizeof(VkDeviceSize));
+	}
+
+	// verification
+	bool pass = true;
+	const VkDeviceSize payloadOffset = offsetof(SerialStorage::AccelerationStructureHeader, handleArray);
+
+	for (deUint32 i = 0; pass && i < queryCount; ++i)
+	{
+		const VkDeviceSize	accSize		= sizeSizes[i];
+		const VkDeviceSize	serialSize	= serialSizes[i];
+		if (i)
+		{
+			pass = (payloadOffset + accSize) == serialSize;
+		}
+		else // process top accelleration structure size
+		{
+			const VkDeviceSize pointersSize = bottoms.size() * sizeof(VkDeviceSize);
+			pass = (payloadOffset + pointersSize + accSize) == serialSize;
+		}
+	}
+
+	return pass ? TestStatus::pass("") : TestStatus::fail("");
+}
+
+TestStatus QueryPoolResultsPointersInstance::iterate (void)
+{
+	const DeviceInterface&								vk				= m_context.getDeviceInterface();
+	const VkDevice										device			= m_context.getDevice();
+	const deUint32										familyIndex		= m_context.getUniversalQueueFamilyIndex();
+	const VkQueue										queue			= m_context.getUniversalQueue();
+	Allocator&											allocator		= m_context.getDefaultAllocator();
+
+	const Move<VkCommandPool>							cmdPool			= createCommandPool(vk, device, 0, familyIndex);
+	const Move<VkCommandBuffer>							cmdBuffer		= allocateCommandBuffer(vk, device, *cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+
+	beginCommandBuffer(vk, *cmdBuffer, 0);
+	const std::vector<BlasPtr>							bottoms			= prepareBottomAccStructures(vk, device, allocator, *cmdBuffer);
+	TlasPtr												tlas			= prepareTopAccStructure(vk, device, allocator, *cmdBuffer, bottoms);
+	endCommandBuffer(vk, *cmdBuffer);
+	submitCommandsAndWait(vk, device, queue, *cmdBuffer);
+
+	const deUint32										queryCount		= m_params->blasCount + 1;
+	std::vector<VkAccelerationStructureKHR>				handles			(queryCount);
+	handles[0] = *tlas.get()->getPtr();
+	std::transform(bottoms.begin(), bottoms.end(), std::next(handles.begin()), [](const BlasPtr& blas){ return *blas.get()->getPtr(); });
+
+	const VkQueryType									queryType		= VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR;
+	Move<VkQueryPool>									queryPoolCounts	= makeQueryPool(vk, device, queryType, queryCount);
+
+	de::MovePtr<BufferWithMemory>						buffer;
+	std::vector<VkDeviceSize>							pointerCounts	(queryCount, 123u);
+
+	if (m_params->inVkBuffer)
+	{
+		const auto vci = makeBufferCreateInfo(queryCount * sizeof(VkDeviceSize), VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+		buffer = makeMovePtr<BufferWithMemory>(vk, device, allocator, vci, MemoryRequirement::Coherent | MemoryRequirement::HostVisible);
+	}
+
+	if (m_params->buildType == VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR)
+	{
+		beginCommandBuffer(vk, *cmdBuffer, 0);
+		vk.cmdResetQueryPool(*cmdBuffer, *queryPoolCounts, 0, queryCount);
+		vk.cmdWriteAccelerationStructuresPropertiesKHR(*cmdBuffer, queryCount, handles.data(), queryType, *queryPoolCounts, 0);
+		if (m_params->inVkBuffer)
+		{
+			vk.cmdCopyQueryPoolResults(*cmdBuffer, *queryPoolCounts, 0, queryCount, **buffer, 0 /*offset*/,
+									   sizeof(VkDeviceSize), VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT);
+		}
+		endCommandBuffer(vk, *cmdBuffer);
+		submitCommandsAndWait(vk, device, queue, *cmdBuffer);
+
+		if (m_params->inVkBuffer)
+		{
+			Allocation&	alloc		= buffer->getAllocation();
+			invalidateMappedMemoryRange(vk, device, alloc.getMemory(), alloc.getOffset(), VK_WHOLE_SIZE);
+			auto		rangeCounts	= QueryPoolResultsCase::makeStdBeginEnd<VkDeviceSize>(alloc.getHostPtr(), queryCount);
+			std::copy_n(rangeCounts.first, queryCount, pointerCounts.begin());
+		}
+		else
+		{
+			VK_CHECK(vk.getQueryPoolResults(device, *queryPoolCounts, 0u, queryCount, queryCount * sizeof(VkDeviceSize),
+											pointerCounts.data(), sizeof(VkDeviceSize), VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT));
+		}
+	}
+	else
+	{
+		vk.writeAccelerationStructuresPropertiesKHR(device, queryCount, handles.data(), queryType,
+													queryCount * sizeof(VkDeviceSize), pointerCounts.data(), sizeof(VkDeviceSize));
+	}
+
+	// verification
+	const std::vector<VkDeviceSize>						inSizes			= tlas->getSerializingSizes(vk, device, queue, familyIndex);
+	SerialStorage										storage			(vk, device, allocator, m_params->buildType, inSizes[0]);
+
+	beginCommandBuffer(vk, *cmdBuffer, 0);
+	tlas->serialize(vk, device, *cmdBuffer, &storage);
+	endCommandBuffer(vk, *cmdBuffer);
+	submitCommandsAndWait(vk, device, queue, *cmdBuffer);
+
+	const SerialStorage::AccelerationStructureHeader*	header			= storage.getASHeader();
+
+	bool pass = (header->handleCount == pointerCounts[0]); // must be the same as bottoms.size()
+	for (deUint32 i = 1; pass && i < queryCount; ++i)
+	{
+		pass = (0 == pointerCounts[i]); // bottoms have no chidren
+	}
+
+	return pass ? TestStatus::pass("") : TestStatus::fail("");
+}
+
+#ifndef VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME
+#define VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME "VK_KHR_synchronization2"
+#endif
+#ifndef VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME
+#define VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME "VK_KHR_push_descriptor"
+#endif
+
+struct CopyWithinPipelineParams
+{
+	enum class Type
+	{
+		StageASCopyBit,
+		StageAllTransferBit,
+		AccessSBTReadBit
+	}									type;
+	deUint32							width;
+	deUint32							height;
+	VkAccelerationStructureBuildTypeKHR	build;
+};
+typedef de::SharedPtr<const CopyWithinPipelineParams> CopyWithinPipelineParamsPtr;
+
+class CopyWithinPipelineInstance : public TestInstance
+{
+public:
+	using TlasPtr = de::SharedPtr<TopLevelAccelerationStructure>;
+	using BlasPtr = de::SharedPtr<BottomLevelAccelerationStructure>;
+
+				CopyWithinPipelineInstance (Context& context, CopyWithinPipelineParamsPtr params)
+					: TestInstance	(context)
+					, vk			(context.getDeviceInterface())
+					, device		(context.getDevice())
+					, allocator		(context.getDefaultAllocator())
+					, rgenShader	(createShaderModule(vk, device, context.getBinaryCollection().get("rgen")))
+					, chitShader	(createShaderModule(vk, device, context.getBinaryCollection().get("chit")))
+					, missShader	(createShaderModule(vk, device, context.getBinaryCollection().get("miss")))
+					, m_params		(params)
+					, m_format		(VK_FORMAT_R32G32B32A32_SFLOAT) {}
+protected:
+	const DeviceInterface&		vk;
+	const VkDevice				device;
+	Allocator&					allocator;
+	Move<VkShaderModule>		rgenShader;
+	Move<VkShaderModule>		chitShader;
+	Move<VkShaderModule>		missShader;
+	CopyWithinPipelineParamsPtr	m_params;
+	VkFormat					m_format;
+};
+
+class CopyBlasInstance : public CopyWithinPipelineInstance
+{
+public:
+				CopyBlasInstance	(Context& context, CopyWithinPipelineParamsPtr params)
+					: CopyWithinPipelineInstance(context, params) {}
+	TestStatus	iterate				(void) override;
+	auto		getRefImage			(BlasPtr blas) const -> de::MovePtr<BufferWithMemory>;
+
+};
+
+class CopySBTInstance : public CopyWithinPipelineInstance
+{
+public:
+				CopySBTInstance		(Context&			context,
+									 CopyWithinPipelineParamsPtr params)
+					: CopyWithinPipelineInstance(context, params) {}
+	TestStatus	iterate			(void) override;
+	auto		getBufferSizeForSBT	(const deUint32&	groupCount,
+									 const deUint32&	shaderGroupHandleSize,
+									 const deUint32&	shaderGroupBaseAlignment) const -> VkDeviceSize;
+	auto		getBufferForSBT		(const deUint32&	groupCount,
+									 const deUint32&	shaderGroupHandleSize,
+									 const deUint32&	shaderGroupBaseAlignment) const -> de::MovePtr<BufferWithMemory>;
+};
+
+class PipelineStageASCase : public TestCase
+{
+public:
+					PipelineStageASCase	(TestContext&			ctx,
+										 const char*			name,
+										 CopyWithinPipelineParamsPtr	params)
+						: TestCase	(ctx, name, std::string())
+						, m_params	(params) {}
+	void			initPrograms	(SourceCollections&		programs) const override;
+	void			checkSupport	(Context&				context) const override;
+	TestInstance*	createInstance	(Context&				context) const override;
+
+private:
+	CopyWithinPipelineParamsPtr	m_params;
+};
+
+namespace u
+{
+namespace details
+{
+template<class X, class Y> struct BarrierMaker {
+	const X& m_x;
+	BarrierMaker (const X& x) : m_x(x) {}
+	uint32_t count () const { return 1; }
+	const X* pointer () const { return &m_x; }
+};
+template<class Y> struct BarrierMaker<std::false_type, Y> {
+	BarrierMaker (const std::false_type&) {}
+	uint32_t count () const { return 0; }
+	Y* pointer () const { return nullptr; }
+};
+template<class Z, uint32_t N> struct BarrierMaker<const Z[N], Z> {
+	const Z (&m_a)[N];
+	BarrierMaker (const Z (&a)[N]) : m_a(a) {}
+	uint32_t count () const { return N; }
+	const Z* pointer () const { return m_a; }
+};
+template<class Mem, class Buf, class Img, class Exp>
+struct Sel {
+	typedef typename std::remove_cv<Mem>::type	t_Mem;
+	typedef typename std::remove_cv<Buf>::type	t_Buf;
+	typedef typename std::remove_cv<Img>::type	t_Img;
+	typedef std::integral_constant<uint32_t, 0> index0;
+	typedef std::integral_constant<uint32_t, 1> index1;
+	typedef std::integral_constant<uint32_t, 2> index2;
+	typedef std::integral_constant<uint32_t, 3> index3;
+	using isMem = std::is_same<t_Mem, Exp>;
+	using isBuf = std::is_same<t_Buf, Exp>;
+	using isImg = std::is_same<t_Img, Exp>;
+	template<bool B, class T, class F> using choose = typename std::conditional<B,T,F>::type;
+	typedef choose<isMem::value, BarrierMaker<Mem, Exp>,
+			choose<isBuf::value, BarrierMaker<Buf, Exp>,
+			choose<isImg::value, BarrierMaker<Img, Exp>,
+								 BarrierMaker<std::false_type, Exp>>>> type;
+	typedef choose<isMem::value, index0,
+			choose<isBuf::value, index1,
+			choose<isImg::value, index2,
+								 index3>>> index;
+};
+} // details
+constexpr std::false_type NoneBarriers{};
+/**
+ * @brief	Helper function that makes and populates VkDependencyInfoKHR structure.
+ * @param	barriers1 - any of VkMemoryBarrier2KHR, VkBufferMemoryBarrier2KHR or VkImageMemoryBarrier2KHR (mandatory param)
+ * @param	barriers2 - any of VkMemoryBarrier2KHR, VkBufferMemoryBarrier2KHR or VkImageMemoryBarrier2KHR (optional param)
+ * @param	barriers2 - any of VkMemoryBarrier2KHR, VkBufferMemoryBarrier2KHR or VkImageMemoryBarrier2KHR (optional param)
+ * @note	The order of the parameters does not matter.
+ */
+template<class Barriers1, class Barriers2 = std::false_type, class Barriers3 = std::false_type>
+VkDependencyInfoKHR makeDependency (const Barriers1& barriers1, const Barriers2& barriers2 = NoneBarriers, const Barriers3& barriers3 = NoneBarriers)
+{
+	auto args = std::forward_as_tuple(barriers1, barriers2, barriers3, std::false_type());
+	const uint32_t memIndex = details::Sel<Barriers1, Barriers2, Barriers3, VkMemoryBarrier2KHR>::index::value;
+	const uint32_t bufIndex = details::Sel<Barriers1, Barriers2, Barriers3, VkBufferMemoryBarrier2KHR>::index::value;
+	const uint32_t imgIndex = details::Sel<Barriers1, Barriers2, Barriers3, VkImageMemoryBarrier2KHR>::index::value;
+	typedef typename details::Sel<Barriers1, Barriers2, Barriers3, VkMemoryBarrier2KHR>::type		memType;
+	typedef typename details::Sel<Barriers1, Barriers2, Barriers3, VkBufferMemoryBarrier2KHR>::type	bufType;
+	typedef typename details::Sel<Barriers1, Barriers2, Barriers3, VkImageMemoryBarrier2KHR>::type	imgType;
+	return
+	{
+		VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR,			// VkStructureType					sType;
+		nullptr,										// const void*						pNext;
+		VK_DEPENDENCY_BY_REGION_BIT,					// VkDependencyFlags				dependencyFlags;
+		memType(std::get<memIndex>(args)).count(),		// uint32_t							memoryBarrierCount;
+		memType(std::get<memIndex>(args)).pointer(),	// const VkMemoryBarrier2KHR*		pMemoryBarriers;
+		bufType(std::get<bufIndex>(args)).count(),		// uint32_t							bufferMemoryBarrierCount;
+		bufType(std::get<bufIndex>(args)).pointer(),	// const VkBufferMemoryBarrier2KHR*	pBufferMemoryBarriers;
+		imgType(std::get<imgIndex>(args)).count(),		// uint32_t							imageMemoryBarrierCount;
+		imgType(std::get<imgIndex>(args)).pointer()		// const VkImageMemoryBarrier2KHR*	pImageMemoryBarriers;
+	};
+}
+} // u
+
+TestInstance* PipelineStageASCase::createInstance (Context& context) const
+{
+	de::MovePtr<TestInstance> instance;
+	switch (m_params->type)
+	{
+	case CopyWithinPipelineParams::Type::StageASCopyBit:
+	case CopyWithinPipelineParams::Type::StageAllTransferBit:
+		instance = makeMovePtr<CopyBlasInstance>(context, m_params);
+		break;
+	case CopyWithinPipelineParams::Type::AccessSBTReadBit:
+		instance = makeMovePtr<CopySBTInstance>(context, m_params);
+		break;
+	}
+	return instance.release();
+}
+
+void PipelineStageASCase::initPrograms (SourceCollections& programs) const
+{
+	const vk::ShaderBuildOptions	buildOptions	(programs.usedVulkanVersion, vk::SPIRV_VERSION_1_4, 0u, true);
+	const char						endl			= '\n';
+
+	{
+		std::stringstream str;
+		str << "#version 460 core"																		<< endl
+			<< "#extension GL_EXT_ray_tracing : require"												<< endl
+			<< "layout(location = 0) rayPayloadEXT vec4 payload;"										<< endl
+			<< "layout(rgba32f, set = 0, binding = 0) uniform image2D result;"							<< endl
+			<< "layout(set = 0, binding = 1) uniform accelerationStructureEXT topLevelAS;"				<< endl
+			<< "void main()"																			<< endl
+			<< "{"																						<< endl
+			<< "  float rx           = (float(gl_LaunchIDEXT.x) + 0.5) / float(gl_LaunchSizeEXT.x);"	<< endl
+			<< "  float ry           = (float(gl_LaunchIDEXT.y) + 0.5) / float(gl_LaunchSizeEXT.y);"	<< endl
+			<< "  payload            = vec4(0.5, 0.5, 0.5, 1.0);"										<< endl
+			<< "  vec3  orig         = vec3(rx, ry, 1.0);"												<< endl
+			<< "  vec3  dir          = vec3(0.0, 0.0, -1.0);"											<< endl
+			<< "  traceRayEXT(topLevelAS, gl_RayFlagsNoneEXT, 0xFFu, 0, 0, 0, orig, 0.0, dir, 2.0, 0);"	<< endl
+			<< "  imageStore(result, ivec2(gl_LaunchIDEXT.xy), payload);"								<< endl
+			<< "}";
+		str.flush();
+		programs.glslSources.add("rgen") << glu::RaygenSource(str.str()) << buildOptions;
+	}
+
+	{
+		std::stringstream str;
+		str << "#version 460 core"									<< endl
+			<< "#extension GL_EXT_ray_tracing : require"			<< endl
+			<< "layout(location = 0) rayPayloadInEXT vec4 payload;"	<< endl
+			<< "void main()"										<< endl
+			<< "{"													<< endl
+			<< "  payload = vec4(0.0, 1.0, 0.0, 1.0);"				<< endl
+			<< "}";
+		str.flush();
+		programs.glslSources.add("chit") << glu::ClosestHitSource(str.str()) << buildOptions;
+	}
+
+	{
+		std::stringstream str;
+		str	<< "#version 460 core"									<< endl
+			<< "#extension GL_EXT_ray_tracing : require"			<< endl
+			<< "layout(location = 0) rayPayloadInEXT vec4 payload;"	<< endl
+			<< "void main()"										<< endl
+			<< "{"													<< endl
+			<< "  payload = vec4(1.0, 0.0, 0.0, 1.0);"				<< endl
+			<< "}";
+		str.flush();
+		programs.glslSources.add("miss") << glu::MissSource(str.str()) << buildOptions;
+	}
+}
+
+void PipelineStageASCase::checkSupport (Context& context) const
+{
+	context.requireInstanceFunctionality(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME);
+	context.requireDeviceFunctionality(VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME);
+	context.requireDeviceFunctionality(VK_KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME);
+	context.requireDeviceFunctionality(VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME);
+
+	const VkPhysicalDeviceAccelerationStructureFeaturesKHR&	accelerationStructureFeaturesKHR = context.getAccelerationStructureFeatures();
+	if (m_params->build == VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR && accelerationStructureFeaturesKHR.accelerationStructureHostCommands == DE_FALSE)
+		TCU_THROW(NotSupportedError, "Requires VkPhysicalDeviceAccelerationStructureFeaturesKHR::accelerationStructureHostCommands");
+
+	const VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR& maintenance1FeaturesKHR = context.getRayTracingMaintenance1Features();
+	if (maintenance1FeaturesKHR.rayTracingMaintenance1 == VK_FALSE)
+		TCU_THROW(NotSupportedError, "Requires VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR::rayTracingMaintenance1");
+
+	const VkPhysicalDeviceSynchronization2FeaturesKHR& synchronization2Features = context.getSynchronization2Features();
+	if (synchronization2Features.synchronization2 == VK_FALSE)
+		TCU_THROW(NotSupportedError, "Requires VkPhysicalDeviceSynchronization2FeaturesKHR::synchronization2");
+
+	if (m_params->type != CopyWithinPipelineParams::Type::AccessSBTReadBit)
+	{
+		context.requireDeviceFunctionality(VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME);
+		const VkPhysicalDevicePushDescriptorPropertiesKHR&		pushDescriptorProperties = context.getPushDescriptorProperties();
+		if (pushDescriptorProperties.maxPushDescriptors < 32)
+			TCU_THROW(NotSupportedError, "Requires VK_KHR_push_descriptor extension");
+	}
+}
+
+auto CopyBlasInstance::getRefImage (BlasPtr blas) const -> de::MovePtr<BufferWithMemory>
+{
+	const deUint32							queueFamilyIndex			= m_context.getUniversalQueueFamilyIndex();
+	const VkQueue							queue						= m_context.getUniversalQueue();
+
+	const de::MovePtr<RayTracingProperties>	rtProps						= makeRayTracingProperties(m_context.getInstanceInterface(), m_context.getPhysicalDevice());
+	const deUint32							shaderGroupHandleSize		= rtProps->getShaderGroupHandleSize();
+	const deUint32							shaderGroupBaseAlignment	= rtProps->getShaderGroupBaseAlignment();
+
+	const VkImageCreateInfo					imageCreateInfo				= makeImageCreateInfo(m_params->width, m_params->height, m_format);
+	const VkImageSubresourceRange			imageSubresourceRange		= makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0, 1u);
+	const de::MovePtr<ImageWithMemory>		image						= makeMovePtr<ImageWithMemory>(vk, device, allocator, imageCreateInfo, MemoryRequirement::Any);
+	const Move<VkImageView>					view						= makeImageView(vk, device, **image, VK_IMAGE_VIEW_TYPE_2D, m_format, imageSubresourceRange);
+
+	const deUint32							bufferSize					= (m_params->width * m_params->height * mapVkFormat(m_format).getPixelSize());
+	const VkBufferCreateInfo				bufferCreateInfo			= makeBufferCreateInfo(bufferSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+	de::MovePtr<BufferWithMemory>			buffer						= makeMovePtr<BufferWithMemory>(vk, device, allocator, bufferCreateInfo, MemoryRequirement::HostVisible);
+
+	const VkImageSubresourceLayers			imageSubresourceLayers		= makeImageSubresourceLayers(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 0u, 1u);
+	const VkBufferImageCopy					bufferCopyImageRegion		= makeBufferImageCopy(makeExtent3D(m_params->width, m_params->height, 1u), imageSubresourceLayers);
+
+	de::MovePtr<RayTracingPipeline>			rtPipeline					= makeMovePtr<RayTracingPipeline>();
+	rtPipeline->addShader(VK_SHADER_STAGE_RAYGEN_BIT_KHR,		*rgenShader, 0);
+	rtPipeline->addShader(VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR,	*chitShader, 1);
+	rtPipeline->addShader(VK_SHADER_STAGE_MISS_BIT_KHR,			*missShader, 2);
+
+	const Move<VkDescriptorPool>			descriptorPool				= DescriptorPoolBuilder()
+		.addType(VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 2)
+		.addType(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, 2)
+		.build(vk, device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u);
+	const Move<VkDescriptorSetLayout>		descriptorSetLayout			= DescriptorSetLayoutBuilder()
+		.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, ALL_RAY_TRACING_STAGES)
+		.addSingleBinding(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, ALL_RAY_TRACING_STAGES)
+		.build(vk, device);
+	const Move<VkDescriptorSet>				descriptorSet			= makeDescriptorSet(vk, device, *descriptorPool, *descriptorSetLayout);
+
+	const Move<VkPipelineLayout>			pipelineLayout				= makePipelineLayout(vk, device, *descriptorSetLayout);
+	Move<VkPipeline>						pipeline					= rtPipeline->createPipeline(vk, device, *pipelineLayout);
+
+	de::MovePtr<BufferWithMemory>			rgenSbt						= rtPipeline->createShaderBindingTable(vk, device, *pipeline, allocator,
+																											   shaderGroupHandleSize, shaderGroupBaseAlignment, 0, 1);
+	VkStridedDeviceAddressRegionKHR			rgenRegion					= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vk, device, **rgenSbt, 0),
+																											shaderGroupHandleSize, shaderGroupHandleSize);
+	de::MovePtr<BufferWithMemory>			chitSbt						= rtPipeline->createShaderBindingTable(vk, device, *pipeline, allocator,
+																											   shaderGroupHandleSize, shaderGroupBaseAlignment, 1, 1);
+	VkStridedDeviceAddressRegionKHR			chitRegion					= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vk, device, **chitSbt, 0),
+																											shaderGroupHandleSize, shaderGroupHandleSize);
+	de::MovePtr<BufferWithMemory>			missSbt						= rtPipeline->createShaderBindingTable(vk, device, *pipeline, allocator,
+																											   shaderGroupHandleSize, shaderGroupBaseAlignment, 2, 1);
+	VkStridedDeviceAddressRegionKHR			missRegion					= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vk, device, **missSbt, 0),
+																											shaderGroupHandleSize, shaderGroupHandleSize);
+	const VkStridedDeviceAddressRegionKHR	callRegion					= makeStridedDeviceAddressRegionKHR(VkDeviceAddress(0), 0, 0);
+
+	const VkClearValue						clearValue					= { { { 0.1f, 0.2f, 0.3f, 0.4f } } };
+
+	const VkImageMemoryBarrier2KHR			preClearImageImageBarrier	= makeImageMemoryBarrier2(VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR, 0,
+																								  VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR, VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR,
+																								  VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
+																								  **image, imageSubresourceRange, queueFamilyIndex, queueFamilyIndex);
+	const VkImageMemoryBarrier2KHR			postClearImageImageBarrier	= makeImageMemoryBarrier2(VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR, VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR,
+																								  VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR, VK_ACCESS_2_SHADER_READ_BIT_KHR,
+																								  VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_GENERAL,
+																								  **image, imageSubresourceRange, queueFamilyIndex, queueFamilyIndex);
+	const VkDependencyInfoKHR				preClearImageDependency		= u::makeDependency(preClearImageImageBarrier);
+	const VkDependencyInfoKHR				postClearImageDependency	= u::makeDependency(postClearImageImageBarrier);
+
+
+	const VkImageMemoryBarrier2KHR			postTraceRaysImageBarrier	= makeImageMemoryBarrier2(VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR, VK_ACCESS_2_SHADER_WRITE_BIT_KHR,
+																								  VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR, VK_ACCESS_2_TRANSFER_READ_BIT_KHR,
+																								  VK_IMAGE_LAYOUT_GENERAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+																								  **image, imageSubresourceRange, queueFamilyIndex, queueFamilyIndex);
+	const VkImageMemoryBarrier2KHR			postCopyImageImageBarrier	= makeImageMemoryBarrier2(VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR,	VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR,
+																								  VK_PIPELINE_STAGE_2_HOST_BIT_KHR, VK_ACCESS_2_HOST_READ_BIT_KHR,
+																								  VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
+																								  **image, imageSubresourceRange, queueFamilyIndex, queueFamilyIndex);
+	const VkDependencyInfoKHR				postTraceRaysDependency		= u::makeDependency(postTraceRaysImageBarrier);
+	const VkDependencyInfoKHR				postCopyImageDependency		= u::makeDependency(postCopyImageImageBarrier);
+
+	const Move<VkCommandPool>				cmdPool						= createCommandPool(vk, device, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, queueFamilyIndex);
+	const Move<VkCommandBuffer>				cmdBuffer					= allocateCommandBuffer(vk, device, *cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+
+	auto									tlas						= makeTopLevelAccelerationStructure();
+	tlas->setBuildType(m_params->build);
+	tlas->setInstanceCount(1);
+	tlas->addInstance(blas, identityMatrix3x4, 0, (~0u), 0, VkGeometryInstanceFlagsKHR(0));
+	beginCommandBuffer(vk, *cmdBuffer);
+		tlas->createAndBuild(vk, device, *cmdBuffer, allocator);
+	endCommandBuffer(vk, *cmdBuffer);
+	submitCommandsAndWait(vk, device, queue, *cmdBuffer);
+
+	const VkDescriptorImageInfo				descriptorImageInfo			= makeDescriptorImageInfo(VkSampler(), *view, VK_IMAGE_LAYOUT_GENERAL);
+	const VkWriteDescriptorSetAccelerationStructureKHR writeDescriptorTlas
+	{
+		VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,	//  VkStructureType						sType;
+		nullptr,															//  const void*							pNext;
+		1,																	//  deUint32							accelerationStructureCount;
+		tlas->getPtr()														//  const VkAccelerationStructureKHR*	pAccelerationStructures;
+	};
+
+	DescriptorSetUpdateBuilder()
+		.writeSingle(*descriptorSet, DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, &descriptorImageInfo)
+		.writeSingle(*descriptorSet, DescriptorSetUpdateBuilder::Location::binding(1u), VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, &writeDescriptorTlas)
+		.update(vk, device);
+
+	beginCommandBuffer(vk, *cmdBuffer);
+		vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, *pipeline);
+		vk.cmdBindDescriptorSets(*cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, *pipelineLayout, 0, 1, &descriptorSet.get(), 0, nullptr);
+		vk.cmdPipelineBarrier2(*cmdBuffer, &preClearImageDependency);
+		vk.cmdClearColorImage(*cmdBuffer, **image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &clearValue.color, 1, &imageSubresourceRange);
+		vk.cmdPipelineBarrier2(*cmdBuffer, &postClearImageDependency);
+		cmdTraceRays(vk,
+			*cmdBuffer,
+			&rgenRegion,	// rgen
+			&missRegion,	// miss
+			&chitRegion,	// hit
+			&callRegion,	// call
+			m_params->width, m_params->height, 1);
+		vk.cmdPipelineBarrier2(*cmdBuffer, &postTraceRaysDependency);
+		vk.cmdCopyImageToBuffer(*cmdBuffer, **image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, **buffer, 1u, &bufferCopyImageRegion);
+		vk.cmdPipelineBarrier2(*cmdBuffer, &postCopyImageDependency);
+	endCommandBuffer(vk, *cmdBuffer);
+	submitCommandsAndWait(vk, device, queue, *cmdBuffer);
+
+	invalidateMappedMemoryRange(vk, device, buffer->getAllocation().getMemory(), buffer->getAllocation().getOffset(), bufferSize);
+
+	return buffer;
+}
+
+TestStatus CopyBlasInstance::iterate (void)
+{
+	const deUint32							queueFamilyIndex			= m_context.getUniversalQueueFamilyIndex();
+	const VkQueue							queue						= m_context.getUniversalQueue();
+
+	const de::MovePtr<RayTracingProperties>	rtProps						= makeRayTracingProperties(m_context.getInstanceInterface(), m_context.getPhysicalDevice());
+	const deUint32							shaderGroupHandleSize		= rtProps->getShaderGroupHandleSize();
+	const deUint32							shaderGroupBaseAlignment	= rtProps->getShaderGroupBaseAlignment();
+
+	const VkImageCreateInfo					imageCreateInfo				= makeImageCreateInfo(m_params->width, m_params->height, m_format);
+	const VkImageSubresourceRange			imageSubresourceRange		= makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0, 1u);
+	const de::MovePtr<ImageWithMemory>		image						= makeMovePtr<ImageWithMemory>(vk, device, allocator, imageCreateInfo, MemoryRequirement::Any);
+	const Move<VkImageView>					view						= makeImageView(vk, device, **image, VK_IMAGE_VIEW_TYPE_2D, m_format, imageSubresourceRange);
+
+	const deUint32							bufferSize					= (m_params->width * m_params->height * mapVkFormat(m_format).getPixelSize());
+	const VkBufferCreateInfo				bufferCreateInfo			= makeBufferCreateInfo(bufferSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+	de::MovePtr<BufferWithMemory>			resultImageBuffer			= makeMovePtr<BufferWithMemory>(vk, device, allocator, bufferCreateInfo, MemoryRequirement::HostVisible);
+
+	const VkImageSubresourceLayers			imageSubresourceLayers		= makeImageSubresourceLayers(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 0u, 1u);
+	const VkBufferImageCopy					bufferCopyImageRegion		= makeBufferImageCopy(makeExtent3D(m_params->width, m_params->height, 1u), imageSubresourceLayers);
+
+	de::MovePtr<RayTracingPipeline>			rtPipeline					= makeMovePtr<RayTracingPipeline>();
+	rtPipeline->addShader(VK_SHADER_STAGE_RAYGEN_BIT_KHR,		*rgenShader, 0);
+	rtPipeline->addShader(VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR,	*chitShader, 1);
+	rtPipeline->addShader(VK_SHADER_STAGE_MISS_BIT_KHR,			*missShader, 2);
+
+	const Move<VkDescriptorSetLayout>		descriptorSetLayout			= DescriptorSetLayoutBuilder()
+		.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, ALL_RAY_TRACING_STAGES)
+		.addSingleBinding(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, ALL_RAY_TRACING_STAGES)
+		.build(vk, device, VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR);
+
+	const Move<VkPipelineLayout>			pipelineLayout				= makePipelineLayout(vk, device, *descriptorSetLayout);
+	Move<VkPipeline>						pipeline					= rtPipeline->createPipeline(vk, device, *pipelineLayout);
+
+	de::MovePtr<BufferWithMemory>			rgenSbt						= rtPipeline->createShaderBindingTable(vk, device, *pipeline, allocator,
+																											   shaderGroupHandleSize, shaderGroupBaseAlignment, 0, 1);
+	VkStridedDeviceAddressRegionKHR			rgenRegion					= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vk, device, **rgenSbt, 0),
+																											shaderGroupHandleSize, shaderGroupHandleSize);
+	de::MovePtr<BufferWithMemory>			chitSbt						= rtPipeline->createShaderBindingTable(vk, device, *pipeline, allocator,
+																											   shaderGroupHandleSize, shaderGroupBaseAlignment, 1, 1);
+	VkStridedDeviceAddressRegionKHR			chitRegion					= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vk, device, **chitSbt, 0),
+																											shaderGroupHandleSize, shaderGroupHandleSize);
+	de::MovePtr<BufferWithMemory>			missSbt						= rtPipeline->createShaderBindingTable(vk, device, *pipeline, allocator,
+																											   shaderGroupHandleSize, shaderGroupBaseAlignment, 2, 1);
+	VkStridedDeviceAddressRegionKHR			missRegion					= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vk, device, **missSbt, 0),
+																											shaderGroupHandleSize, shaderGroupHandleSize);
+	const VkStridedDeviceAddressRegionKHR	callRegion					= makeStridedDeviceAddressRegionKHR(VkDeviceAddress(0), 0, 0);
+
+	const VkClearValue						clearValue					= { { { 0.1f, 0.2f, 0.3f, 0.4f } } };
+
+	const VkImageMemoryBarrier2KHR			preClearImageImageBarrier	= makeImageMemoryBarrier2(VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR, 0,
+																								  VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR, VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR,
+																								  VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
+																								  **image, imageSubresourceRange, queueFamilyIndex, queueFamilyIndex);
+	const VkImageMemoryBarrier2KHR			postClearImageImageBarrier	= makeImageMemoryBarrier2(VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR, VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR,
+																								  VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR, VK_ACCESS_2_SHADER_READ_BIT_KHR,
+																								  VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_GENERAL,
+																								  **image, imageSubresourceRange, queueFamilyIndex, queueFamilyIndex);
+	const VkDependencyInfoKHR				preClearImageDependency		= u::makeDependency(preClearImageImageBarrier);
+	const VkDependencyInfoKHR				postClearImageDependency	= u::makeDependency(postClearImageImageBarrier);
+
+
+	const VkImageMemoryBarrier2KHR			postTraceRaysImageBarrier	= makeImageMemoryBarrier2(VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR, VK_ACCESS_2_SHADER_WRITE_BIT_KHR,
+																								  VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR, VK_ACCESS_2_TRANSFER_READ_BIT_KHR,
+																								  VK_IMAGE_LAYOUT_GENERAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+																								  **image, imageSubresourceRange, queueFamilyIndex, queueFamilyIndex);
+	const VkImageMemoryBarrier2KHR			postCopyImageImageBarrier	= makeImageMemoryBarrier2(VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR,	VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR,
+																								  VK_PIPELINE_STAGE_2_HOST_BIT_KHR, VK_ACCESS_2_HOST_READ_BIT_KHR,
+																								  VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
+																								  **image, imageSubresourceRange, queueFamilyIndex, queueFamilyIndex);
+	const VkDependencyInfoKHR				postTraceRaysDependency		= u::makeDependency(postTraceRaysImageBarrier);
+	const VkDependencyInfoKHR				postCopyImageDependency		= u::makeDependency(postCopyImageImageBarrier);
+	const VkPipelineStageFlags2KHR			srcStageMask				= m_params->type == CopyWithinPipelineParams::Type::StageASCopyBit
+																			? VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR
+																			: VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR;
+	const VkMemoryBarrier2KHR				copyBlasMemoryBarrier		= makeMemoryBarrier2(srcStageMask, VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR,
+																							 VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
+																							 VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR | VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR);
+	const VkDependencyInfoKHR				copyBlasDependency			= u::makeDependency(copyBlasMemoryBarrier);
+
+
+	const Move<VkCommandPool>				cmdPool						= createCommandPool(vk, device, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, queueFamilyIndex);
+	const Move<VkCommandBuffer>				cmdBuffer					= allocateCommandBuffer(vk, device, *cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+
+	std::vector<VkDeviceSize>				blasSize					(1);
+	BlasPtr									blas1						(makeBottomLevelAccelerationStructure().release());
+
+	// After this block the blas1 stays on device or host respectively to its build type.
+	// Once it is created it is asked for the serialization size that will be used for a
+	// creation of an empty blas2. Probably this size will be bigger than it is needed but
+	// one thing that is important is it must not be less.
+	{
+		const VkQueryType query = VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR;
+		Move<VkQueryPool> queryPoolSize = makeQueryPool(vk, device, query, 1);
+		beginCommandBuffer(vk, *cmdBuffer);
+			blas1->setBuildType(m_params->build);
+			blas1->setGeometryData(	{
+					{ 0.0, 0.0, 0.0 },
+					{ 1.0, 0.0, 0.0 },
+					{ 0.0, 1.0, 0.0 }}, true, VK_GEOMETRY_OPAQUE_BIT_KHR);
+			blas1->createAndBuild(vk, device, *cmdBuffer, allocator);
+			queryAccelerationStructureSize(vk, device, *cmdBuffer, { *blas1->getPtr() }, m_params->build, *queryPoolSize, query, 0u, blasSize);
+		endCommandBuffer(vk, *cmdBuffer);
+		submitCommandsAndWait(vk, device, queue, *cmdBuffer);
+		VK_CHECK(vk.getQueryPoolResults(device, *queryPoolSize, 0u, 1, sizeof(VkDeviceSize), blasSize.data(),
+										sizeof(VkDeviceSize), VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT));
+	}
+
+	de::MovePtr<BufferWithMemory>			referenceImageBuffer	= getRefImage(blas1);
+
+	// Create blas2 as empty struct
+	BlasPtr									blas2					(makeBottomLevelAccelerationStructure().release());
+	blas2->create(vk, device, allocator, blasSize[0]);
+
+	auto									tlas					= makeTopLevelAccelerationStructure();
+	tlas->setBuildType(m_params->build);
+	tlas->setInstanceCount(1);
+	tlas->addInstance(blas2, identityMatrix3x4, 0, (~0u), 0, VkGeometryInstanceFlagsKHR(0));
+
+	const VkCopyAccelerationStructureInfoKHR copyBlasInfo
+	{
+		VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR,		// VkStructureType						sType;
+		nullptr,													// const void*							pNext;
+		*blas1->getPtr(),											// VkAccelerationStructureKHR			src;
+		*blas2->getPtr(),											// VkAccelerationStructureKHR			dst;
+		VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR				// VkCopyAccelerationStructureModeKHR	mode;
+	};
+
+	beginCommandBuffer(vk, *cmdBuffer);
+		vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, *pipeline);
+
+		if (m_params->build == VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR)
+		{
+			vk.cmdCopyAccelerationStructureKHR(*cmdBuffer, &copyBlasInfo);
+			vk.cmdPipelineBarrier2(*cmdBuffer, &copyBlasDependency);
+		}
+		else VK_CHECK(vk.copyAccelerationStructureKHR(device, VkDeferredOperationKHR(0), &copyBlasInfo));
+
+		tlas->createAndBuild(vk, device, *cmdBuffer, allocator);
+
+		const VkDescriptorImageInfo				descriptorImageInfo			= makeDescriptorImageInfo(VkSampler(), *view, VK_IMAGE_LAYOUT_GENERAL);
+		const VkWriteDescriptorSetAccelerationStructureKHR writeDescriptorTlas
+		{
+			VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,	//  VkStructureType						sType;
+			nullptr,															//  const void*							pNext;
+			1,																	//  deUint32							accelerationStructureCount;
+			tlas->getPtr()														//  const VkAccelerationStructureKHR*	pAccelerationStructures;
+		};
+
+		DescriptorSetUpdateBuilder()
+			.writeSingle(VkDescriptorSet(), DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, &descriptorImageInfo)
+			.writeSingle(VkDescriptorSet(), DescriptorSetUpdateBuilder::Location::binding(1u), VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, &writeDescriptorTlas)
+			.updateWithPush(vk, *cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, *pipelineLayout, 0, 0, 2);
+
+		vk.cmdPipelineBarrier2(*cmdBuffer, &preClearImageDependency);
+		vk.cmdClearColorImage(*cmdBuffer, **image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &clearValue.color, 1, &imageSubresourceRange);
+		vk.cmdPipelineBarrier2(*cmdBuffer, &postClearImageDependency);
+
+		cmdTraceRays(vk,
+			*cmdBuffer,
+			&rgenRegion,	// rgen
+			&missRegion,	// miss
+			&chitRegion,	// hit
+			&callRegion,	// call
+			m_params->width, m_params->height, 1);
+
+		vk.cmdPipelineBarrier2(*cmdBuffer, &postTraceRaysDependency);
+		vk.cmdCopyImageToBuffer(*cmdBuffer, **image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, **resultImageBuffer, 1u, &bufferCopyImageRegion);
+		vk.cmdPipelineBarrier2(*cmdBuffer, &postCopyImageDependency);
+
+	endCommandBuffer(vk, *cmdBuffer);
+	submitCommandsAndWait(vk, device, queue, *cmdBuffer);
+
+	invalidateMappedMemoryRange(vk, device, resultImageBuffer->getAllocation().getMemory(), resultImageBuffer->getAllocation().getOffset(), bufferSize);
+
+	const void*	referenceImageData	= referenceImageBuffer->getAllocation().getHostPtr();
+	const void*	resultImageData		= resultImageBuffer->getAllocation().getHostPtr();
+
+	return (deMemCmp(referenceImageData, resultImageData, bufferSize) == 0) ? TestStatus::pass("") : TestStatus::fail("Reference and result images differ");
+}
+
+VkDeviceSize CopySBTInstance::getBufferSizeForSBT (const deUint32& groupCount, const deUint32&	shaderGroupHandleSize, const deUint32& shaderGroupBaseAlignment) const
+{
+	DE_UNREF(shaderGroupBaseAlignment);
+	return (groupCount * deAlign32(shaderGroupHandleSize, shaderGroupHandleSize));
+}
+
+de::MovePtr<BufferWithMemory> CopySBTInstance::getBufferForSBT (const deUint32& groupCount, const deUint32&	shaderGroupHandleSize, const deUint32& shaderGroupBaseAlignment) const
+{
+	const VkDeviceSize			sbtSize				= getBufferSizeForSBT(groupCount, shaderGroupHandleSize, shaderGroupBaseAlignment);
+	const VkBufferUsageFlags	sbtFlags			= VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT;
+	const VkBufferCreateInfo	sbtCreateInfo		= makeBufferCreateInfo(sbtSize, sbtFlags);
+	const MemoryRequirement		sbtMemRequirements	= MemoryRequirement::HostVisible | MemoryRequirement::Coherent | MemoryRequirement::DeviceAddress;
+
+	return makeMovePtr<BufferWithMemory>(vk, device, allocator, sbtCreateInfo, sbtMemRequirements);
+}
+
+TestStatus CopySBTInstance::iterate (void)
+{
+	const deUint32							queueFamilyIndex			= m_context.getUniversalQueueFamilyIndex();
+	const VkQueue							queue						= m_context.getUniversalQueue();
+
+	const de::MovePtr<RayTracingProperties>	rtProps						= makeRayTracingProperties(m_context.getInstanceInterface(), m_context.getPhysicalDevice());
+	const deUint32							shaderGroupHandleSize		= rtProps->getShaderGroupHandleSize();
+	const deUint32							shaderGroupBaseAlignment	= rtProps->getShaderGroupBaseAlignment();
+
+	const VkImageCreateInfo					imageCreateInfo				= makeImageCreateInfo(m_params->width, m_params->height, m_format);
+	const VkImageSubresourceRange			imageSubresourceRange		= makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0, 1u);
+	const de::MovePtr<ImageWithMemory>		image						= makeMovePtr<ImageWithMemory>(vk, device, allocator, imageCreateInfo, MemoryRequirement::Any);
+	const Move<VkImageView>					view						= makeImageView(vk, device, **image, VK_IMAGE_VIEW_TYPE_2D, m_format, imageSubresourceRange);
+
+	const deUint32							bufferSize					= (m_params->width * m_params->height * mapVkFormat(m_format).getPixelSize());
+	const VkBufferCreateInfo				bufferCreateInfo			= makeBufferCreateInfo(bufferSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+	de::MovePtr<BufferWithMemory>			referenceImageBuffer		= makeMovePtr<BufferWithMemory>(vk, device, allocator, bufferCreateInfo, MemoryRequirement::HostVisible);
+	de::MovePtr<BufferWithMemory>			resultImageBuffer			= makeMovePtr<BufferWithMemory>(vk, device, allocator, bufferCreateInfo, MemoryRequirement::HostVisible);
+
+	const VkImageSubresourceLayers			imageSubresourceLayers		= makeImageSubresourceLayers(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 0u, 1u);
+	const VkBufferImageCopy					bufferCopyImageRegion		= makeBufferImageCopy(makeExtent3D(m_params->width, m_params->height, 1u), imageSubresourceLayers);
+
+	de::MovePtr<RayTracingPipeline>			rtPipeline					= makeMovePtr<RayTracingPipeline>();
+	rtPipeline->addShader(VK_SHADER_STAGE_RAYGEN_BIT_KHR,		*rgenShader, 0);
+	rtPipeline->addShader(VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR,	*chitShader, 1);
+	rtPipeline->addShader(VK_SHADER_STAGE_MISS_BIT_KHR,			*missShader, 2);
+
+	const Move<VkDescriptorPool>			descriptorPool				= DescriptorPoolBuilder()
+		.addType(VK_DESCRIPTOR_TYPE_STORAGE_IMAGE)
+		.addType(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR)
+		.build(vk, device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u);
+	const Move<VkDescriptorSetLayout>		descriptorSetLayout			= DescriptorSetLayoutBuilder()
+		.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, ALL_RAY_TRACING_STAGES)
+		.addSingleBinding(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, ALL_RAY_TRACING_STAGES)
+		.build(vk, device);
+	const Move<VkDescriptorSet>				descriptorSet				= makeDescriptorSet(vk, device, *descriptorPool, *descriptorSetLayout);
+
+	const Move<VkPipelineLayout>			pipelineLayout				= makePipelineLayout(vk, device, *descriptorSetLayout);
+	Move<VkPipeline>						pipeline					= rtPipeline->createPipeline(vk, device, *pipelineLayout);
+
+	de::MovePtr<BufferWithMemory>			sourceRgenSbt				= rtPipeline->createShaderBindingTable(vk, device, *pipeline, allocator,
+																											   shaderGroupHandleSize, shaderGroupBaseAlignment, 0, 1,
+																											   VkBufferCreateFlags(0), VK_BUFFER_USAGE_TRANSFER_SRC_BIT);
+	VkStridedDeviceAddressRegionKHR			sourceRgenRegion			= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vk, device, **sourceRgenSbt, 0),
+																											shaderGroupHandleSize, shaderGroupHandleSize);
+	de::MovePtr<BufferWithMemory>			copyRgenSbt					= getBufferForSBT(1, shaderGroupHandleSize, shaderGroupBaseAlignment);
+	VkStridedDeviceAddressRegionKHR			copyRgenRegion				= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vk, device, **copyRgenSbt, 0),
+																											shaderGroupHandleSize, shaderGroupHandleSize);
+	de::MovePtr<BufferWithMemory>			chitSbt						= rtPipeline->createShaderBindingTable(vk, device, *pipeline, allocator,
+																											   shaderGroupHandleSize, shaderGroupBaseAlignment, 1, 1);
+	VkStridedDeviceAddressRegionKHR			chitRegion					= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vk, device, **chitSbt, 0),
+																											shaderGroupHandleSize, shaderGroupHandleSize);
+	de::MovePtr<BufferWithMemory>			missSbt						= rtPipeline->createShaderBindingTable(vk, device, *pipeline, allocator,
+																											   shaderGroupHandleSize, shaderGroupBaseAlignment, 2, 1);
+	VkStridedDeviceAddressRegionKHR			missRegion					= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vk, device, **missSbt, 0),
+																											shaderGroupHandleSize, shaderGroupHandleSize);
+	const VkStridedDeviceAddressRegionKHR	callRegion					= makeStridedDeviceAddressRegionKHR(VkDeviceAddress(0), 0, 0);
+
+	const VkClearValue						clearValue					= { { { 0.1f, 0.2f, 0.3f, 0.4f } } };
+
+	const VkImageMemoryBarrier2KHR			preClearImageImageBarrier	= makeImageMemoryBarrier2(VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR, 0,
+																								  VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR, VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR,
+																								  VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
+																								  **image, imageSubresourceRange, queueFamilyIndex, queueFamilyIndex);
+	const VkImageMemoryBarrier2KHR			postClearImageImageBarrier	= makeImageMemoryBarrier2(VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR, VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR,
+																								  VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR, VK_ACCESS_2_SHADER_READ_BIT_KHR,
+																								  VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_GENERAL,
+																								  **image, imageSubresourceRange, queueFamilyIndex, queueFamilyIndex);
+	const VkDependencyInfoKHR				preClearImageDependency		= u::makeDependency(preClearImageImageBarrier);
+	const VkDependencyInfoKHR				postClearImageDependency	= u::makeDependency(postClearImageImageBarrier);
+
+
+	const VkImageMemoryBarrier2KHR			postTraceRaysImageBarrier	= makeImageMemoryBarrier2(VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR, VK_ACCESS_2_SHADER_WRITE_BIT_KHR,
+																								  VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR, VK_ACCESS_2_TRANSFER_READ_BIT_KHR,
+																								  VK_IMAGE_LAYOUT_GENERAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+																								  **image, imageSubresourceRange, queueFamilyIndex, queueFamilyIndex);
+	const VkImageMemoryBarrier2KHR			postCopyImageImageBarrier	= makeImageMemoryBarrier2(VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR,	VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR,
+																								  VK_PIPELINE_STAGE_2_HOST_BIT_KHR, VK_ACCESS_2_HOST_READ_BIT_KHR,
+																								  VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
+																								  **image, imageSubresourceRange, queueFamilyIndex, queueFamilyIndex);
+	const VkDependencyInfoKHR				postTraceRaysDependency		= u::makeDependency(postTraceRaysImageBarrier);
+	const VkDependencyInfoKHR				postCopyImageDependency		= u::makeDependency(postCopyImageImageBarrier);
+
+	const Move<VkCommandPool>				cmdPool						= createCommandPool(vk, device, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, queueFamilyIndex);
+	const Move<VkCommandBuffer>				cmdBuffer					= allocateCommandBuffer(vk, device, *cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+
+	auto									tlas						= makeTopLevelAccelerationStructure();
+	BlasPtr									blas						(makeBottomLevelAccelerationStructure().release());
+	blas->setBuildType(m_params->build);
+	blas->setGeometryData(	{
+			{ 0.0, 0.0, 0.0 },
+			{ 1.0, 0.0, 0.0 },
+			{ 0.0, 1.0, 0.0 }}, true, VK_GEOMETRY_OPAQUE_BIT_KHR);
+	tlas->setBuildType(m_params->build);
+	tlas->setInstanceCount(1);
+	tlas->addInstance(blas, identityMatrix3x4, 0, (~0u), 0, VkGeometryInstanceFlagsKHR(0));
+	beginCommandBuffer(vk, *cmdBuffer);
+		blas->createAndBuild(vk, device, *cmdBuffer, allocator);
+		tlas->createAndBuild(vk, device, *cmdBuffer, allocator);
+	endCommandBuffer(vk, *cmdBuffer);
+	submitCommandsAndWait(vk, device, queue, *cmdBuffer);
+
+	const VkDescriptorImageInfo				descriptorImageInfo			= makeDescriptorImageInfo(VkSampler(), *view, VK_IMAGE_LAYOUT_GENERAL);
+	const VkWriteDescriptorSetAccelerationStructureKHR writeDescriptorTlas
+	{
+		VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,	//  VkStructureType						sType;
+		nullptr,															//  const void*							pNext;
+		1,																	//  deUint32							accelerationStructureCount;
+		tlas->getPtr()														//  const VkAccelerationStructureKHR*	pAccelerationStructures;
+	};
+
+	DescriptorSetUpdateBuilder()
+		.writeSingle(*descriptorSet, DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, &descriptorImageInfo)
+		.writeSingle(*descriptorSet, DescriptorSetUpdateBuilder::Location::binding(1u), VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, &writeDescriptorTlas)
+		.update(vk, device);
+
+	beginCommandBuffer(vk, *cmdBuffer);
+		vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, *pipeline);
+		vk.cmdBindDescriptorSets(*cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, *pipelineLayout, 0, 1, &descriptorSet.get(), 0, nullptr);
+		vk.cmdPipelineBarrier2(*cmdBuffer, &preClearImageDependency);
+		vk.cmdClearColorImage(*cmdBuffer, **image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &clearValue.color, 1, &imageSubresourceRange);
+		vk.cmdPipelineBarrier2(*cmdBuffer, &postClearImageDependency);
+		cmdTraceRays(vk,
+			*cmdBuffer,
+			&sourceRgenRegion,	// rgen
+			&missRegion,		// miss
+			&chitRegion,		// hit
+			&callRegion,		// call
+			m_params->width, m_params->height, 1);
+		vk.cmdPipelineBarrier2(*cmdBuffer, &postTraceRaysDependency);
+		vk.cmdCopyImageToBuffer(*cmdBuffer, **image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, **referenceImageBuffer, 1u, &bufferCopyImageRegion);
+		vk.cmdPipelineBarrier2(*cmdBuffer, &postCopyImageDependency);
+	endCommandBuffer(vk, *cmdBuffer);
+	submitCommandsAndWait(vk, device, queue, *cmdBuffer);
+
+
+	const VkBufferCopy bufferCopy
+	{
+		0,	// VkDeviceSize srcOffset;
+		0,	// VkDeviceSize srcOffset;
+		getBufferForSBT(1, shaderGroupHandleSize, shaderGroupBaseAlignment)
+	};
+	const VkMemoryBarrier2KHR				postCopySBTMemoryBarrier	= makeMemoryBarrier2(VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR,
+																							 VkAccessFlags2KHR(0),
+																							 VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR,
+																							 VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR);
+	const VkDependencyInfoKHR				postClearImgCopySBTDependency	= u::makeDependency(postCopySBTMemoryBarrier, postClearImageImageBarrier);
+
+	beginCommandBuffer(vk, *cmdBuffer);
+		vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, *pipeline);
+		vk.cmdBindDescriptorSets(*cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, *pipelineLayout, 0, 1, &descriptorSet.get(), 0, nullptr);
+		vk.cmdClearColorImage(*cmdBuffer, **image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &clearValue.color, 1, &imageSubresourceRange);
+		vk.cmdCopyBuffer(*cmdBuffer, **sourceRgenSbt, **copyRgenSbt, 1, &bufferCopy);
+		vk.cmdPipelineBarrier2(*cmdBuffer, &postClearImgCopySBTDependency);
+		cmdTraceRays(vk,
+			*cmdBuffer,
+			&copyRgenRegion,	// rgen
+			&missRegion,		// miss
+			&chitRegion,		// hit
+			&callRegion,		// call
+			m_params->width, m_params->height, 1);
+		vk.cmdPipelineBarrier2(*cmdBuffer, &postTraceRaysDependency);
+		vk.cmdCopyImageToBuffer(*cmdBuffer, **image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, **resultImageBuffer, 1u, &bufferCopyImageRegion);
+		vk.cmdPipelineBarrier2(*cmdBuffer, &postCopyImageDependency);
+	endCommandBuffer(vk, *cmdBuffer);
+	submitCommandsAndWait(vk, device, queue, *cmdBuffer);
+
+	invalidateMappedMemoryRange(vk, device, referenceImageBuffer->getAllocation().getMemory(), referenceImageBuffer->getAllocation().getOffset(), bufferSize);
+	invalidateMappedMemoryRange(vk, device, resultImageBuffer->getAllocation().getMemory(), resultImageBuffer->getAllocation().getOffset(), bufferSize);
+
+	const void* referenceImageDataPtr	= referenceImageBuffer->getAllocation().getHostPtr();
+	const void* resultImageDataPtr		= resultImageBuffer->getAllocation().getHostPtr();
+
+	return (deMemCmp(referenceImageDataPtr, resultImageDataPtr, bufferSize) == 0) ? TestStatus::pass("") : TestStatus::fail("");
+}
+
 }	// anonymous
 
 void addBasicBuildingTests(tcu::TestCaseGroup* group)
@@ -3039,6 +4273,8 @@
 											0u,
 											EmptyAccelerationStructureCase::NOT_EMPTY,
 											InstanceCustomIndexCase::NONE,
+											false,
+											0xFFu,
 										};
 										paddingGroup->addChild(new RayTracingASBasicTestCase(group->getTestContext(), testName.c_str(), "", testParams));
 									}
@@ -3150,6 +4386,8 @@
 						0u,
 						EmptyAccelerationStructureCase::NOT_EMPTY,
 						InstanceCustomIndexCase::NONE,
+						false,
+						0xFFu,
 					};
 					paddingGroup->addChild(new RayTracingASBasicTestCase(group->getTestContext(), indexFormats[indexFormatNdx].name, "", testParams));
 				}
@@ -3249,6 +4487,8 @@
 						workerThreads,
 						EmptyAccelerationStructureCase::NOT_EMPTY,
 						InstanceCustomIndexCase::NONE,
+						false,
+						0xFFu,
 					};
 					operationTargetGroup->addChild(new RayTracingASBasicTestCase(group->getTestContext(), bottomTestTypes[testTypeNdx].name, "", testParams));
 				}
@@ -3321,6 +4561,8 @@
 			0u,
 			EmptyAccelerationStructureCase::NOT_EMPTY,
 			InstanceCustomIndexCase::NONE,
+			false,
+			0xFFu,
 		};
 
 		group->addChild(new RayTracingASFuncArgTestCase(ctx, buildTypes[buildTypeNdx].name, "", testParams));
@@ -3410,6 +4652,8 @@
 						0u,
 						EmptyAccelerationStructureCase::NOT_EMPTY,
 						InstanceCustomIndexCase::NONE,
+						false,
+						0xFFu,
 					};
 					indexTypeGroup->addChild(new RayTracingASBasicTestCase(ctx, testName.c_str(), "", testParams));
 				}
@@ -3497,6 +4741,8 @@
 					0u,
 					emptyCases[emptyCaseIdx].emptyASCase,
 					InstanceCustomIndexCase::NONE,
+					false,
+					0xFFu,
 				};
 				indexTypeGroup->addChild(new RayTracingASBasicTestCase(ctx, emptyCases[emptyCaseIdx].name.c_str(), "", testParams));
 			}
@@ -3563,6 +4809,8 @@
 				0u,
 				EmptyAccelerationStructureCase::NOT_EMPTY,
 				customIndexCases[customIndexCaseIdx].customIndexCase,
+				false,
+				0xFFu,
 			};
 			buildTypeGroup->addChild(new RayTracingASBasicTestCase(ctx, customIndexCases[customIndexCaseIdx].name.c_str(), "", testParams));
 		}
@@ -3570,6 +4818,91 @@
 	}
 }
 
+
+void addInstanceRayCullMaskTests(tcu::TestCaseGroup* group)
+{
+	const struct
+	{
+		vk::VkAccelerationStructureBuildTypeKHR				buildType;
+		std::string											name;
+	} buildTypes[] =
+	{
+		{ VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR,	"cpu_built"	},
+		{ VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR,	"gpu_built"	},
+	};
+
+	const struct
+	{
+		InstanceCustomIndexCase						customIndexCase;
+		std::string									name;
+	} customIndexCases[] =
+	{
+		{ InstanceCustomIndexCase::ANY_HIT,			"ahit"				},
+		{ InstanceCustomIndexCase::CLOSEST_HIT,		"chit"				},
+		{ InstanceCustomIndexCase::INTERSECTION,	"isec"				},
+	};
+
+	const struct
+	{
+		uint32_t		cullMask;
+		std::string		name;
+	} cullMask[] =
+	{
+		{ 0x000000AAu,	"4_bits"},
+		{ 0x00000055u,	"4_bits_reverse"},
+		{ 0xAAAAAAAAu,	"16_bits"},
+		{ 0x55555555u,	"16_bits_reverse"},
+	};
+
+	auto& ctx = group->getTestContext();
+
+	for (int buildTypeIdx = 0; buildTypeIdx < DE_LENGTH_OF_ARRAY(buildTypes); ++buildTypeIdx)
+	{
+		de::MovePtr<tcu::TestCaseGroup> buildTypeGroup(new tcu::TestCaseGroup(ctx, buildTypes[buildTypeIdx].name.c_str(), ""));
+
+		for (int customIndexCaseIdx = 0; customIndexCaseIdx < DE_LENGTH_OF_ARRAY(customIndexCases); ++customIndexCaseIdx)
+		{
+			de::MovePtr<tcu::TestCaseGroup> customIndexCaseGroup(new tcu::TestCaseGroup(ctx, customIndexCases[customIndexCaseIdx].name.c_str(), ""));
+
+			for (int cullMaskIdx = 0; cullMaskIdx < DE_LENGTH_OF_ARRAY(cullMask); ++cullMaskIdx)
+			{
+				const auto& idxCase = customIndexCases[customIndexCaseIdx].customIndexCase;
+				const auto	bottomGeometryType = ((idxCase == InstanceCustomIndexCase::INTERSECTION) ? BTT_AABBS : BTT_TRIANGLES);
+
+				TestParams testParams
+				{
+					buildTypes[buildTypeIdx].buildType,
+					VK_FORMAT_R32G32B32_SFLOAT,
+					false,
+					VK_INDEX_TYPE_NONE_KHR,
+					bottomGeometryType,
+					InstanceCullFlags::NONE,
+					false,
+					false,
+					TTT_IDENTICAL_INSTANCES,
+					false,
+					false,
+					VkBuildAccelerationStructureFlagsKHR(0u),
+					OT_NONE,
+					OP_NONE,
+					RTAS_DEFAULT_SIZE,
+					RTAS_DEFAULT_SIZE,
+					de::SharedPtr<TestConfiguration>(new CheckerboardConfiguration()),
+					0u,
+					EmptyAccelerationStructureCase::NOT_EMPTY,
+					customIndexCases[customIndexCaseIdx].customIndexCase,
+					true,
+					cullMask[cullMaskIdx].cullMask,
+				};
+				customIndexCaseGroup->addChild(new RayTracingASBasicTestCase(ctx,  cullMask[cullMaskIdx].name.c_str(), "", testParams));
+			}
+			buildTypeGroup->addChild(customIndexCaseGroup.release());
+		}
+		group->addChild(buildTypeGroup.release());
+	}
+}
+
+
 void addGetDeviceAccelerationStructureCompabilityTests (tcu::TestCaseGroup* group)
 {
 	struct
@@ -3624,6 +4957,8 @@
 				0u,																	// workerThreadsCount
 				EmptyAccelerationStructureCase::NOT_EMPTY,							// emptyASCase
 				InstanceCustomIndexCase::NONE,										// instanceCustomIndexCase
+				false,																// useCullMask
+				0xFFu,																// cullMask
 			};
 			buildTypeGroup->addChild(new RayTracingDeviceASCompabilityKHRTestCase(ctx, targets[targetIdx].name.c_str(), de::SharedPtr<TestParams>(new TestParams(testParams))));
 		}
@@ -3686,6 +5021,8 @@
 				0u,																	// workerThreadsCount
 				EmptyAccelerationStructureCase::NOT_EMPTY,							// emptyASCase
 				InstanceCustomIndexCase::NONE,										// instanceCustomIndexCase
+				false,																// useCullMask
+				0xFFu,																// cullMask
 			};
 			buildTypeGroup->addChild(new RayTracingHeaderBottomAddressTestCase(ctx, instTypes[instTypeIdx].name.c_str(), de::SharedPtr<TestParams>(new TestParams(testParams))));
 		}
@@ -3693,6 +5030,87 @@
 	}
 }
 
+void addQueryPoolResultsTests (TestCaseGroup* group)
+{
+	std::pair<VkAccelerationStructureBuildTypeKHR, const char*>
+	const buildTypes[]
+	{
+		{ VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR,	"cpu"	},
+		{ VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR,	"gpu"	},
+	};
+
+	std::pair<bool, const char*>
+	const storeTypes[]
+	{
+		{ false,	"memory"	},
+		{ true,		"buffer"	}
+	};
+
+	std::pair<QueryPoolResultsParams::Type, const char*>
+	const queryTypes[]
+	{
+		{ QueryPoolResultsParams::Type::Size,		"size"			},
+		{ QueryPoolResultsParams::Type::Pointers,	"pointer_count"	}
+	};
+
+
+	auto& testContext = group->getTestContext();
+	for (const auto& buildType : buildTypes)
+	{
+		auto buildTypeGroup	= makeMovePtr<TestCaseGroup>(testContext, buildType.second, "");
+		for (const auto& storeType : storeTypes)
+		{
+			auto storeTypeGroup	= makeMovePtr<TestCaseGroup>(testContext, storeType.second, "");
+			for (const auto& queryType : queryTypes)
+			{
+				QueryPoolResultsParams	p;
+				p.buildType		= buildType.first;
+				p.inVkBuffer	= storeType.first;
+				p.queryType		= queryType.first;
+				p.blasCount		= 5;
+
+				storeTypeGroup->addChild(new QueryPoolResultsCase(testContext, queryType.second, makeSharedFrom(p)));
+			}
+			buildTypeGroup->addChild(storeTypeGroup.release());
+		}
+		group->addChild(buildTypeGroup.release());
+	}
+}
+
+void addCopyWithinPipelineTests (TestCaseGroup* group)
+{
+	std::pair<VkAccelerationStructureBuildTypeKHR, const char*>
+	const buildTypes[]
+	{
+		{ VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR,	"cpu"	},
+		{ VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR,	"gpu"	},
+	};
+	std::pair<CopyWithinPipelineParams::Type, const char*>
+	const testTypes[]
+	{
+		{ CopyWithinPipelineParams::Type::StageASCopyBit,		"stage_as_copy_bit"  },
+		{ CopyWithinPipelineParams::Type::StageAllTransferBit,	"stage_all_transfer" },
+		{ CopyWithinPipelineParams::Type::AccessSBTReadBit,		"access_sbt_read"	 }
+	};
+
+	auto& testContext = group->getTestContext();
+	for (const auto& buildType : buildTypes)
+	{
+		auto buildTypeGroup	= makeMovePtr<TestCaseGroup>(testContext, buildType.second, "");
+		for (const auto& testType : testTypes)
+		{
+			CopyWithinPipelineParams	p;
+			p.width		= 16;
+			p.height	= 16;
+			p.build		= buildType.first;
+			p.type		= testType.first;
+
+			buildTypeGroup->addChild(new PipelineStageASCase(testContext, testType.second, makeSharedFrom(p)));
+		}
+		group->addChild(buildTypeGroup.release());
+	}
+}
+
 tcu::TestCaseGroup*	createAccelerationStructuresTests(tcu::TestContext& testCtx)
 {
 	de::MovePtr<tcu::TestCaseGroup> group(new tcu::TestCaseGroup(testCtx, "acceleration_structures", "Acceleration structure tests"));
@@ -3703,11 +5121,14 @@
 	addTestGroup(group.get(), "host_threading", "Test host threading operations", addHostThreadingOperationTests);
 	addTestGroup(group.get(), "function_argument", "Test using AS as function argument using both pointers and bare values", addFuncArgTests);
 	addTestGroup(group.get(), "instance_triangle_culling", "Test building AS with counterclockwise triangles and/or disabling face culling", addInstanceTriangleCullingTests);
+	addTestGroup(group.get(), "ray_cull_mask", "Test for CullMaskKHR builtin as a part of VK_KHR_ray_tracing_maintenance1", addInstanceRayCullMaskTests);
 	addTestGroup(group.get(), "dynamic_indexing", "Exercise dynamic indexing of acceleration structures", addDynamicIndexingTests);
 	addTestGroup(group.get(), "empty", "Test building empty acceleration structures using different methods", addEmptyAccelerationStructureTests);
 	addTestGroup(group.get(), "instance_index", "Test using different values for the instance index and checking them in shaders", addInstanceIndexTests);
 	addTestGroup(group.get(), "device_compability_khr", "", addGetDeviceAccelerationStructureCompabilityTests);
 	addTestGroup(group.get(), "header_bottom_address", "", addUpdateHeaderBottomAddressTests);
+	addTestGroup(group.get(), "query_pool_results", "Test for a new VkQueryPool queries for VK_KHR_ray_tracing_maintenance1", addQueryPoolResultsTests);
+	addTestGroup(group.get(), "copy_within_pipeline", "Tests ACCELLERATION_STRUCTURE_COPY and ACCESS_2_SBT_READ with VK_KHR_ray_tracing_maintenance1", addCopyWithinPipelineTests);
 
 	return group.release();
 }
@@ -3715,4 +5136,3 @@
 }	// RayTracing
 
 }	// vkt
-
diff --git a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingTests.cpp b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingTests.cpp
index f87d8a3..62d31e0 100644
--- a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingTests.cpp
+++ b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingTests.cpp
@@ -65,6 +65,7 @@
 	group->addChild(createBuildTests(testCtx));
 	group->addChild(createCallableShadersTests(testCtx));
 	group->addChild(createTraceRaysTests(testCtx));
+	group->addChild(createTraceRaysMaintenance1Tests(testCtx));
 	group->addChild(createShaderBindingTableTests(testCtx));
 	group->addChild(createTraversalControlTests(testCtx));
 	group->addChild(createAccelerationStructuresTests(testCtx));
@@ -84,6 +85,7 @@
 	group->addChild(createBarycentricCoordinatesTests(testCtx));
 	group->addChild(createNonUniformArgsTests(testCtx));
 	group->addChild(createPipelineFlagsTests(testCtx));
+	group->addChild(createTraceRays2Tests(testCtx));
 
 	return group.release();
 }
diff --git a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingTraceRaysTests.cpp b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingTraceRaysTests.cpp
index 75743ee..89856c1 100644
--- a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingTraceRaysTests.cpp
+++ b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingTraceRaysTests.cpp
@@ -2,7 +2,7 @@
  * Vulkan Conformance Tests
  * ------------------------
  *
- * Copyright (c) 2020 The Khronos Group Inc.
+ * Copyright (c) 2020-2022 The Khronos Group Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -37,6 +37,9 @@
 
 #include "vkRayTracingUtil.hpp"
 
+#include <limits>
+#include <tuple>
+
 namespace vkt
 {
 namespace RayTracing
@@ -62,12 +65,23 @@
 	DIRECT			= 0,
 	INDIRECT_CPU	= 1,
 	INDIRECT_GPU	= 2,
+	INDIRECT2_GPU	= 3,
+	INDIRECT2_CPU	= 4,
 };
 
 struct TestParams
 {
 	TraceType						traceType;
 	VkTraceRaysIndirectCommandKHR	traceDimensions;	// Note: to be used for both direct and indirect variants.
+	bool							useKhrMaintenance1Semantics;
+	VkTraceRaysIndirectCommand2KHR	extendedTraceDimensions;
+};
+struct TestParams2
+{
+	TraceType		traceType;
+	VkExtent3D		traceDimensions;
+	bool			partialCopy;
+	VkQueueFlagBits	submitQueue;
 };
 
 deUint32 getShaderGroupSize (const InstanceInterface&	vki,
@@ -88,16 +102,28 @@
 	return rayTracingPropertiesKHR->getShaderGroupBaseAlignment();
 }
 
-bool isNullTrace (const VkTraceRaysIndirectCommandKHR& cmd)
+template<typename T>
+bool isNullTrace (const T cmd)
 {
 	return (cmd.width == 0u || cmd.height == 0u || cmd.depth == 0u);
 }
 
-VkExtent3D getImageExtent (const VkTraceRaysIndirectCommandKHR& cmd)
+template<typename T>
+VkExtent3D getImageExtent (const T cmd)
 {
 	return (isNullTrace(cmd) ? makeExtent3D(8u, 8u, 1u) : makeExtent3D(cmd.width, cmd.height, cmd.depth));
 }
 
+bool isNullExtent (const VkExtent3D& extent)
+{
+	return (extent.width == 0u || extent.height == 0u || extent.depth == 0u);
+}
+
+VkExtent3D getNonNullImageExtent (const VkExtent3D& extent)
+{
+	return (isNullExtent(extent) ? makeExtent3D(8u, 8u, 1u) : makeExtent3D(extent.width, extent.height, extent.depth));
+}
+
 VkImageCreateInfo makeImageCreateInfo (deUint32 width, deUint32 height, deUint32 depth, VkFormat format)
 {
 	const VkImageCreateInfo			imageCreateInfo			=
@@ -122,6 +148,70 @@
 	return imageCreateInfo;
 }
 
+std::tuple<bool, VkQueue, deUint32> getQueueFamilyIndexAtExact (const DeviceInterface&		vkd,
+																const InstanceInterface&	vki,
+																VkPhysicalDevice			physDevice,
+																VkDevice					device,
+																VkQueueFlagBits				bits,
+																deUint32					queueIndex = 0)
+{
+	bool		found				= false;
+	VkQueue		queue				= 0;
+	deUint32	queueFamilyCount	= 0;
+	deUint32	queueFamilyIndex	= std::numeric_limits<deUint32>::max();
+
+	vki.getPhysicalDeviceQueueFamilyProperties(physDevice, &queueFamilyCount, nullptr);
+
+	std::vector<VkQueueFamilyProperties> queueFamilies(queueFamilyCount);
+	vki.getPhysicalDeviceQueueFamilyProperties(physDevice, &queueFamilyCount, queueFamilies.data());
+
+	for (uint32_t index = 0; index < queueFamilyCount; ++index)
+	{
+		if ((queueFamilies[index].queueFlags & bits) == bits)
+		{
+			queueFamilyIndex = index;
+			break;
+		}
+	}
+
+	if (std::numeric_limits<deUint32>::max() != queueFamilyIndex)
+	{
+		found = true;
+		vkd.getDeviceQueue(device, queueFamilyIndex, queueIndex, &queue);
+	}
+
+	return { found, queue, queueFamilyIndex };
+}
+
+typedef std::vector<de::SharedPtr<BottomLevelAccelerationStructure>>	BlasVec;
+auto initTopAccelerationStructure (VkCommandBuffer		cmdBuffer,
+								   const BlasVec&		bottomLevelAccelerationStructures,
+								   Context&				context,
+								   const VkExtent3D&	imageExtent) -> de::MovePtr<TopLevelAccelerationStructure>
+{
+	const DeviceInterface&						vkd				= context.getDeviceInterface();
+	const VkDevice								device			= context.getDevice();
+	Allocator&									allocator		= context.getDefaultAllocator();
+	const deUint32								instanceCount	= imageExtent.depth * imageExtent.height * imageExtent.width / 2;
+
+	de::MovePtr<TopLevelAccelerationStructure>	result = makeTopLevelAccelerationStructure();
+	result->setInstanceCount(instanceCount);
+
+	deUint32 currentInstanceIndex = 0;
+
+	for (deUint32 z = 0; z < imageExtent.depth; ++z)
+	for (deUint32 y = 0; y < imageExtent.height; ++y)
+	for (deUint32 x = 0; x < imageExtent.width; ++x)
+	{
+		if (((x + y + z) % 2) == 0)
+			continue;
+		result->addInstance(bottomLevelAccelerationStructures[currentInstanceIndex++]);
+	}
+	result->createAndBuild(vkd, device, cmdBuffer, allocator);
+
+	return result;
+}
+
 class RayTracingTraceRaysIndirectTestCase : public TestCase
 {
 	public:
@@ -144,12 +234,11 @@
 
 protected:
 	std::vector<de::SharedPtr<BottomLevelAccelerationStructure>>	initBottomAccelerationStructures	(VkCommandBuffer												cmdBuffer);
-	de::MovePtr<TopLevelAccelerationStructure>						initTopAccelerationStructure		(VkCommandBuffer												cmdBuffer,
-																										 std::vector<de::SharedPtr<BottomLevelAccelerationStructure> >&	bottomLevelAccelerationStructures);
 	de::MovePtr<BufferWithMemory>									runTest								();
+
 private:
 	TestParams														m_data;
-	const VkExtent3D												m_imageExtent;
+	VkExtent3D														m_imageExtent;
 };
 
 
@@ -175,6 +264,16 @@
 	if (rayTracingPipelineFeaturesKHR.rayTracingPipelineTraceRaysIndirect == DE_FALSE)
 		TCU_THROW(NotSupportedError, "Requires VkPhysicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipelineTraceRaysIndirect");
 
+	if (m_data.useKhrMaintenance1Semantics) {
+		context.requireDeviceFunctionality("VK_KHR_ray_tracing_maintenance1");
+
+		const VkPhysicalDeviceFeatures deviceFeatures = getPhysicalDeviceFeatures(context.getInstanceInterface(), context.getPhysicalDevice());
+		if (!deviceFeatures.shaderInt64)
+		{
+			TCU_THROW(NotSupportedError, "Device feature shaderInt64 is not supported");
+		}
+	}
+
 	const VkPhysicalDeviceAccelerationStructureFeaturesKHR&	accelerationStructureFeaturesKHR	= context.getAccelerationStructureFeatures();
 	if (accelerationStructureFeaturesKHR.accelerationStructure == DE_FALSE)
 		TCU_THROW(TestError, "VK_KHR_ray_tracing_pipeline requires VkPhysicalDeviceAccelerationStructureFeaturesKHR.accelerationStructure");
@@ -187,8 +286,25 @@
 		std::stringstream css;
 		css <<
 			"#version 460 core\n"
+			<< (m_data.useKhrMaintenance1Semantics ? "#extension GL_ARB_gpu_shader_int64: enable\n" : "\n") <<
 			"struct TraceRaysIndirectCommand\n"
-			"{\n"
+			"{\n";
+		if (m_data.useKhrMaintenance1Semantics)
+		{
+			css <<
+				"	uint64_t raygenShaderRecordAddress;\n"
+				"	uint64_t raygenShaderRecordSize;\n"
+				"	uint64_t missShaderBindingTableAddress;\n"
+				"	uint64_t missShaderBindingTableSize;\n"
+				"	uint64_t missShaderBindingTableStride;\n"
+				"	uint64_t hitShaderBindingTableAddress;\n"
+				"	uint64_t hitShaderBindingTableSize;\n"
+				"	uint64_t hitShaderBindingTableStride;\n"
+				"	uint64_t callableShaderBindingTableAddress;\n"
+				"	uint64_t callableShaderBindingTableSize;\n"
+				"	uint64_t callableShaderBindingTableStride;\n";
+		}
+		css <<
 			"	uint width;\n"
 			"	uint height;\n"
 			"	uint depth;\n"
@@ -202,7 +318,23 @@
 			"	TraceRaysIndirectCommand indirectCommands;\n"
 			"};\n"
 			"void main()\n"
-			"{\n"
+			"{\n";
+		if (m_data.useKhrMaintenance1Semantics)
+		{
+			css <<
+				"  indirectCommands.raygenShaderRecordAddress         = ubo.indirectCommands.raygenShaderRecordAddress;\n"
+				"  indirectCommands.raygenShaderRecordSize            = ubo.indirectCommands.raygenShaderRecordSize;\n"
+				"  indirectCommands.missShaderBindingTableAddress     = ubo.indirectCommands.missShaderBindingTableAddress;\n"
+				"  indirectCommands.missShaderBindingTableSize        = ubo.indirectCommands.missShaderBindingTableSize;\n"
+				"  indirectCommands.missShaderBindingTableStride      = ubo.indirectCommands.missShaderBindingTableStride;\n"
+				"  indirectCommands.hitShaderBindingTableAddress      = ubo.indirectCommands.hitShaderBindingTableAddress;\n"
+				"  indirectCommands.hitShaderBindingTableSize         = ubo.indirectCommands.hitShaderBindingTableSize;\n"
+				"  indirectCommands.hitShaderBindingTableStride       = ubo.indirectCommands.hitShaderBindingTableStride;\n"
+				"  indirectCommands.callableShaderBindingTableAddress = ubo.indirectCommands.callableShaderBindingTableAddress;\n"
+				"  indirectCommands.callableShaderBindingTableSize    = ubo.indirectCommands.callableShaderBindingTableSize;\n"
+				"  indirectCommands.callableShaderBindingTableStride  = ubo.indirectCommands.callableShaderBindingTableStride;\n";
+		}
+		css <<
 			"  indirectCommands.width  = ubo.indirectCommands.width;\n"
 			"  indirectCommands.height = ubo.indirectCommands.height;\n"
 			"  indirectCommands.depth  = ubo.indirectCommands.depth;\n"
@@ -269,8 +401,8 @@
 RayTracingTraceRaysIndirectTestInstance::RayTracingTraceRaysIndirectTestInstance (Context& context, const TestParams& data)
 	: vkt::TestInstance		(context)
 	, m_data				(data)
-	, m_imageExtent			(getImageExtent(data.traceDimensions))
 {
+	m_imageExtent = data.useKhrMaintenance1Semantics ? getImageExtent(data.extendedTraceDimensions) : getImageExtent(data.traceDimensions);
 }
 
 RayTracingTraceRaysIndirectTestInstance::~RayTracingTraceRaysIndirectTestInstance (void)
@@ -317,32 +449,6 @@
 	return result;
 }
 
-de::MovePtr<TopLevelAccelerationStructure> RayTracingTraceRaysIndirectTestInstance::initTopAccelerationStructure (VkCommandBuffer													cmdBuffer,
-																													  std::vector<de::SharedPtr<BottomLevelAccelerationStructure> >&	bottomLevelAccelerationStructures)
-{
-	const DeviceInterface&						vkd				= m_context.getDeviceInterface();
-	const VkDevice								device			= m_context.getDevice();
-	Allocator&									allocator		= m_context.getDefaultAllocator();
-	const deUint32								instanceCount	= m_imageExtent.depth * m_imageExtent.height * m_imageExtent.width / 2;
-
-	de::MovePtr<TopLevelAccelerationStructure>	result = makeTopLevelAccelerationStructure();
-	result->setInstanceCount(instanceCount);
-
-	deUint32 currentInstanceIndex = 0;
-
-	for (deUint32 z = 0; z < m_imageExtent.depth; ++z)
-	for (deUint32 y = 0; y < m_imageExtent.height; ++y)
-	for (deUint32 x = 0; x < m_imageExtent.width; ++x)
-	{
-		if (((x + y + z) % 2) == 0)
-			continue;
-		result->addInstance(bottomLevelAccelerationStructures[currentInstanceIndex++]);
-	}
-	result->createAndBuild(vkd, device, cmdBuffer, allocator);
-
-	return result;
-}
-
 de::MovePtr<BufferWithMemory> RayTracingTraceRaysIndirectTestInstance::runTest()
 {
 	const InstanceInterface&			vki									= m_context.getInstanceInterface();
@@ -363,7 +469,7 @@
 	Move<VkShaderModule>				computeShader;
 	Move<VkPipeline>					computePipeline;
 
-	if (m_data.traceType == TraceType::INDIRECT_GPU)
+	if (m_data.traceType == TraceType::INDIRECT_GPU || m_data.traceType == TraceType::INDIRECT2_GPU)
 	{
 		computeDescriptorSetLayout			= DescriptorSetLayoutBuilder()
 													.addSingleBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_COMPUTE_BIT)
@@ -444,19 +550,33 @@
 	de::MovePtr<BufferWithMemory>		indirectBuffer;
 	de::MovePtr<BufferWithMemory>		uniformBuffer;
 
+	// Update trace details according to VK_KHR_ray_tracing_maintenance1 semantics
+	m_data.extendedTraceDimensions.raygenShaderRecordAddress			= raygenShaderBindingTableRegion.deviceAddress;
+	m_data.extendedTraceDimensions.raygenShaderRecordSize				= raygenShaderBindingTableRegion.size;
+	m_data.extendedTraceDimensions.missShaderBindingTableAddress		= missShaderBindingTableRegion.deviceAddress;
+	m_data.extendedTraceDimensions.missShaderBindingTableSize			= missShaderBindingTableRegion.size;
+	m_data.extendedTraceDimensions.missShaderBindingTableStride			= missShaderBindingTableRegion.stride;
+	m_data.extendedTraceDimensions.hitShaderBindingTableAddress			= hitShaderBindingTableRegion.deviceAddress;
+	m_data.extendedTraceDimensions.hitShaderBindingTableSize			= hitShaderBindingTableRegion.size;
+	m_data.extendedTraceDimensions.hitShaderBindingTableStride			= hitShaderBindingTableRegion.stride;
+	m_data.extendedTraceDimensions.callableShaderBindingTableAddress	= callableShaderBindingTableRegion.deviceAddress;
+	m_data.extendedTraceDimensions.callableShaderBindingTableSize		= callableShaderBindingTableRegion.size;
+	m_data.extendedTraceDimensions.callableShaderBindingTableStride		= callableShaderBindingTableRegion.stride;
+
 	if (m_data.traceType != TraceType::DIRECT)
 	{
-		const bool							indirectGpu							= (m_data.traceType == TraceType::INDIRECT_GPU);
-		VkBufferUsageFlags					indirectBufferUsageFlags			= VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT | ( indirectGpu ? VK_BUFFER_USAGE_STORAGE_BUFFER_BIT : VK_BUFFER_USAGE_TRANSFER_DST_BIT );
-		const VkBufferCreateInfo			indirectBufferCreateInfo			= makeBufferCreateInfo(sizeof(VkTraceRaysIndirectCommandKHR), indirectBufferUsageFlags);
-		vk::MemoryRequirement				indirectBufferMemoryRequirement		= MemoryRequirement::DeviceAddress | ( indirectGpu ? MemoryRequirement::Any : MemoryRequirement::HostVisible );
-		indirectBuffer															= de::MovePtr<BufferWithMemory>(new BufferWithMemory(vkd, device, allocator, indirectBufferCreateInfo, indirectBufferMemoryRequirement));
+		const bool							indirectGpu = (m_data.traceType == TraceType::INDIRECT_GPU || m_data.traceType == TraceType::INDIRECT2_GPU);
+		VkDeviceSize						bufferSize = m_data.useKhrMaintenance1Semantics ?  sizeof(VkTraceRaysIndirectCommand2KHR) : sizeof(VkTraceRaysIndirectCommandKHR);
+		VkBufferUsageFlags					indirectBufferUsageFlags = VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT | (indirectGpu ? VK_BUFFER_USAGE_STORAGE_BUFFER_BIT : VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+		const VkBufferCreateInfo			indirectBufferCreateInfo = makeBufferCreateInfo(bufferSize, indirectBufferUsageFlags);
+		vk::MemoryRequirement				indirectBufferMemoryRequirement = MemoryRequirement::DeviceAddress | (indirectGpu ? MemoryRequirement::Any : MemoryRequirement::HostVisible);
+		indirectBuffer = de::MovePtr<BufferWithMemory>(new BufferWithMemory(vkd, device, allocator, indirectBufferCreateInfo, indirectBufferMemoryRequirement));
 	}
 
 	if (m_data.traceType == TraceType::INDIRECT_GPU)
 	{
-		const VkBufferCreateInfo			uniformBufferCreateInfo			= makeBufferCreateInfo(sizeof(VkTraceRaysIndirectCommandKHR), VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT);
-		uniformBuffer														= de::MovePtr<BufferWithMemory>(new BufferWithMemory(vkd, device, allocator, uniformBufferCreateInfo, MemoryRequirement::HostVisible));
+		const VkBufferCreateInfo			uniformBufferCreateInfo = makeBufferCreateInfo(sizeof(VkTraceRaysIndirectCommandKHR), VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+		uniformBuffer = de::MovePtr<BufferWithMemory>(new BufferWithMemory(vkd, device, allocator, uniformBufferCreateInfo, MemoryRequirement::HostVisible));
 		deMemcpy(uniformBuffer->getAllocation().getHostPtr(), &m_data.traceDimensions, sizeof(VkTraceRaysIndirectCommandKHR));
 		flushMappedMemoryRange(vkd, device, uniformBuffer->getAllocation().getMemory(), uniformBuffer->getAllocation().getOffset(), VK_WHOLE_SIZE);
 	}
@@ -465,6 +585,18 @@
 		deMemcpy(indirectBuffer->getAllocation().getHostPtr(), &m_data.traceDimensions, sizeof(VkTraceRaysIndirectCommandKHR));
 		flushMappedMemoryRange(vkd, device, indirectBuffer->getAllocation().getMemory(), indirectBuffer->getAllocation().getOffset(), VK_WHOLE_SIZE);
 	}
+	else if (m_data.traceType == TraceType::INDIRECT2_GPU)
+	{
+		const VkBufferCreateInfo			uniformBufferCreateInfo = makeBufferCreateInfo(sizeof(VkTraceRaysIndirectCommand2KHR), VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+		uniformBuffer = de::MovePtr<BufferWithMemory>(new BufferWithMemory(vkd, device, allocator, uniformBufferCreateInfo, MemoryRequirement::HostVisible));
+		deMemcpy(uniformBuffer->getAllocation().getHostPtr(), &m_data.extendedTraceDimensions, sizeof(VkTraceRaysIndirectCommand2KHR));
+		flushMappedMemoryRange(vkd, device, uniformBuffer->getAllocation().getMemory(), uniformBuffer->getAllocation().getOffset(), VK_WHOLE_SIZE);
+	}
+	else if (m_data.traceType == TraceType::INDIRECT2_CPU)
+	{
+		deMemcpy(indirectBuffer->getAllocation().getHostPtr(), &m_data.extendedTraceDimensions, sizeof(VkTraceRaysIndirectCommand2KHR));
+		flushMappedMemoryRange(vkd, device, indirectBuffer->getAllocation().getMemory(), indirectBuffer->getAllocation().getOffset(), VK_WHOLE_SIZE);
+	}
 
 	const Move<VkCommandPool>			cmdPool								= createCommandPool(vkd, device, 0, queueFamilyIndex);
 	const Move<VkCommandBuffer>			cmdBuffer							= allocateCommandBuffer(vkd, device, *cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY);
@@ -488,12 +620,13 @@
 		cmdPipelineImageMemoryBarrier(vkd, *cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, &postImageBarrier);
 
 		bottomLevelAccelerationStructures	= initBottomAccelerationStructures(*cmdBuffer);
-		topLevelAccelerationStructure		= initTopAccelerationStructure(*cmdBuffer, bottomLevelAccelerationStructures);
+		topLevelAccelerationStructure		= initTopAccelerationStructure(*cmdBuffer, bottomLevelAccelerationStructures, m_context, m_imageExtent);
 
 		if (m_data.traceType == TraceType::INDIRECT_GPU)
 		{
-			const VkDescriptorBufferInfo	uniformBufferDescriptorInfo		= makeDescriptorBufferInfo(uniformBuffer->get(), 0ull, sizeof(VkTraceRaysIndirectCommandKHR));
-			const VkDescriptorBufferInfo	indirectBufferDescriptorInfo	= makeDescriptorBufferInfo(indirectBuffer->get(), 0ull, sizeof(VkTraceRaysIndirectCommandKHR));
+			const VkDescriptorBufferInfo	uniformBufferDescriptorInfo = makeDescriptorBufferInfo(uniformBuffer->get(), 0ull, sizeof(VkTraceRaysIndirectCommandKHR));
+			const VkDescriptorBufferInfo	indirectBufferDescriptorInfo = makeDescriptorBufferInfo(indirectBuffer->get(), 0ull, sizeof(VkTraceRaysIndirectCommandKHR));
+
 			DescriptorSetUpdateBuilder()
 				.writeSingle(*computeDescriptorSet, DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, &uniformBufferDescriptorInfo)
 				.writeSingle(*computeDescriptorSet, DescriptorSetUpdateBuilder::Location::binding(1u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &indirectBufferDescriptorInfo)
@@ -507,6 +640,25 @@
 																				indirectBuffer->get(), 0ull, sizeof(VkTraceRaysIndirectCommandKHR));
 			cmdPipelineBufferMemoryBarrier(vkd, *cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT, &fillIndirectBufferMemoryBarrier);
 		}
+		else if (m_data.traceType == TraceType::INDIRECT2_GPU)
+		{
+			const VkDescriptorBufferInfo	uniformBufferDescriptorInfo = makeDescriptorBufferInfo(uniformBuffer->get(), 0ull, sizeof(VkTraceRaysIndirectCommand2KHR));
+			const VkDescriptorBufferInfo	indirectBufferDescriptorInfo = makeDescriptorBufferInfo(indirectBuffer->get(), 0ull, sizeof(VkTraceRaysIndirectCommand2KHR));
+
+			DescriptorSetUpdateBuilder()
+				.writeSingle(*computeDescriptorSet, DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, &uniformBufferDescriptorInfo)
+				.writeSingle(*computeDescriptorSet, DescriptorSetUpdateBuilder::Location::binding(1u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &indirectBufferDescriptorInfo)
+				.update(vkd, device);
+
+			vkd.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *computePipeline);
+			vkd.cmdBindDescriptorSets(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *computePipelineLayout, 0u, 1u, &computeDescriptorSet.get(), 0u, DE_NULL);
+			vkd.cmdDispatch(*cmdBuffer, 1, 1, 1);
+
+			const VkBufferMemoryBarrier		fillIndirectBufferMemoryBarrier = makeBufferMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_INDIRECT_COMMAND_READ_BIT,
+																				indirectBuffer->get(), 0ull, sizeof(VkTraceRaysIndirectCommand2KHR));
+			cmdPipelineBufferMemoryBarrier(vkd, *cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT, &fillIndirectBufferMemoryBarrier);
+
+		}
 
 		const TopLevelAccelerationStructure*			topLevelAccelerationStructurePtr		= topLevelAccelerationStructure.get();
 		VkWriteDescriptorSetAccelerationStructureKHR	accelerationStructureWriteDescriptorSet	=
@@ -537,7 +689,7 @@
 				&callableShaderBindingTableRegion,
 				m_data.traceDimensions.width, m_data.traceDimensions.height, m_data.traceDimensions.depth);
 		}
-		else
+		else if(m_data.traceType == TraceType::INDIRECT_CPU || m_data.traceType == TraceType::INDIRECT_GPU)
 		{
 			cmdTraceRaysIndirect(vkd,
 				*cmdBuffer,
@@ -547,6 +699,12 @@
 				&callableShaderBindingTableRegion,
 				getBufferDeviceAddress(vkd, device, indirectBuffer->get(), 0));
 		}
+		else if (m_data.traceType == TraceType::INDIRECT2_CPU || m_data.traceType == TraceType::INDIRECT2_GPU)
+		{
+			vkd.cmdTraceRaysIndirect2KHR(
+				*cmdBuffer,
+				getBufferDeviceAddress(vkd, device, indirectBuffer->get(), 0));
+		}
 
 		const VkMemoryBarrier							postTraceMemoryBarrier					= makeMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT);
 		const VkMemoryBarrier							postCopyMemoryBarrier					= makeMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT);
@@ -570,7 +728,7 @@
 	// run test using arrays of pointers
 	const de::MovePtr<BufferWithMemory>	buffer		= runTest();
 	const deUint32*						bufferPtr	= (deUint32*)buffer->getAllocation().getHostPtr();
-	const bool							noWrites	= isNullTrace(m_data.traceDimensions);
+	const bool							noWrites	= m_data.useKhrMaintenance1Semantics ? isNullTrace(m_data.extendedTraceDimensions) : isNullTrace(m_data.traceDimensions);
 
 	deUint32							failures		= 0;
 	deUint32							pos				= 0;
@@ -592,6 +750,567 @@
 		return tcu::TestStatus::fail("Fail (failures=" + de::toString(failures) + ")");
 }
 
+template<typename T>
+std::string makeDimensionsName (const T cmd)
+{
+	std::ostringstream name;
+	name << cmd.width << "_" << cmd.height << "_" << cmd.depth;
+	return name.str();
+}
+
+using namespace tcu;
+
+class TraceRaysIndirect2Instance : public TestInstance
+{
+public:
+						TraceRaysIndirect2Instance	(Context&					context,
+													 const TestParams2&			params);
+	virtual				~TraceRaysIndirect2Instance	(void) override = default;
+	virtual TestStatus	iterate						(void) override;
+
+protected:
+	void				makeIndirectStructAndFlush	(BufferWithMemory&			buffer,
+													 const bool					source,
+													 const BufferWithMemory&	rgenSbt,
+													 const BufferWithMemory&	hitSbt,
+													 const BufferWithMemory&	missSbt,
+													 const BufferWithMemory&	callSbt) const;
+	void				initBottomAccellStructures	(VkCommandBuffer			cmdBuffer,
+													 BottomLevelAccelerationStructurePool&	pool,
+													 const size_t&							batchStructCount) const;
+private:
+	TestParams2			m_params;
+	const VkExtent3D	m_imageExtent;
+};
+
+class TraceRaysIndirect2Case : public TestCase
+{
+public:
+							TraceRaysIndirect2Case	(TestContext& testCtx, const std::string& name, const TestParams2& params);
+	virtual					~TraceRaysIndirect2Case	(void) override = default;
+	virtual void			initPrograms	(SourceCollections& programCollection) const override;
+	virtual TestInstance*	createInstance	(Context& context) const override;
+	virtual void			checkSupport	(Context& context) const override;
+private:
+	TestParams2	m_params;
+};
+
+TraceRaysIndirect2Case::TraceRaysIndirect2Case (TestContext& testCtx, const std::string& name, const TestParams2& params)
+	: TestCase	(testCtx, name, std::string())
+	, m_params	(params)
+{
+}
+
+TestInstance* TraceRaysIndirect2Case::createInstance (Context& context) const
+{
+	return new TraceRaysIndirect2Instance(context, m_params);
+}
+
+// note that this/these name(s) should be auto-generated but they do not
+#ifndef VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME
+#define VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME "VK_KHR_acceleration_structure"
+#endif
+
+void TraceRaysIndirect2Case::checkSupport (Context& context) const
+{
+	context.requireInstanceFunctionality(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME);
+	context.requireDeviceFunctionality(VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME);
+	context.requireDeviceFunctionality(VK_KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME);
+
+	const VkPhysicalDeviceFeatures& features = context.getDeviceFeatures();
+	if (features.shaderInt64 == VK_FALSE)
+		TCU_THROW(NotSupportedError, "64-bit integers not supported by device");
+
+	const VkPhysicalDeviceAccelerationStructureFeaturesKHR&	accelerationStructureFeaturesKHR = context.getAccelerationStructureFeatures();
+	if (accelerationStructureFeaturesKHR.accelerationStructure == VK_FALSE)
+		TCU_THROW(NotSupportedError, "Requires VkPhysicalDeviceAccelerationStructureFeaturesKHR::accelerationStructure");
+
+	const VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR& maintenance1FeaturesKHR = context.getRayTracingMaintenance1Features();
+	if (maintenance1FeaturesKHR.rayTracingMaintenance1 == VK_FALSE)
+		TCU_THROW(NotSupportedError, "Requires VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR::rayTracingMaintenance1");
+	if (maintenance1FeaturesKHR.rayTracingPipelineTraceRaysIndirect2 == VK_FALSE)
+		TCU_THROW(NotSupportedError, "Requires VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR::rayTracingPipelineTraceRaysIndirect2");
+
+	auto desiredQueue	= getQueueFamilyIndexAtExact(context.getDeviceInterface(),
+													 context.getInstanceInterface(),
+													 context.getPhysicalDevice(),
+													 context.getDevice(),
+													 m_params.submitQueue);
+	if (!std::get<0>(desiredQueue))
+	{
+		std::stringstream errorMsg;
+		errorMsg << "Desired queue " << m_params.submitQueue << " is not supported by device";
+		errorMsg.flush();
+		TCU_THROW(NotSupportedError, errorMsg.str());
+	}
+}
+
+void TraceRaysIndirect2Case::initPrograms (SourceCollections& programCollection) const
+{
+	const vk::ShaderBuildOptions	buildOptions(programCollection.usedVulkanVersion, vk::SPIRV_VERSION_1_4, 0u, true);
+	{
+		std::stringstream css;
+		std::string comp(R"(
+		#version 460 core
+		#extension GL_ARB_gpu_shader_int64: enable
+		struct TraceRaysIndirectCommand
+		{
+			uint64_t raygenShaderRecordAddress;
+			uint64_t raygenShaderRecordSize;
+			uint64_t missShaderBindingTableAddress;
+			uint64_t missShaderBindingTableSize;
+			uint64_t missShaderBindingTableStride;
+			uint64_t hitShaderBindingTableAddress;
+			uint64_t hitShaderBindingTableSize;
+			uint64_t hitShaderBindingTableStride;
+			uint64_t callableShaderBindingTableAddress;
+			uint64_t callableShaderBindingTableSize;
+			uint64_t callableShaderBindingTableStride;
+			uint     width;
+			uint     height;
+			uint     depth;
+		};
+		layout(push_constant) uniform CopyStyle {
+			uint full;
+		} cs;
+		layout(binding = 0) uniform IndirectCommandsUBO {
+			TraceRaysIndirectCommand indirectCommands;
+		} ubo;
+		layout(binding = 1) buffer IndirectCommandsSBO {
+			TraceRaysIndirectCommand indirectCommands;
+		};
+		void main()
+		{
+			if (cs.full != 0) {
+				indirectCommands.raygenShaderRecordAddress         = ubo.indirectCommands.raygenShaderRecordAddress;
+				indirectCommands.raygenShaderRecordSize            = ubo.indirectCommands.raygenShaderRecordSize;
+				indirectCommands.missShaderBindingTableAddress     = ubo.indirectCommands.missShaderBindingTableAddress;
+				indirectCommands.missShaderBindingTableSize        = ubo.indirectCommands.missShaderBindingTableSize;
+				indirectCommands.missShaderBindingTableStride      = ubo.indirectCommands.missShaderBindingTableStride;
+				indirectCommands.hitShaderBindingTableAddress      = ubo.indirectCommands.hitShaderBindingTableAddress;
+				indirectCommands.hitShaderBindingTableSize         = ubo.indirectCommands.hitShaderBindingTableSize;
+				indirectCommands.hitShaderBindingTableStride       = ubo.indirectCommands.hitShaderBindingTableStride;
+				indirectCommands.callableShaderBindingTableAddress = ubo.indirectCommands.callableShaderBindingTableAddress;
+				indirectCommands.callableShaderBindingTableSize    = ubo.indirectCommands.callableShaderBindingTableSize;
+				indirectCommands.callableShaderBindingTableStride  = ubo.indirectCommands.callableShaderBindingTableStride;
+			}
+			else {
+				indirectCommands.raygenShaderRecordAddress         = ubo.indirectCommands.raygenShaderRecordAddress;
+
+				indirectCommands.missShaderBindingTableStride      = ubo.indirectCommands.missShaderBindingTableStride;
+
+				indirectCommands.hitShaderBindingTableSize         = ubo.indirectCommands.hitShaderBindingTableSize;
+
+				indirectCommands.callableShaderBindingTableAddress = ubo.indirectCommands.callableShaderBindingTableAddress;
+				indirectCommands.callableShaderBindingTableStride  = ubo.indirectCommands.callableShaderBindingTableStride;
+			}
+
+			indirectCommands.width                                 = ubo.indirectCommands.width;
+			indirectCommands.height                                = ubo.indirectCommands.height;
+			indirectCommands.depth                                 = ubo.indirectCommands.depth;
+
+		})");
+
+		programCollection.glslSources.add("compute_indirect_command") << glu::ComputeSource(comp) << buildOptions;
+	}
+
+	{
+		std::stringstream css;
+		css <<
+			"#version 460 core\n"
+			"#extension GL_EXT_ray_tracing : require\n"
+			"layout(location = 0) rayPayloadEXT uvec4 hitValue;\n"
+			"layout(r32ui, set = 0, binding = 0) uniform uimage3D result;\n"
+			"layout(set = 0, binding = 1) uniform accelerationStructureEXT topLevelAS;\n"
+			"\n"
+			"void main()\n"
+			"{\n"
+			"  float tmin     = 0.0;\n"
+			"  float tmax     = 1.0;\n"
+			"  vec3  origin   = vec3(float(gl_LaunchIDEXT.x) + 0.5f, float(gl_LaunchIDEXT.y) + 0.5f, float(gl_LaunchIDEXT.z + 0.5f));\n"
+			"  vec3  direct   = vec3(0.0, 0.0, -1.0);\n"
+			"  hitValue       = uvec4(0,0,0,0);\n"
+			"  traceRayEXT(topLevelAS, 0, 0xFF, 0, 0, 0, origin, tmin, direct, tmax, 0);\n"
+			"  imageStore(result, ivec3(gl_LaunchIDEXT), hitValue);\n"
+			"}\n";
+		programCollection.glslSources.add("rgen") << glu::RaygenSource(updateRayTracingGLSL(css.str())) << buildOptions;
+	}
+
+	{
+		std::stringstream css;
+		css <<
+			"#version 460 core\n"
+			"#extension GL_EXT_ray_tracing : require\n"
+			"layout(location = 0) rayPayloadInEXT uvec4 hitValue;\n"
+			"void main()\n"
+			"{\n"
+			"  hitValue = uvec4(" << kHitColorValue << ",0,0,1);\n"
+			"}\n";
+		programCollection.glslSources.add("chit") << glu::ClosestHitSource(updateRayTracingGLSL(css.str())) << buildOptions;
+	}
+
+	{
+		std::stringstream css;
+		css <<
+			"#version 460 core\n"
+			"#extension GL_EXT_ray_tracing : require\n"
+			"layout(location = 0) rayPayloadInEXT uvec4 hitValue;\n"
+			"void main()\n"
+			"{\n"
+			"  hitValue = uvec4(" << kMissColorValue << ",0,0,1);\n"
+			"}\n";
+
+		programCollection.glslSources.add("miss") << glu::MissSource(updateRayTracingGLSL(css.str())) << buildOptions;
+	}
+}
+
+TraceRaysIndirect2Instance::TraceRaysIndirect2Instance (Context& context, const TestParams2& params)
+	: TestInstance	(context)
+	, m_params		(params)
+	, m_imageExtent	(getNonNullImageExtent(params.traceDimensions))
+{
+}
+
+void TraceRaysIndirect2Instance::makeIndirectStructAndFlush	(BufferWithMemory&			buffer,
+															 const bool					source,
+															 const BufferWithMemory&	rgenSbt,
+															 const BufferWithMemory&	hitSbt,
+															 const BufferWithMemory&	missSbt,
+															 const BufferWithMemory&	callSbt) const
+{
+	DE_UNREF(callSbt);
+
+	const DeviceInterface&				vkd						= m_context.getDeviceInterface();
+	const InstanceInterface&			vki						= m_context.getInstanceInterface();
+	const VkPhysicalDevice				physicalDevice			= m_context.getPhysicalDevice();
+	const VkDevice						device					= m_context.getDevice();
+	const deUint32						shaderGroupHandleSize	= getShaderGroupSize(vki, physicalDevice);
+	Allocation&							alloc					= buffer.getAllocation();
+
+	VkTraceRaysIndirectCommand2KHR		data					{};
+
+	if (m_params.traceType == TraceType::INDIRECT_GPU && m_params.partialCopy)
+	{
+		if (source)
+		{
+			data.raygenShaderRecordAddress			= getBufferDeviceAddress(vkd, device, *rgenSbt, 0);
+			data.missShaderBindingTableStride		= shaderGroupHandleSize;
+			data.hitShaderBindingTableSize			= shaderGroupHandleSize;
+			data.callableShaderBindingTableAddress	= 0;
+			data.callableShaderBindingTableStride	= 0;
+		}
+		else
+		{
+			data.raygenShaderRecordSize				= shaderGroupHandleSize;
+			data.missShaderBindingTableAddress		= getBufferDeviceAddress(vkd, device, *missSbt, 0);
+			data.missShaderBindingTableSize			= shaderGroupHandleSize;
+			data.hitShaderBindingTableAddress		= getBufferDeviceAddress(vkd, device, *hitSbt, 0);
+			data.hitShaderBindingTableStride		= shaderGroupHandleSize;
+			data.callableShaderBindingTableSize		= 0;
+		}
+	}
+	else
+	{
+		data.raygenShaderRecordAddress				= getBufferDeviceAddress(vkd, device, *rgenSbt, 0);
+		data.raygenShaderRecordSize					= shaderGroupHandleSize;
+
+		data.missShaderBindingTableAddress			= getBufferDeviceAddress(vkd, device, *missSbt, 0);
+		data.missShaderBindingTableSize				= shaderGroupHandleSize;
+		data.missShaderBindingTableStride			= shaderGroupHandleSize;
+
+		data.hitShaderBindingTableAddress			= getBufferDeviceAddress(vkd, device, *hitSbt, 0);
+		data.hitShaderBindingTableSize				= shaderGroupHandleSize;
+		data.hitShaderBindingTableStride			= shaderGroupHandleSize;
+
+		data.callableShaderBindingTableAddress		= 0;
+		data.callableShaderBindingTableSize			= 0;
+		data.callableShaderBindingTableStride		= 0;
+	}
+
+	data.width	= m_params.traceDimensions.width;
+	data.height	= m_params.traceDimensions.height;
+	data.depth	= m_params.traceDimensions.depth;
+
+	deMemcpy(alloc.getHostPtr(), &data, sizeof(data));
+	flushMappedMemoryRange(vkd, device, alloc.getMemory(), alloc.getOffset(), VK_WHOLE_SIZE);
+}
+
+void TraceRaysIndirect2Instance::initBottomAccellStructures (VkCommandBuffer						cmdBuffer,
+															 BottomLevelAccelerationStructurePool&	pool,
+															 const size_t&							batchStructCount) const
+{
+	const DeviceInterface&											vkd			= m_context.getDeviceInterface();
+	const VkDevice													device		= m_context.getDevice();
+	Allocator&														allocator	= m_context.getDefaultAllocator();
+
+	pool.batchStructCount(batchStructCount);
+	pool.batchGeomCount(batchStructCount * 8);
+
+	tcu::Vec3 v0(0.0, 1.0, 0.0);
+	tcu::Vec3 v1(0.0, 0.0, 0.0);
+	tcu::Vec3 v2(1.0, 1.0, 0.0);
+	tcu::Vec3 v3(1.0, 0.0, 0.0);
+
+	for (deUint32 z = 0; z < m_imageExtent.depth; ++z)
+	for (deUint32 y = 0; y < m_imageExtent.height; ++y)
+	for (deUint32 x = 0; x < m_imageExtent.width; ++x)
+	{
+		// let's build a 3D chessboard of geometries
+		if (((x + y + z) % 2) == 0)
+			continue;
+		tcu::Vec3 xyz((float)x, (float)y, (float)z);
+		std::vector<tcu::Vec3>	geometryData;
+
+		auto bottomLevelAccelerationStructure = pool.add();
+		bottomLevelAccelerationStructure->setGeometryCount(1u);
+
+		geometryData.push_back(xyz + v0);
+		geometryData.push_back(xyz + v1);
+		geometryData.push_back(xyz + v2);
+		geometryData.push_back(xyz + v2);
+		geometryData.push_back(xyz + v1);
+		geometryData.push_back(xyz + v3);
+
+		bottomLevelAccelerationStructure->addGeometry(geometryData, true);
+	}
+
+	pool.batchCreate(vkd, device, allocator);
+	pool.batchBuild(vkd, device, cmdBuffer);
+}
+
+TestStatus TraceRaysIndirect2Instance::iterate (void)
+{
+	const InstanceInterface&			vki									= m_context.getInstanceInterface();
+	const DeviceInterface&				vkd									= m_context.getDeviceInterface();
+	const VkDevice						device								= m_context.getDevice();
+	const VkPhysicalDevice				physicalDevice						= m_context.getPhysicalDevice();
+	const auto							queueAndFamilyIndex					= getQueueFamilyIndexAtExact(vkd, vki, physicalDevice, device, m_params.submitQueue);
+	const VkQueue						queue								= std::get<1>(queueAndFamilyIndex);
+	const deUint32						queueFamilyIndex					= std::get<2>(queueAndFamilyIndex);
+	Allocator&							allocator							= m_context.getDefaultAllocator();
+	const deUint32						width								= m_imageExtent.width;
+	const deUint32						height								= m_imageExtent.height;
+	const deUint32						depth								= m_imageExtent.depth;
+	const deUint32						pixelCount							= width * height * depth;
+	const deUint32						shaderGroupHandleSize				= getShaderGroupSize(vki, physicalDevice);
+	const deUint32						shaderGroupBaseAlignment			= getShaderGroupBaseAlignment(vki, physicalDevice);
+
+	Move<VkDescriptorSetLayout>			computeDescriptorSetLayout;
+	Move<VkDescriptorPool>				computeDescriptorPool;
+	Move<VkDescriptorSet>				computeDescriptorSet;
+	Move<VkPipelineLayout>				computePipelineLayout;
+	Move<VkShaderModule>				computeShader;
+	Move<VkPipeline>					computePipeline;
+
+	if (m_params.traceType == TraceType::INDIRECT_GPU)
+	{
+		computeDescriptorSetLayout			= DescriptorSetLayoutBuilder()
+													.addSingleBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_COMPUTE_BIT)
+													.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, VK_SHADER_STAGE_COMPUTE_BIT)
+													.build(vkd, device);
+		computeDescriptorPool				= DescriptorPoolBuilder()
+													.addType(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER)
+													.addType(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER)
+													.build(vkd, device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u);
+		const VkPushConstantRange	full	{ VK_SHADER_STAGE_COMPUTE_BIT, 0, deUint32(sizeof(deUint32)) };
+		computeDescriptorSet				= makeDescriptorSet(vkd, device, *computeDescriptorPool, *computeDescriptorSetLayout);
+		computePipelineLayout				= makePipelineLayout(vkd, device, 1, &computeDescriptorSetLayout.get(), 1, &full);
+
+		computeShader						= createShaderModule(vkd, device, m_context.getBinaryCollection().get("compute_indirect_command"), 0);
+		const VkPipelineShaderStageCreateInfo pipelineShaderStageParams =
+		{
+			VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,	// VkStructureType						sType;
+			DE_NULL,												// const void*							pNext;
+			VkPipelineShaderStageCreateFlags(0u),					// VkPipelineShaderStageCreateFlags		flags;
+			VK_SHADER_STAGE_COMPUTE_BIT,							// VkShaderStageFlagBits				stage;
+			*computeShader,											// VkShaderModule						module;
+			"main",													// const char*							pName;
+			DE_NULL,												// const VkSpecializationInfo*			pSpecializationInfo;
+		};
+		const VkComputePipelineCreateInfo pipelineCreateInfo =
+		{
+			VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,		// VkStructureType					sType;
+			DE_NULL,											// const void*						pNext;
+			VkPipelineCreateFlags(0u),							// VkPipelineCreateFlags			flags;
+			pipelineShaderStageParams,							// VkPipelineShaderStageCreateInfo	stage;
+			*computePipelineLayout,								// VkPipelineLayout					layout;
+			DE_NULL,											// VkPipeline						basePipelineHandle;
+			0,													// deInt32							basePipelineIndex;
+		};
+
+		computePipeline = vk::createComputePipeline(vkd, device, (VkPipelineCache)0u, &pipelineCreateInfo);
+	}
+
+	const Move<VkDescriptorSetLayout>	descriptorSetLayout					= DescriptorSetLayoutBuilder()
+																					.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, ALL_RAY_TRACING_STAGES)
+																					.addSingleBinding(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, ALL_RAY_TRACING_STAGES)
+																					.build(vkd, device);
+	const Move<VkDescriptorPool>		descriptorPool						= DescriptorPoolBuilder()
+																					.addType(VK_DESCRIPTOR_TYPE_STORAGE_IMAGE)
+																					.addType(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR)
+																					.build(vkd, device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u);
+	const Move<VkDescriptorSet>			descriptorSet						= makeDescriptorSet(vkd, device, *descriptorPool, *descriptorSetLayout);
+	const Move<VkPipelineLayout>		pipelineLayout						= makePipelineLayout(vkd, device, descriptorSetLayout.get());
+
+	de::MovePtr<RayTracingPipeline>		rayTracingPipeline					= de::newMovePtr<RayTracingPipeline>();
+	rayTracingPipeline->addShader(VK_SHADER_STAGE_RAYGEN_BIT_KHR,		createShaderModule(vkd, device, m_context.getBinaryCollection().get("rgen"), 0), 0);
+	rayTracingPipeline->addShader(VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR,	createShaderModule(vkd, device, m_context.getBinaryCollection().get("chit"), 0), 1);
+	rayTracingPipeline->addShader(VK_SHADER_STAGE_MISS_BIT_KHR,			createShaderModule(vkd, device, m_context.getBinaryCollection().get("miss"), 0), 2);
+	Move<VkPipeline>					pipeline							= rayTracingPipeline->createPipeline(vkd, device, *pipelineLayout);
+
+	const de::MovePtr<BufferWithMemory>	rgenSbt								= rayTracingPipeline->createShaderBindingTable(vkd, device, *pipeline, allocator, shaderGroupHandleSize, shaderGroupBaseAlignment, 0, 1 );
+	const de::MovePtr<BufferWithMemory>	hitSbt								= rayTracingPipeline->createShaderBindingTable(vkd, device, *pipeline, allocator, shaderGroupHandleSize, shaderGroupBaseAlignment, 1, 1 );
+	const de::MovePtr<BufferWithMemory>	missSbt								= rayTracingPipeline->createShaderBindingTable(vkd, device, *pipeline, allocator, shaderGroupHandleSize, shaderGroupBaseAlignment, 2, 1 );
+
+	const VkFormat						imageFormat							= VK_FORMAT_R32_UINT;
+	const VkImageCreateInfo				imageCreateInfo						= makeImageCreateInfo(width, height, depth, imageFormat);
+	const VkImageSubresourceRange		imageSubresourceRange				= makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0, 1u);
+	const de::MovePtr<ImageWithMemory>	image								= de::MovePtr<ImageWithMemory>(new ImageWithMemory(vkd, device, allocator, imageCreateInfo, MemoryRequirement::Any));
+	const Move<VkImageView>				imageView							= makeImageView(vkd, device, **image, VK_IMAGE_VIEW_TYPE_3D, imageFormat, imageSubresourceRange);
+
+	const VkBufferCreateInfo			resultBufferCreateInfo				= makeBufferCreateInfo(pixelCount*sizeof(deUint32), VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+	const VkImageSubresourceLayers		resultBufferImageSubresourceLayers	= makeImageSubresourceLayers(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 0u, 1u);
+	const VkBufferImageCopy				resultBufferImageRegion				= makeBufferImageCopy(m_params.traceDimensions, resultBufferImageSubresourceLayers);
+	de::MovePtr<BufferWithMemory>		resultBuffer						= de::MovePtr<BufferWithMemory>(new BufferWithMemory(vkd, device, allocator, resultBufferCreateInfo, MemoryRequirement::HostVisible));
+	Allocation&							resultBufferAllocation				= resultBuffer->getAllocation();
+
+	const VkDescriptorImageInfo			descriptorImageInfo					= makeDescriptorImageInfo(DE_NULL, *imageView, VK_IMAGE_LAYOUT_GENERAL);
+
+	// create indirect command buffer and fill it with parameter values
+	const VkDeviceSize					bufferSize							= sizeof(VkTraceRaysIndirectCommand2KHR);
+	de::MovePtr<BufferWithMemory>		indirectBuffer;
+	de::MovePtr<BufferWithMemory>		uniformBuffer;
+
+	const bool							indirectGpu							= (m_params.traceType == TraceType::INDIRECT_GPU);
+	VkBufferUsageFlags					indirectBufferUsageFlags			= VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT | ( indirectGpu ? VK_BUFFER_USAGE_STORAGE_BUFFER_BIT : VK_BUFFER_USAGE_TRANSFER_DST_BIT );
+	const VkBufferCreateInfo			indirectBufferCreateInfo			= makeBufferCreateInfo(bufferSize, indirectBufferUsageFlags);
+	vk::MemoryRequirement				indirectBufferMemoryRequirement		= MemoryRequirement::DeviceAddress | MemoryRequirement::HostVisible;
+	indirectBuffer															= de::MovePtr<BufferWithMemory>(new BufferWithMemory(vkd, device, allocator, indirectBufferCreateInfo, indirectBufferMemoryRequirement));
+
+	if (m_params.traceType == TraceType::INDIRECT_GPU)
+	{
+		const VkBufferCreateInfo			uniformBufferCreateInfo			= makeBufferCreateInfo(bufferSize, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+		uniformBuffer														= de::MovePtr<BufferWithMemory>(new BufferWithMemory(vkd, device, allocator, uniformBufferCreateInfo, MemoryRequirement::HostVisible));
+		makeIndirectStructAndFlush(*uniformBuffer, true, *rgenSbt, *hitSbt, *missSbt, *missSbt);
+		makeIndirectStructAndFlush(*indirectBuffer, false, *rgenSbt, *hitSbt, *missSbt, *missSbt);
+	}
+	else if (m_params.traceType == TraceType::INDIRECT_CPU)
+	{
+		makeIndirectStructAndFlush(*indirectBuffer, true, *rgenSbt, *hitSbt, *missSbt, *missSbt);
+	}
+	else
+	{
+		TCU_THROW(NotSupportedError, "Invalid test parameters");
+	}
+
+	de::MovePtr<TopLevelAccelerationStructure>	topLevelAccelerationStructure;
+	BottomLevelAccelerationStructurePool	blasPool;
+	const Move<VkCommandPool>				cmdPool							= createCommandPool(vkd, device, 0, queueFamilyIndex);
+	const Move<VkCommandBuffer>				cmdBuffer						= allocateCommandBuffer(vkd, device, *cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+
+	beginCommandBuffer(vkd, *cmdBuffer, 0u);
+	{
+		const VkImageMemoryBarrier			preImageBarrier						= makeImageMemoryBarrier(0u, VK_ACCESS_TRANSFER_WRITE_BIT,
+																					VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
+																					**image, imageSubresourceRange);
+		cmdPipelineImageMemoryBarrier(vkd, *cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, &preImageBarrier);
+
+		const VkClearValue					clearValue							= makeClearValueColorU32(kClearColorValue, 0u, 0u, 0u);
+		vkd.cmdClearColorImage(*cmdBuffer, **image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &clearValue.color, 1, &imageSubresourceRange);
+
+		const VkImageMemoryBarrier			postImageBarrier					= makeImageMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR | VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR,
+																					VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_GENERAL,
+																					**image, imageSubresourceRange);
+		cmdPipelineImageMemoryBarrier(vkd, *cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, &postImageBarrier);
+
+
+		initBottomAccellStructures(*cmdBuffer, blasPool, 4);
+		topLevelAccelerationStructure		= initTopAccelerationStructure(*cmdBuffer, blasPool.structures(), m_context, m_imageExtent);
+
+		if (m_params.traceType == TraceType::INDIRECT_GPU)
+		{
+			const deUint32					fullCopyStyle					= m_params.partialCopy ? 0 : 1;
+			const VkDescriptorBufferInfo	uniformBufferDescriptorInfo		= makeDescriptorBufferInfo(**uniformBuffer, 0ull, bufferSize);
+			const VkDescriptorBufferInfo	indirectBufferDescriptorInfo	= makeDescriptorBufferInfo(**indirectBuffer, 0ull, bufferSize);
+			DescriptorSetUpdateBuilder()
+				.writeSingle(*computeDescriptorSet, DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, &uniformBufferDescriptorInfo)
+				.writeSingle(*computeDescriptorSet, DescriptorSetUpdateBuilder::Location::binding(1u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &indirectBufferDescriptorInfo)
+				.update(vkd, device);
+
+			vkd.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *computePipeline);
+			vkd.cmdBindDescriptorSets(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *computePipelineLayout, 0u, 1u, &computeDescriptorSet.get(), 0u, DE_NULL);
+			vkd.cmdPushConstants(*cmdBuffer, *computePipelineLayout, VK_SHADER_STAGE_COMPUTE_BIT, 0, deUint32(sizeof(deUint32)), &fullCopyStyle);
+			vkd.cmdDispatch(*cmdBuffer, 1, 1, 1);
+
+			const VkBufferMemoryBarrier		fillIndirectBufferMemoryBarrier	= makeBufferMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_INDIRECT_COMMAND_READ_BIT,
+																				**indirectBuffer, 0ull, bufferSize);
+			cmdPipelineBufferMemoryBarrier(vkd, *cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT, &fillIndirectBufferMemoryBarrier);
+		}
+
+		const TopLevelAccelerationStructure*			topLevelAccelerationStructurePtr		= topLevelAccelerationStructure.get();
+		VkWriteDescriptorSetAccelerationStructureKHR	accelerationStructureWriteDescriptorSet	=
+		{
+			VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,	//  VkStructureType						sType;
+			DE_NULL,															//  const void*							pNext;
+			1u,																	//  deUint32							accelerationStructureCount;
+			topLevelAccelerationStructurePtr->getPtr(),							//  const VkAccelerationStructureKHR*	pAccelerationStructures;
+		};
+
+		DescriptorSetUpdateBuilder()
+			.writeSingle(*descriptorSet, DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, &descriptorImageInfo)
+			.writeSingle(*descriptorSet, DescriptorSetUpdateBuilder::Location::binding(1u), VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, &accelerationStructureWriteDescriptorSet)
+			.update(vkd, device);
+
+		vkd.cmdBindDescriptorSets(*cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, *pipelineLayout, 0, 1, &descriptorSet.get(), 0, DE_NULL);
+
+		vkd.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, *pipeline);
+
+		cmdTraceRaysIndirect2(vkd, *cmdBuffer, getBufferDeviceAddress(vkd, device, **indirectBuffer, 0));
+
+		const VkMemoryBarrier							postTraceMemoryBarrier					= makeMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT);
+		const VkMemoryBarrier							postCopyMemoryBarrier					= makeMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT);
+		cmdPipelineMemoryBarrier(vkd, *cmdBuffer, VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, VK_PIPELINE_STAGE_TRANSFER_BIT, &postTraceMemoryBarrier);
+
+		vkd.cmdCopyImageToBuffer(*cmdBuffer, **image, VK_IMAGE_LAYOUT_GENERAL, **resultBuffer, 1u, &resultBufferImageRegion);
+
+		cmdPipelineMemoryBarrier(vkd, *cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, &postCopyMemoryBarrier);
+	}
+	endCommandBuffer(vkd, *cmdBuffer);
+
+	submitCommandsAndWait(vkd, device, queue, cmdBuffer.get());
+
+	invalidateMappedMemoryRange(vkd, device, resultBufferAllocation.getMemory(), resultBufferAllocation.getOffset(), VK_WHOLE_SIZE);
+
+	// run test using arrays of pointers
+	const deUint32*						bufferPtr	= (deUint32*)resultBufferAllocation.getHostPtr();
+	const bool							noWrites	= isNullExtent(m_params.traceDimensions);
+
+	const auto							allocationCount	= blasPool.getAllocationCount();
+	deUint32							failures		= 0;
+	deUint32							pos				= 0;
+	deUint32							all				= 0;
+
+	// verify results
+	for (deUint32 z = 0; z < depth; ++z)
+	for (deUint32 y = 0; y < height; ++y)
+	for (deUint32 x = 0; x < width; ++x)
+	{
+		const deUint32 expectedResult = (noWrites ? kClearColorValue : (((x + y + z) % 2) ? kHitColorValue : kMissColorValue));
+		if (bufferPtr[pos] != expectedResult)
+			failures++;
+		++pos;
+		++all;
+	}
+
+	if (failures == 0)
+		return tcu::TestStatus::pass(std::to_string(allocationCount) +" allocations");
+	else
+	{
+		const auto msg = std::to_string(allocationCount) +" allocations, " + std::to_string(failures) + " failures from " + std::to_string(all);
+		return tcu::TestStatus::fail(msg);
+	}
+}
+
 std::string makeDimensionsName (const VkTraceRaysIndirectCommandKHR& cmd)
 {
 	std::ostringstream name;
@@ -599,9 +1318,16 @@
 	return name.str();
 }
 
+std::string makeDimensionsName (const VkExtent3D& extent)
+{
+	std::ostringstream name;
+	name << extent.width << "x" << extent.height << "x" << extent.depth;
+	return name.str();
+}
+
 }	// anonymous
 
-tcu::TestCaseGroup*	createTraceRaysTests(tcu::TestContext& testCtx)
+tcu::TestCaseGroup* createTraceRaysTests(tcu::TestContext& testCtx)
 {
 	de::MovePtr<tcu::TestCaseGroup> group(new tcu::TestCaseGroup(testCtx, "trace_rays_cmds", "Tests veryfying vkCmdTraceRays* commands"));
 
@@ -640,6 +1366,8 @@
 			{
 				bufferSourceTypes[bufferSourceNdx].traceType,
 				traceDimensions[traceDimensionsIdx],
+				false,
+				{/* Intentionally empty */},
 			};
 			const auto testName = makeDimensionsName(traceDimensions[traceDimensionsIdx]);
 			bufferSourceGroup->addChild(new RayTracingTraceRaysIndirectTestCase(group->getTestContext(), testName.c_str(), "", testParams));
@@ -651,6 +1379,121 @@
 	return group.release();
 }
 
+tcu::TestCaseGroup* createTraceRaysMaintenance1Tests(tcu::TestContext& testCtx)
+{
+	de::MovePtr<tcu::TestCaseGroup> group(new tcu::TestCaseGroup(testCtx, "trace_rays_cmds_maintenance_1", "Tests veryfying vkCmdTraceRays* commands"));
+
+	struct BufferSourceTypeData
+	{
+		TraceType								traceType;
+		const char*								name;
+	} bufferSourceTypes[] =
+	{
+		{ TraceType::INDIRECT2_CPU,	"indirect2_cpu"		},
+		{ TraceType::INDIRECT2_GPU,	"indirect2_gpu"		},
+	};
+
+	const VkTraceRaysIndirectCommand2KHR extendedTraceDimensions[] =
+	{
+		{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0 },
+		{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  1, 1 },
+		{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  1,  0, 1 },
+		{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  1,  1, 0 },
+		{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  8,  1, 1 },
+		{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  8,  8, 1 },
+		{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  8,  8, 8 },
+		{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11,  1, 1 },
+		{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 13, 1 },
+		{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 13, 5 },
+	};
+
+	for (size_t bufferSourceNdx = 0; bufferSourceNdx < DE_LENGTH_OF_ARRAY(bufferSourceTypes); ++bufferSourceNdx)
+	{
+		de::MovePtr<tcu::TestCaseGroup> bufferSourceGroup(new tcu::TestCaseGroup(group->getTestContext(), bufferSourceTypes[bufferSourceNdx].name, ""));
+
+		for (size_t extendedTraceDimensionsIdx = 0; extendedTraceDimensionsIdx < DE_LENGTH_OF_ARRAY(extendedTraceDimensions); ++extendedTraceDimensionsIdx)
+		{
+			TestParams testParams
+			{
+				bufferSourceTypes[bufferSourceNdx].traceType,
+				{/* Intentionally empty */},
+				true,
+				extendedTraceDimensions[extendedTraceDimensionsIdx],
+			};
+			const auto testName = makeDimensionsName(extendedTraceDimensions[extendedTraceDimensionsIdx]);
+			bufferSourceGroup->addChild(new RayTracingTraceRaysIndirectTestCase(group->getTestContext(), testName.c_str(), "", testParams));
+		}
+
+		group->addChild(bufferSourceGroup.release());
+	}
+
+	return group.release();
+}
+
+tcu::TestCaseGroup*	createTraceRays2Tests(tcu::TestContext& testCtx)
+{
+	auto group	= new tcu::TestCaseGroup(testCtx, "trace_rays_indirect2", "Tests veryfying vkCmdTraceRaysIndirect2KHR command");
+
+	std::pair<TraceType, const char*> const	bufferSources[]
+	{
+		{ TraceType::INDIRECT_CPU,	"indirect_cpu"		},
+		{ TraceType::INDIRECT_GPU,	"indirect_gpu"		},
+	};
+
+	std::pair<bool, const char*> const copyStyles[]
+	{
+		{ true,		"full_copy"	},
+		{ false,	"partial_copy" }
+	};
+
+	std::pair<VkQueueFlagBits, const char*> submitQueues[]
+	{
+		{ VK_QUEUE_GRAPHICS_BIT,	"submit_graphics" },
+		{ VK_QUEUE_COMPUTE_BIT,		"submit_compute" }
+	};
+
+	const VkExtent3D traceDimensions[] =
+	{
+		{ 11, 17, 1 },
+		{ 19, 11, 2 },
+		{ 23, 47, 3 },
+		{ 47, 19, 4 }
+	};
+
+	for (const auto& bufferSource : bufferSources)
+	{
+		auto bufferSourceGroup	= new TestCaseGroup(testCtx, bufferSource.second, "");
+
+		for (const auto& copyStyle : copyStyles)
+		{
+			auto copyStyleGroup	= new TestCaseGroup(testCtx, copyStyle.second, "");
+
+			for (const auto& submitQueue : submitQueues)
+			{
+				auto submitQueueGroup = new TestCaseGroup(testCtx, submitQueue.second, "");
+
+				for (const auto& traceDimension : traceDimensions)
+				{
+					TestParams2 testParams
+					{
+						bufferSource.first,
+						traceDimension,
+						copyStyle.first,
+						submitQueue.first
+					};
+					const auto testName = makeDimensionsName(traceDimension);
+					submitQueueGroup->addChild(new TraceRaysIndirect2Case(testCtx, testName.c_str(), testParams));
+				}
+				copyStyleGroup->addChild(submitQueueGroup);
+			}
+			bufferSourceGroup->addChild(copyStyleGroup);
+		}
+		group->addChild(bufferSourceGroup);
+	}
+
+	return group;
+}
+
 }	// RayTracing
 
 }	// vkt
diff --git a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingTraceRaysTests.hpp b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingTraceRaysTests.hpp
index 689cf48..6b829d1 100644
--- a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingTraceRaysTests.hpp
+++ b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingTraceRaysTests.hpp
@@ -4,7 +4,7 @@
  * Vulkan Conformance Tests
  * ------------------------
  *
- * Copyright (c) 2020 The Khronos Group Inc.
+ * Copyright (c) 2022 The Khronos Group Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -32,6 +32,8 @@
 {
 
 tcu::TestCaseGroup*	createTraceRaysTests(tcu::TestContext& testCtx);
+tcu::TestCaseGroup*	createTraceRaysMaintenance1Tests(tcu::TestContext& testCtx);
+tcu::TestCaseGroup*	createTraceRays2Tests(tcu::TestContext& testCtx);
 
 } // RayTracing
 } // vkt
diff --git a/external/vulkancts/mustpass/main/vk-default/api.txt b/external/vulkancts/mustpass/main/vk-default/api.txt
index 50ca7b9..1da9e13 100644
--- a/external/vulkancts/mustpass/main/vk-default/api.txt
+++ b/external/vulkancts/mustpass/main/vk-default/api.txt
@@ -3872,6 +3872,7 @@
 dEQP-VK.api.device_init.create_device_unsupported_features.present_id_features_khr
 dEQP-VK.api.device_init.create_device_unsupported_features.shader_subgroup_uniform_control_flow_features_khr
 dEQP-VK.api.device_init.create_device_unsupported_features.workgroup_memory_explicit_layout_features_khr
+dEQP-VK.api.device_init.create_device_unsupported_features.ray_tracing_maintenance1_features_khr
 dEQP-VK.api.device_init.create_device_unsupported_features.transform_feedback_features_ext
 dEQP-VK.api.device_init.create_device_unsupported_features.corner_sampled_image_features_nv
 dEQP-VK.api.device_init.create_device_unsupported_features.astc_decode_features_ext
@@ -3916,6 +3917,7 @@
 dEQP-VK.api.device_init.create_device_unsupported_features.ray_tracing_motion_blur_features_nv
 dEQP-VK.api.device_init.create_device_unsupported_features.ycbcr2_plane444_formats_features_ext
 dEQP-VK.api.device_init.create_device_unsupported_features.fragment_density_map2_features_ext
+dEQP-VK.api.device_init.create_device_unsupported_features.image_compression_control_features_ext
 dEQP-VK.api.device_init.create_device_unsupported_features.4444_formats_features_ext
 dEQP-VK.api.device_init.create_device_unsupported_features.rasterization_order_attachment_access_features_arm
 dEQP-VK.api.device_init.create_device_unsupported_features.rgba10_x6_formats_features_ext
@@ -3926,6 +3928,7 @@
 dEQP-VK.api.device_init.create_device_unsupported_features.subpass_shading_features_huawei
 dEQP-VK.api.device_init.create_device_unsupported_features.invocation_mask_features_huawei
 dEQP-VK.api.device_init.create_device_unsupported_features.external_memory_rdma_features_nv
+dEQP-VK.api.device_init.create_device_unsupported_features.pipeline_properties_features_ext
 dEQP-VK.api.device_init.create_device_unsupported_features.extended_dynamic_state2_features_ext
 dEQP-VK.api.device_init.create_device_unsupported_features.color_write_enable_features_ext
 dEQP-VK.api.device_init.create_device_unsupported_features.primitives_generated_query_features_ext
@@ -3937,6 +3940,8 @@
 dEQP-VK.api.device_init.create_device_unsupported_features.descriptor_set_host_mapping_features_valve
 dEQP-VK.api.device_init.create_device_unsupported_features.fragment_density_map_offset_features_qcom
 dEQP-VK.api.device_init.create_device_unsupported_features.linear_color_attachment_features_nv
+dEQP-VK.api.device_init.create_device_unsupported_features.image_compression_control_swapchain_features_ext
+dEQP-VK.api.device_init.create_device_unsupported_features.subpass_merge_feedback_features_ext
 dEQP-VK.api.device_init.create_device_unsupported_features.acceleration_structure_features_khr
 dEQP-VK.api.device_init.create_device_unsupported_features.ray_tracing_pipeline_features_khr
 dEQP-VK.api.device_init.create_device_unsupported_features.ray_query_features_khr
diff --git a/external/vulkancts/mustpass/main/vk-default/ray-tracing-pipeline.txt b/external/vulkancts/mustpass/main/vk-default/ray-tracing-pipeline.txt
index a4451d1..2b1954a 100644
--- a/external/vulkancts/mustpass/main/vk-default/ray-tracing-pipeline.txt
+++ b/external/vulkancts/mustpass/main/vk-default/ray-tracing-pipeline.txt
@@ -1028,6 +1028,26 @@
 dEQP-VK.ray_tracing_pipeline.trace_rays_cmds.indirect_gpu.11_1_1
 dEQP-VK.ray_tracing_pipeline.trace_rays_cmds.indirect_gpu.11_13_1
 dEQP-VK.ray_tracing_pipeline.trace_rays_cmds.indirect_gpu.11_13_5
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.0_0_0
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.0_1_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.1_0_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.1_1_0
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.8_1_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.8_8_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.8_8_8
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.11_1_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.11_13_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_cpu.11_13_5
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.0_0_0
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.0_1_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.1_0_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.1_1_0
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.8_1_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.8_8_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.8_8_8
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.11_1_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.11_13_1
+dEQP-VK.ray_tracing_pipeline.trace_rays_cmds_maintenance_1.indirect2_gpu.11_13_5
 dEQP-VK.ray_tracing_pipeline.shader_binding_table.indexing_hit.sbt_offset_0.no_shaderrecord.0_0
 dEQP-VK.ray_tracing_pipeline.shader_binding_table.indexing_hit.sbt_offset_0.no_shaderrecord.0_1
 dEQP-VK.ray_tracing_pipeline.shader_binding_table.indexing_hit.sbt_offset_0.no_shaderrecord.0_2
@@ -7738,6 +7758,30 @@
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.instance_triangle_culling.gpu_built.index_uint32.notransform_ccw
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.instance_triangle_culling.gpu_built.index_uint32.notransform_nocull
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.instance_triangle_culling.gpu_built.index_uint32.notransform_ccw_nocull
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.ahit.4_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.ahit.4_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.ahit.16_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.ahit.16_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.chit.4_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.chit.4_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.chit.16_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.chit.16_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.isec.4_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.isec.4_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.isec.16_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.cpu_built.isec.16_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.ahit.4_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.ahit.4_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.ahit.16_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.ahit.16_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.chit.4_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.chit.4_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.chit.16_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.chit.16_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.isec.4_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.isec.4_bits_reverse
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.isec.16_bits
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.ray_cull_mask.gpu_built.isec.16_bits_reverse
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.dynamic_indexing.dynamic_indexing
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.empty.cpu_built.index_none.inactive_triangles
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.empty.cpu_built.index_none.inactive_instances
@@ -7787,6 +7831,20 @@
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.header_bottom_address.gpu_built.the_same_instances
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.header_bottom_address.gpu_built.different_instances
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.header_bottom_address.gpu_built.mix_same_diff_instances
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.memory.size
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.memory.pointer_count
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.buffer.size
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.buffer.pointer_count
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.memory.size
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.memory.pointer_count
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.buffer.size
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.buffer.pointer_count
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.cpu.stage_as_copy_bit
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.cpu.stage_all_transfer
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.cpu.access_sbt_read
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.stage_as_copy_bit
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.stage_all_transfer
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.access_sbt_read
 dEQP-VK.ray_tracing_pipeline.procedural_geometry.object_behind_bounding_boxes
 dEQP-VK.ray_tracing_pipeline.procedural_geometry.triangle_in_between
 dEQP-VK.ray_tracing_pipeline.indirect.build_structure
@@ -9507,3 +9565,35 @@
 dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit_or_isect
 dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit
 dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.full_copy.submit_graphics.11x17x1
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.full_copy.submit_graphics.19x11x2
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.full_copy.submit_graphics.23x47x3
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.full_copy.submit_graphics.47x19x4
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.full_copy.submit_compute.11x17x1
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.full_copy.submit_compute.19x11x2
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.full_copy.submit_compute.23x47x3
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.full_copy.submit_compute.47x19x4
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.partial_copy.submit_graphics.11x17x1
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.partial_copy.submit_graphics.19x11x2
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.partial_copy.submit_graphics.23x47x3
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.partial_copy.submit_graphics.47x19x4
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.partial_copy.submit_compute.11x17x1
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.partial_copy.submit_compute.19x11x2
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.partial_copy.submit_compute.23x47x3
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_cpu.partial_copy.submit_compute.47x19x4
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.full_copy.submit_graphics.11x17x1
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.full_copy.submit_graphics.19x11x2
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.full_copy.submit_graphics.23x47x3
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.full_copy.submit_graphics.47x19x4
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.full_copy.submit_compute.11x17x1
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.full_copy.submit_compute.19x11x2
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.full_copy.submit_compute.23x47x3
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.full_copy.submit_compute.47x19x4
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.partial_copy.submit_graphics.11x17x1
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.partial_copy.submit_graphics.19x11x2
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.partial_copy.submit_graphics.23x47x3
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.partial_copy.submit_graphics.47x19x4
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.partial_copy.submit_compute.11x17x1
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.partial_copy.submit_compute.19x11x2
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.partial_copy.submit_compute.23x47x3
+dEQP-VK.ray_tracing_pipeline.trace_rays_indirect2.indirect_gpu.partial_copy.submit_compute.47x19x4
diff --git a/external/vulkancts/scripts/src/extensions/VK_KHR_ray_tracing_maintenance1.json b/external/vulkancts/scripts/src/extensions/VK_KHR_ray_tracing_maintenance1.json
new file mode 100644
index 0000000..737c8a3
--- /dev/null
+++ b/external/vulkancts/scripts/src/extensions/VK_KHR_ray_tracing_maintenance1.json
@@ -0,0 +1,14 @@
+{
+	"register_extension":
+	{
+		"type": "device",
+		"core": ""
+	},
+	"mandatory_features":
+	{
+		"VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR":
+		[
+			{ "features": ["rayTracingMaintenance1"],	"requirements": ["VK_KHR_ray_tracing_maintenance1"] }
+		]
+	}
+}