venus: add support for VK_EXT_primitive_topology_list_restart
authorJuston Li <justonli@chromium.org>
Fri, 26 Aug 2022 22:50:10 +0000 (15:50 -0700)
committerJuston Li <justonli@chromium.org>
Fri, 26 Aug 2022 23:30:51 +0000 (16:30 -0700)
See:
virgl/virglrenderer!902
olv/venus-protocol!46

Test:
./deqp-vk -n dEQP-VK.pipeline.monolithic.input_assembly.primitive_restart.*

Test run totals:
  Passed:        55/55 (100.0%)
  Failed:        0/55 (0.0%)
  Not supported: 0/55 (0.0%)
  Warnings:      0/55 (0.0%)
  Waived:        0/55 (0.0%)

Signed-off-by: Juston Li <justonli@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18283>

src/virtio/vulkan/vn_physical_device.c
src/virtio/vulkan/vn_physical_device.h

index d100810..d538559 100644 (file)
@@ -163,6 +163,9 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev)
    VN_ADD_EXT_TO_PNEXT(exts->EXT_line_rasterization,
                        feats->line_rasterization,
                        LINE_RASTERIZATION_FEATURES_EXT, features2);
+   VN_ADD_EXT_TO_PNEXT(exts->EXT_primitive_topology_list_restart,
+                       feats->primitive_topology_list_restart,
+                       PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT, features2);
    VN_ADD_EXT_TO_PNEXT(exts->EXT_provoking_vertex, feats->provoking_vertex,
                        PROVOKING_VERTEX_FEATURES_EXT, features2);
    VN_ADD_EXT_TO_PNEXT(exts->EXT_robustness2, feats->robustness_2,
@@ -1059,6 +1062,7 @@ vn_physical_device_get_passthrough_extensions(
       .EXT_image_view_min_lod = true,
       .EXT_index_type_uint8 = true,
       .EXT_line_rasterization = true,
+      .EXT_primitive_topology_list_restart = true,
       .EXT_provoking_vertex = true,
       .EXT_queue_family_foreign = true,
       .EXT_robustness2 = true,
@@ -1686,6 +1690,8 @@ vn_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
       VkPhysicalDeviceDepthClipEnableFeaturesEXT *depth_clip_enable;
       VkPhysicalDeviceIndexTypeUint8FeaturesEXT *index_type_uint8;
       VkPhysicalDeviceLineRasterizationFeaturesEXT *line_rasterization;
+      VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT
+         *primitive_topology_list_restart;
       VkPhysicalDeviceProvokingVertexFeaturesEXT *provoking_vertex;
       VkPhysicalDeviceRobustness2FeaturesEXT *robustness_2;
       VkPhysicalDeviceTransformFeedbackFeaturesEXT *transform_feedback;
@@ -1898,6 +1904,9 @@ vn_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT:
          *u.line_rasterization = feats->line_rasterization;
          break;
+      case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT:
+         *u.primitive_topology_list_restart = feats->primitive_topology_list_restart;
+         break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT:
          *u.provoking_vertex = feats->provoking_vertex;
          break;
index 2185757..f271d33 100644 (file)
@@ -44,6 +44,8 @@ struct vn_physical_device_features {
    VkPhysicalDeviceImageViewMinLodFeaturesEXT image_view_min_lod;
    VkPhysicalDeviceIndexTypeUint8FeaturesEXT index_type_uint8;
    VkPhysicalDeviceLineRasterizationFeaturesEXT line_rasterization;
+   VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT
+      primitive_topology_list_restart;
    VkPhysicalDeviceProvokingVertexFeaturesEXT provoking_vertex;
    VkPhysicalDeviceRobustness2FeaturesEXT robustness_2;
    VkPhysicalDeviceTransformFeedbackFeaturesEXT transform_feedback;