From dfd2af5da11eca3678c0b34a24776114950fb6dc Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Fri, 14 Feb 2025 18:57:09 -0800 Subject: [PATCH] Support 5 more promoted extensions VK_KHR_calibrated_timestamps VK_KHR_index_type_uint8 VK_KHR_line_rasterization VK_KHR_load_store_op_none VK_KHR_vertex_attribute_divisor Signed-off-by: Yiwei Zhang Part-of: --- docs/features.txt | 10 +++---- src/virtio/vulkan/vn_physical_device.c | 37 ++++++++++++++++---------- 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/docs/features.txt b/docs/features.txt index 58b500faa26..67f9c753136 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -513,9 +513,9 @@ Vulkan 1.4 -- all DONE: anv, lvp, nvk, radv/gfx8+, tu/a7xx+ VK_KHR_dynamic_rendering_local_read DONE (anv, lvp, nvk, radv, tu) VK_KHR_global_priority DONE (anv, lvp, nvk, panvk, radv, tu) - VK_KHR_index_type_uint8 DONE (anv, lvp, nvk, panvk, pvr, radv, tu, v3dv) - VK_KHR_line_rasterization DONE (anv, lvp, nvk, radv, tu, v3dv) - VK_KHR_load_store_op_none DONE (anv, lvp, nvk, radv, tu, v3dv) + VK_KHR_index_type_uint8 DONE (anv, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn) + VK_KHR_line_rasterization DONE (anv, lvp, nvk, radv, tu, v3dv, vn) + VK_KHR_load_store_op_none DONE (anv, lvp, nvk, radv, tu, v3dv, vn) VK_KHR_maintenance5 DONE (anv, lvp, nvk, radv, tu, v3dv, vn) VK_KHR_maintenance6 DONE (anv, lvp, nvk, radv, tu) VK_KHR_map_memory2 DONE (anv, lvp, nvk, panvk, radv, tu) @@ -523,7 +523,7 @@ Vulkan 1.4 -- all DONE: anv, lvp, nvk, radv/gfx8+, tu/a7xx+ VK_KHR_shader_expect_assume DONE (anv, dzn, hasvk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn) VK_KHR_shader_float_controls2 DONE (anv, lvp, nvk, radv, tu) VK_KHR_shader_subgroup_rotate DONE (anv, lvp, nvk, radv, tu) - VK_KHR_vertex_attribute_divisor DONE (anv, lvp, nvk, panvk, radv, tu, v3dv) + VK_KHR_vertex_attribute_divisor DONE (anv, lvp, nvk, panvk, radv, tu, v3dv, vn) VK_EXT_host_image_copy DONE (anv, lvp, nvk/Turing+, tu) VK_EXT_pipeline_protected_access DONE (anv/gfx12+) VK_EXT_pipeline_robustness DONE (anv, lvp, nvk, panvk, radv, v3dv, tu) @@ -532,7 +532,7 @@ Khronos extensions that are not part of any Vulkan version: VK_KHR_acceleration_structure DONE (anv/gfx12.5+, lvp, radv/gfx10.3+, tu/a740+) VK_KHR_android_surface not started - VK_KHR_calibrated_timestamps DONE (anv, nvk, radv, tu/a750+) + VK_KHR_calibrated_timestamps DONE (anv, nvk, radv, tu/a750+, vn) VK_KHR_compute_shader_derivatives DONE (anv, nvk, radv, tu/a7xx+) VK_KHR_cooperative_matrix DONE (anv, radv/gfx11+) VK_KHR_deferred_host_operations DONE (anv, hasvk, lvp, radv) diff --git a/src/virtio/vulkan/vn_physical_device.c b/src/virtio/vulkan/vn_physical_device.c index 29e1a411202..05d7fa6467f 100644 --- a/src/virtio/vulkan/vn_physical_device.c +++ b/src/virtio/vulkan/vn_physical_device.c @@ -162,9 +162,13 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev) /* KHR */ VkPhysicalDeviceFragmentShadingRateFeaturesKHR fragment_shading_rate; + VkPhysicalDeviceIndexTypeUint8FeaturesKHR index_type_uint8; + VkPhysicalDeviceLineRasterizationFeaturesKHR line_rasterization; VkPhysicalDeviceMaintenance5FeaturesKHR maintenance5; VkPhysicalDeviceShaderClockFeaturesKHR shader_clock; VkPhysicalDeviceShaderExpectAssumeFeaturesKHR expect_assume; + VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR + vertex_attribute_divisor; /* EXT */ VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT attachment_feedback_loop_layout; @@ -186,8 +190,6 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev) graphics_pipeline_library; VkPhysicalDeviceImage2DViewOf3DFeaturesEXT image_2d_view_of_3d; VkPhysicalDeviceImageViewMinLodFeaturesEXT image_view_min_lod; - VkPhysicalDeviceIndexTypeUint8FeaturesEXT index_type_uint8; - VkPhysicalDeviceLineRasterizationFeaturesEXT line_rasterization; VkPhysicalDeviceMultiDrawFeaturesEXT multi_draw; VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT mutable_descriptor_type; VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT non_seamless_cube_map; @@ -200,8 +202,6 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev) rasterization_order_attachment_access; VkPhysicalDeviceRobustness2FeaturesEXT robustness_2; VkPhysicalDeviceTransformFeedbackFeaturesEXT transform_feedback; - VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT - vertex_attribute_divisor; VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT vertex_input_dynamic_state; } local_feats; @@ -270,9 +270,12 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev) /* KHR */ VN_ADD_PNEXT_EXT(feats2, FRAGMENT_SHADING_RATE_FEATURES_KHR, local_feats.fragment_shading_rate, exts->KHR_fragment_shading_rate); + VN_ADD_PNEXT_EXT(feats2, INDEX_TYPE_UINT8_FEATURES_KHR, local_feats.index_type_uint8, exts->KHR_index_type_uint8 || exts->EXT_index_type_uint8); + VN_ADD_PNEXT_EXT(feats2, LINE_RASTERIZATION_FEATURES_KHR, local_feats.line_rasterization, exts->KHR_line_rasterization || exts->EXT_line_rasterization); + VN_ADD_PNEXT_EXT(feats2, MAINTENANCE_5_FEATURES_KHR, local_feats.maintenance5, exts->KHR_maintenance5); VN_ADD_PNEXT_EXT(feats2, SHADER_CLOCK_FEATURES_KHR, local_feats.shader_clock, exts->KHR_shader_clock); VN_ADD_PNEXT_EXT(feats2, SHADER_EXPECT_ASSUME_FEATURES_KHR, local_feats.expect_assume, exts->KHR_shader_expect_assume); - VN_ADD_PNEXT_EXT(feats2, MAINTENANCE_5_FEATURES_KHR, local_feats.maintenance5, exts->KHR_maintenance5); + VN_ADD_PNEXT_EXT(feats2, VERTEX_ATTRIBUTE_DIVISOR_FEATURES_KHR, local_feats.vertex_attribute_divisor, exts->KHR_vertex_attribute_divisor || exts->EXT_vertex_attribute_divisor); /* EXT */ VN_ADD_PNEXT_EXT(feats2, ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT, local_feats.attachment_feedback_loop_layout, exts->EXT_attachment_feedback_loop_layout); @@ -289,8 +292,6 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev) VN_ADD_PNEXT_EXT(feats2, GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT, local_feats.graphics_pipeline_library, exts->EXT_graphics_pipeline_library); VN_ADD_PNEXT_EXT(feats2, IMAGE_2D_VIEW_OF_3D_FEATURES_EXT, local_feats.image_2d_view_of_3d, exts->EXT_image_2d_view_of_3d); 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, INDEX_TYPE_UINT8_FEATURES_EXT, local_feats.index_type_uint8, exts->EXT_index_type_uint8); - VN_ADD_PNEXT_EXT(feats2, LINE_RASTERIZATION_FEATURES_EXT, local_feats.line_rasterization, exts->EXT_line_rasterization); 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, NON_SEAMLESS_CUBE_MAP_FEATURES_EXT, local_feats.non_seamless_cube_map, exts->EXT_non_seamless_cube_map); @@ -300,7 +301,6 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev) VN_ADD_PNEXT_EXT(feats2, RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT, local_feats.rasterization_order_attachment_access, exts->EXT_rasterization_order_attachment_access); VN_ADD_PNEXT_EXT(feats2, ROBUSTNESS_2_FEATURES_EXT, local_feats.robustness_2, exts->EXT_robustness2); VN_ADD_PNEXT_EXT(feats2, TRANSFORM_FEEDBACK_FEATURES_EXT, local_feats.transform_feedback, exts->EXT_transform_feedback); - VN_ADD_PNEXT_EXT(feats2, VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT, local_feats.vertex_attribute_divisor, exts->EXT_vertex_attribute_divisor); VN_ADD_PNEXT_EXT(feats2, VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT, local_feats.vertex_input_dynamic_state, exts->EXT_vertex_input_dynamic_state); /* clang-format on */ @@ -480,8 +480,11 @@ vn_physical_device_init_properties(struct vn_physical_device *physical_dev) VkPhysicalDeviceTexelBufferAlignmentProperties texel_buffer_alignment; /* KHR */ + VkPhysicalDeviceLineRasterizationPropertiesKHR line_rasterization; VkPhysicalDevicePushDescriptorPropertiesKHR push_descriptor; VkPhysicalDeviceFragmentShadingRatePropertiesKHR fragment_shading_rate; + VkPhysicalDeviceVertexAttributeDivisorPropertiesKHR + vertex_attribute_divisor; /* EXT */ VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT @@ -493,7 +496,6 @@ vn_physical_device_init_properties(struct vn_physical_device *physical_dev) extended_dynamic_state_3; VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT graphics_pipeline_library; - VkPhysicalDeviceLineRasterizationPropertiesEXT line_rasterization; VkPhysicalDeviceMultiDrawPropertiesEXT multi_draw; VkPhysicalDevicePCIBusInfoPropertiesEXT pci_bus_info; VkPhysicalDeviceProvokingVertexPropertiesEXT provoking_vertex; @@ -501,7 +503,7 @@ vn_physical_device_init_properties(struct vn_physical_device *physical_dev) VkPhysicalDeviceSampleLocationsPropertiesEXT sample_locations; VkPhysicalDeviceTransformFeedbackPropertiesEXT transform_feedback; VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT - vertex_attribute_divisor; + vertex_attribute_divisor_ext; } local_props; /* Clear the structs so all unqueried properties will be well-defined. */ @@ -543,8 +545,10 @@ vn_physical_device_init_properties(struct vn_physical_device *physical_dev) } /* KHR */ + VN_ADD_PNEXT_EXT(props2, LINE_RASTERIZATION_PROPERTIES_KHR, local_props.line_rasterization, exts->KHR_line_rasterization || exts->EXT_line_rasterization); VN_ADD_PNEXT_EXT(props2, FRAGMENT_SHADING_RATE_PROPERTIES_KHR, local_props.fragment_shading_rate, exts->KHR_fragment_shading_rate); VN_ADD_PNEXT_EXT(props2, PUSH_DESCRIPTOR_PROPERTIES_KHR, local_props.push_descriptor, exts->KHR_push_descriptor); + VN_ADD_PNEXT_EXT(props2, VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_KHR, local_props.vertex_attribute_divisor, exts->KHR_vertex_attribute_divisor); /* EXT */ VN_ADD_PNEXT_EXT(props2, BLEND_OPERATION_ADVANCED_PROPERTIES_EXT, local_props.blend_operation_advanced, exts->EXT_blend_operation_advanced); @@ -552,14 +556,13 @@ vn_physical_device_init_properties(struct vn_physical_device *physical_dev) VN_ADD_PNEXT_EXT(props2, CUSTOM_BORDER_COLOR_PROPERTIES_EXT, local_props.custom_border_color, exts->EXT_custom_border_color); VN_ADD_PNEXT_EXT(props2, EXTENDED_DYNAMIC_STATE_3_PROPERTIES_EXT, local_props.extended_dynamic_state_3, exts->EXT_extended_dynamic_state3); 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, LINE_RASTERIZATION_PROPERTIES_EXT, local_props.line_rasterization, exts->EXT_line_rasterization); VN_ADD_PNEXT_EXT(props2, MULTI_DRAW_PROPERTIES_EXT, local_props.multi_draw, exts->EXT_multi_draw); 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); VN_ADD_PNEXT_EXT(props2, SAMPLE_LOCATIONS_PROPERTIES_EXT, local_props.sample_locations, exts->EXT_sample_locations); VN_ADD_PNEXT_EXT(props2, TRANSFORM_FEEDBACK_PROPERTIES_EXT, local_props.transform_feedback, exts->EXT_transform_feedback); - VN_ADD_PNEXT_EXT(props2, VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT, local_props.vertex_attribute_divisor, exts->EXT_vertex_attribute_divisor); + VN_ADD_PNEXT_EXT(props2, VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT, local_props.vertex_attribute_divisor_ext, !exts->KHR_vertex_attribute_divisor && exts->EXT_vertex_attribute_divisor); /* clang-format on */ @@ -607,7 +610,9 @@ vn_physical_device_init_properties(struct vn_physical_device *physical_dev) /* KHR */ VN_SET_VK_PROPS_EXT(props, &local_props.fragment_shading_rate, exts->KHR_fragment_shading_rate); + VN_SET_VK_PROPS_EXT(props, &local_props.line_rasterization, exts->KHR_line_rasterization || exts->EXT_line_rasterization); VN_SET_VK_PROPS_EXT(props, &local_props.push_descriptor, exts->KHR_push_descriptor); + VN_SET_VK_PROPS_EXT(props, &local_props.vertex_attribute_divisor, exts->KHR_vertex_attribute_divisor); /* EXT */ VN_SET_VK_PROPS_EXT(props, &local_props.blend_operation_advanced, exts->EXT_blend_operation_advanced); @@ -615,14 +620,13 @@ vn_physical_device_init_properties(struct vn_physical_device *physical_dev) VN_SET_VK_PROPS_EXT(props, &local_props.custom_border_color, exts->EXT_custom_border_color); VN_SET_VK_PROPS_EXT(props, &local_props.extended_dynamic_state_3, exts->EXT_extended_dynamic_state3); VN_SET_VK_PROPS_EXT(props, &local_props.graphics_pipeline_library, exts->EXT_graphics_pipeline_library); - VN_SET_VK_PROPS_EXT(props, &local_props.line_rasterization, exts->EXT_line_rasterization); VN_SET_VK_PROPS_EXT(props, &local_props.multi_draw, exts->EXT_multi_draw); 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); VN_SET_VK_PROPS_EXT(props, &local_props.sample_locations, exts->EXT_sample_locations); VN_SET_VK_PROPS_EXT(props, &local_props.transform_feedback, exts->EXT_transform_feedback); - VN_SET_VK_PROPS_EXT(props, &local_props.vertex_attribute_divisor, exts->EXT_vertex_attribute_divisor); + VN_SET_VK_PROPS_EXT(props, &local_props.vertex_attribute_divisor_ext, !exts->KHR_vertex_attribute_divisor && exts->EXT_vertex_attribute_divisor); /* clang-format on */ @@ -1072,12 +1076,17 @@ vn_physical_device_get_passthrough_extensions( .EXT_ycbcr_2plane_444_formats = true, /* KHR */ + .KHR_calibrated_timestamps = true, .KHR_fragment_shading_rate = true, + .KHR_index_type_uint8 = true, + .KHR_line_rasterization = true, + .KHR_load_store_op_none = true, .KHR_maintenance5 = true, .KHR_pipeline_library = true, .KHR_push_descriptor = true, .KHR_shader_clock = true, .KHR_shader_expect_assume = true, + .KHR_vertex_attribute_divisor = true, /* EXT */ .EXT_attachment_feedback_loop_layout = true,