From b2040900d097b25e069bf00f25b0c4bb5cfff292 Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Mon, 10 Mar 2025 15:39:02 -0700 Subject: [PATCH] venus: support VK_EXT_nested_command_buffer Venus query records have been properly propagated from nested cmds already, so no special care is needed here for qfb optimizations. Test: - dEQP-VK.api.command_buffers.*nested* - dEQP-VK.conditional_rendering.*nested* - dEQP-VK.draw.dynamic_rendering.nested_* - dEQP-VK.multiview.*nested* Signed-off-by: Yiwei Zhang Part-of: --- docs/features.txt | 2 +- src/virtio/vulkan/vn_physical_device.c | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/features.txt b/docs/features.txt index 84dbc7e0c6e..ba09ea2dced 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -630,7 +630,7 @@ Khronos extensions that are not part of any Vulkan version: VK_EXT_mesh_shader DONE (anv/gfx12.5+, lvp, radv) VK_EXT_multi_draw DONE (anv, hasvk, lvp, nvk, radv, tu, vn, v3dv) VK_EXT_multisampled_render_to_single_sampled DONE (lvp) - VK_EXT_nested_command_buffer DONE (anv, lvp, nvk, radv, tu) + VK_EXT_nested_command_buffer DONE (anv, lvp, nvk, radv, tu, vn) VK_EXT_non_seamless_cube_map DONE (anv, hasvk, lvp, nvk, radv, tu, vn) VK_EXT_pageable_device_local_memory DONE (lvp) VK_EXT_pci_bus_info DONE (anv, hasvk, nvk, radv, vn) diff --git a/src/virtio/vulkan/vn_physical_device.c b/src/virtio/vulkan/vn_physical_device.c index 9925097700a..3cc5b367fd3 100644 --- a/src/virtio/vulkan/vn_physical_device.c +++ b/src/virtio/vulkan/vn_physical_device.c @@ -201,6 +201,7 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev) legacy_vertex_attributes; VkPhysicalDeviceMultiDrawFeaturesEXT multi_draw; VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT mutable_descriptor_type; + VkPhysicalDeviceNestedCommandBufferFeaturesEXT nested_command_buffer; VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT non_seamless_cube_map; VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT primitive_topology_list_restart; @@ -344,6 +345,7 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev) VN_ADD_PNEXT_EXT(feats2, IMAGE_VIEW_MIN_LOD_FEATURES_EXT, local_feats.image_view_min_lod, exts->EXT_image_view_min_lod); VN_ADD_PNEXT_EXT(feats2, MULTI_DRAW_FEATURES_EXT, local_feats.multi_draw, exts->EXT_multi_draw); VN_ADD_PNEXT_EXT(feats2, MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT, local_feats.mutable_descriptor_type, exts->EXT_mutable_descriptor_type || exts->VALVE_mutable_descriptor_type); + VN_ADD_PNEXT_EXT(feats2, NESTED_COMMAND_BUFFER_FEATURES_EXT, local_feats.nested_command_buffer, exts->EXT_nested_command_buffer); VN_ADD_PNEXT_EXT(feats2, NON_SEAMLESS_CUBE_MAP_FEATURES_EXT, local_feats.non_seamless_cube_map, exts->EXT_non_seamless_cube_map); VN_ADD_PNEXT_EXT(feats2, PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT, local_feats.primitive_topology_list_restart, exts->EXT_primitive_topology_list_restart); VN_ADD_PNEXT_EXT(feats2, PRIMITIVES_GENERATED_QUERY_FEATURES_EXT, local_feats.primitives_generated_query, exts->EXT_primitives_generated_query); @@ -573,6 +575,7 @@ vn_physical_device_init_properties(struct vn_physical_device *physical_dev) VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT legacy_vertex_attributes; VkPhysicalDeviceMultiDrawPropertiesEXT multi_draw; + VkPhysicalDeviceNestedCommandBufferPropertiesEXT nested_command_buffer; VkPhysicalDevicePCIBusInfoPropertiesEXT pci_bus_info; VkPhysicalDeviceProvokingVertexPropertiesEXT provoking_vertex; VkPhysicalDeviceRobustness2PropertiesEXT robustness_2; @@ -660,6 +663,7 @@ vn_physical_device_init_properties(struct vn_physical_device *physical_dev) VN_ADD_PNEXT_EXT(props2, GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT, local_props.graphics_pipeline_library, exts->EXT_graphics_pipeline_library); VN_ADD_PNEXT_EXT(props2, LEGACY_VERTEX_ATTRIBUTES_PROPERTIES_EXT, local_props.legacy_vertex_attributes, exts->EXT_legacy_vertex_attributes); VN_ADD_PNEXT_EXT(props2, MULTI_DRAW_PROPERTIES_EXT, local_props.multi_draw, exts->EXT_multi_draw); + VN_ADD_PNEXT_EXT(props2, NESTED_COMMAND_BUFFER_PROPERTIES_EXT, local_props.nested_command_buffer, exts->EXT_nested_command_buffer); VN_ADD_PNEXT_EXT(props2, PCI_BUS_INFO_PROPERTIES_EXT, local_props.pci_bus_info, exts->EXT_pci_bus_info); VN_ADD_PNEXT_EXT(props2, PROVOKING_VERTEX_PROPERTIES_EXT, local_props.provoking_vertex, exts->EXT_provoking_vertex); VN_ADD_PNEXT_EXT(props2, ROBUSTNESS_2_PROPERTIES_EXT, local_props.robustness_2, exts->EXT_robustness2); @@ -739,6 +743,7 @@ vn_physical_device_init_properties(struct vn_physical_device *physical_dev) VN_SET_VK_PROPS_EXT(props, &local_props.graphics_pipeline_library, exts->EXT_graphics_pipeline_library); VN_SET_VK_PROPS_EXT(props, &local_props.legacy_vertex_attributes, exts->EXT_legacy_vertex_attributes); VN_SET_VK_PROPS_EXT(props, &local_props.multi_draw, exts->EXT_multi_draw); + VN_SET_VK_PROPS_EXT(props, &local_props.nested_command_buffer, exts->EXT_nested_command_buffer); VN_SET_VK_PROPS_EXT(props, &local_props.pci_bus_info, exts->EXT_pci_bus_info); VN_SET_VK_PROPS_EXT(props, &local_props.provoking_vertex, exts->EXT_provoking_vertex); VN_SET_VK_PROPS_EXT(props, &local_props.robustness_2, exts->EXT_robustness2); @@ -1302,6 +1307,7 @@ vn_physical_device_get_passthrough_extensions( .EXT_memory_budget = false, .EXT_multi_draw = true, .EXT_mutable_descriptor_type = true, + .EXT_nested_command_buffer = true, .EXT_non_seamless_cube_map = true, .EXT_post_depth_coverage = true, .EXT_primitive_topology_list_restart = true,