nvk: Support transform feedback geometry streams
authorGeorge Ouzounoudis <geothrock@gmail.com>
Sat, 26 Nov 2022 16:32:22 +0000 (18:32 +0200)
committerMarge Bot <emma+marge@anholt.net>
Fri, 4 Aug 2023 21:32:04 +0000 (21:32 +0000)
We just need to set the correct limits and features.  The meaningful
change here is the selected stream for rasterization which is configured
through the graphics pipeline.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24326>

src/nouveau/vulkan/nvk_graphics_pipeline.c
src/nouveau/vulkan/nvk_physical_device.c
src/nouveau/vulkan/nvk_shader.c

index 04f0ce2..f7e9662 100644 (file)
@@ -42,7 +42,7 @@ emit_pipeline_rs_state(struct nv_push *p,
       .geometry_guardband_z      = GEOMETRY_GUARDBAND_Z_SAME_AS_XY_GUARDBAND,
    });
 
-   assert(rs->rasterization_stream == 0);
+   P_IMMD(p, NV9097, SET_RASTER_INPUT, rs->rasterization_stream);
 
    assert(rs->line.mode == VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT);
 }
index 92aff5e..6c4035d 100644 (file)
@@ -230,7 +230,7 @@ nvk_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice,
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT: {
          VkPhysicalDeviceTransformFeedbackPropertiesEXT *p = (void *)ext;
-         p->maxTransformFeedbackStreams = 0;
+         p->maxTransformFeedbackStreams = 4;
          p->maxTransformFeedbackBuffers = 4;
          p->maxTransformFeedbackBufferSize = UINT32_MAX;
          p->maxTransformFeedbackStreamDataSize = 2048;
@@ -238,7 +238,7 @@ nvk_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice,
          p->maxTransformFeedbackBufferDataStride = 2048;
          p->transformFeedbackQueries = false;
          p->transformFeedbackStreamsLinesTriangles = false;
-         p->transformFeedbackRasterizationStreamSelect = false;
+         p->transformFeedbackRasterizationStreamSelect = true;
          p->transformFeedbackDraw = true;
          break;
       }
@@ -483,7 +483,7 @@ nvk_get_device_features(const struct nv_device_info *dev,
 
       /* VK_EXT_transform_feedback */
       .transformFeedback = dev->cls_eng3d >= TURING_A,
-      .geometryStreams = false,
+      .geometryStreams = dev->cls_eng3d >= TURING_A,
 
       /* VK_EXT_vertex_attribute_divisor */
       .vertexAttributeInstanceRateDivisor = true,
index 1c682bd..6cb77c3 100644 (file)
@@ -69,6 +69,7 @@ nvk_physical_device_spirv_options(const struct nvk_physical_device *pdevice,
          .image_write_without_format = true,
          .physical_storage_buffer_address = true,
          .transform_feedback = true,
+         .geometry_streams = true,
       },
       .ssbo_addr_format = nvk_buffer_addr_format(rs->storage_buffers),
       .phys_ssbo_addr_format = nir_address_format_64bit_global,